equipment.py (2842B)
1 from app import app 2 from flask_pymongo import PyMongo 3 from bson.objectid import ObjectId 4 5 mongo = PyMongo(app) 6 7 class EquipmentNotFoundError(Exception): 8 pass 9 10 def fetch_equipment(equipment_id): 11 equipment = mongo.db.equipment_collection.find_one({"_id":ObjectId(equipment_id)}) 12 13 if equipment == None: 14 raise EquipmentNotFoundError(f'Equipment Id {equipment_id} returned None') 15 else: 16 return equipment 17 18 # return all past and present equipment 19 def get_all_equipment(): 20 equipment = mongo.db.equipment_collection.find() 21 return equipment 22 23 # return all equipment not damaged, in use, and not in use presently 24 def get_usable_equipment(): 25 equipment = mongo.db.equipment_collection.find({'retired':{'$exists':False}}) 26 return equipment 27 28 # return equipment not damaged, and ready to use, does not return equipment in use presently 29 def get_available_equipment(): 30 equipment = mongo.db.equipment_collection.find({'retired':{'$exists':False},'checked_out':{'$exists':False}}) 31 return equipment 32 33 # return available equipment by type 34 def get_available_equipment_type(equipment_type,branch=None): 35 matchdoc = {"equipment_type":equipment_type,'checked_out':{'$exists':False},'retired':{'$exists':False}} 36 if branch != None: 37 matchdoc["branch"] = branch 38 equipment = mongo.db.equipment_collection.aggregate( [ 39 { 40 "$match": matchdoc 41 }, 42 { 43 "$sort": { 44 "equipment_type":1, 45 "purchase_timestamp":1 46 } 47 } 48 ] ) 49 return equipment 50 51 # return document of equipment type (_id) and count(number of occurances) 52 def get_equipment_types(): 53 types = mongo.db.equipment_collection.aggregate( [ 54 { 55 '$group':{ 56 '_id':'$equipment_type', 57 'count': {'$count':{} } 58 } 59 }, 60 { '$sort':{'equipment_type':1} } 61 ] ) 62 return types 63 64 # return tuple list ('type','type (count)') 65 def count_equipment_types(): 66 counts = [] 67 for tool in get_equipment_types(): 68 label = "{} ({})".format(tool['_id'],tool['count']) 69 counts.append((tool['_id'],label)) 70 return counts 71 72 # update db and returns equipment with checked_out attribute set to True by id 73 def checkout_equipment_id(equipment_id): 74 equipment = fetch_equpiment(equipment_id) 75 equipment['checked_out'] = True 76 mongo.db.equipment_collection.update({'_id':equipment_id},{'$set':{'checked_out':True}}) 77 return equipment 78 79 # update db and returns equipment with popped checked_out attribute by id 80 def checkin_equipment_id(equipment_id): 81 equipment = fetch_equipment(equipment_id) 82 equipment.pop('checked_out') 83 mongo.db.equipment_collection.update({'_id':equipment_id},{'$unset':{'checked_out':""}}) 84 return equipment