def post(self): try: collection = MONGO.db[self.db_name] result = collection.insert_one(self._data) if not result.acknowledged: e = StatusException('write concern was disabled') e.status = http.INTERNAL_SERVER_ERROR raise e self._id = result.inserted_id return self._id except Exception as ex: e = StatusException(ex) e.status = http.INTERNAL_SERVER_ERROR raise e
def delete(self): try: collection = MONGO.db[self.db_name] res = collection.delete_one({"_id": ObjectId(self._id)}) if res.deleted_count != 1: msg = f"The number of deleted docs were {res.deleted_count}" e = StatusException(msg) e.status = http.INTERNAL_SERVER_ERROR raise e return self._id except Exception as ex: e = StatusException(ex) e.status = http.INTERNAL_SERVER_ERROR raise e
def get_all(cls, args: dict): try: collection = MONGO.db[cls.db_name] result = list(collection.find(args)) return result except Exception as ex: e = StatusException(ex) e.status = http.INTERNAL_SERVER_ERROR raise e
def get(cls, _id): try: ObjectId(_id) except Exception as ex: e = StatusException(ex) e.status = http.BAD_REQUEST raise e try: collection = MONGO.db[cls.db_name] doc = collection.find_one({"_id": ObjectId(_id)}) except Exception as ex: e = StatusException(ex) e.status = http.INTERNAL_SERVER_ERROR raise e if doc is not None: doc = dict(doc) cls.validate_data(doc, False) return doc
def patch(self, data): self.validate_update_data(data, True, self._id) try: collection = MONGO.db[self.db_name] collection.update_one({'_id': ObjectId(self._id)}, {"$set": data}) return self._id except Exception as ex: e = StatusException(ex) e.status = http.INTERNAL_SERVER_ERROR raise e
def validate_key_in_schema(cls, field): if field not in cls.schema.keys(): name = cls.__class__.__name__ e = StatusException(f"{field} is not a valid attribute of {name}") e.status = http.BAD_REQUEST raise e
def validate_schema(cls, data): for key in cls.schema: if key not in data: e = StatusException(f"Argument {key} missing") e.status = http.BAD_REQUEST raise e
def validate_data_types(cls, data): for key in data: if not cls.validate_type(key, data[key]): e = StatusException(f"Argument {key} has invalid type") e.status = http.BAD_REQUEST raise e