def update_many(self): did, app_id, content, err = post_json_param_pre_proc(self.response, "collection", "filter", "update", access_vault=VAULT_ACCESS_WR) if err: return err col = get_collection(did, app_id, content["collection"]) if not col: return self.response.response_err(NOT_FOUND, "collection not exist") options = options_filter(content, ("upsert", "bypass_document_validation")) try: update_set_on_insert = content.get('update').get('$setOnInsert', None) if update_set_on_insert: content["update"]["$setOnInsert"]['created'] = datetime.utcnow() else: content["update"]["$setOnInsert"] = { "created": datetime.utcnow() } if "$set" in content["update"]: content["update"]["$set"]["modified"] = datetime.utcnow() ret = col.update_many(convert_oid(content["filter"]), convert_oid(content["update"], update=True), **options) data = { "acknowledged": ret.acknowledged, "matched_count": ret.matched_count, "modified_count": ret.modified_count, "upserted_id": str(ret.upserted_id) } db_size = get_mongo_database_size(did, app_id) update_vault_db_use_storage_byte(did, db_size) return self.response.response_ok(data) except Exception as e: return self.response.response_err(INTERNAL_SERVER_ERROR, "Exception:" + str(e))
def insert_many(self): did, app_id, content, err = post_json_param_pre_proc(self.response, "collection", "document", access_vault=VAULT_ACCESS_WR) if err: return err col = get_collection(did, app_id, content["collection"]) if not col: return self.response.response_err(NOT_FOUND, "collection not exist") options = options_filter(content, ("bypass_document_validation", "ordered")) try: new_document = [] for document in content["document"]: document["created"] = datetime.utcnow() document["modified"] = datetime.utcnow() new_document.append(convert_oid(document)) ret = col.insert_many(new_document, **options) db_size = get_mongo_database_size(did, app_id) update_vault_db_use_storage_byte(did, db_size) data = { "acknowledged": ret.acknowledged, "inserted_ids": [str(_id) for _id in ret.inserted_ids] } return self.response.response_ok(data) except Exception as e: return self.response.response_err(INTERNAL_SERVER_ERROR, "Exception:" + str(e))
def find_one(self): did, app_id, content, err = post_json_param_pre_proc(self.response, "collection", access_vault=VAULT_ACCESS_R) if err: return err col = get_collection(did, app_id, content["collection"]) if not col: return self.response.response_err(NOT_FOUND, "collection not exist") options = options_filter(content, ("projection", "skip", "sort", "allow_partial_results", "return_key", "show_record_id", "batch_size")) if "sort" in options: sorts = gene_sort(options["sort"]) options["sort"] = sorts try: if "filter" in content: result = col.find_one(convert_oid(content["filter"]), **options) else: result = col.find_one(**options) data = {"items": json.loads(json_util.dumps(result))} return self.response.response_ok(data) except Exception as e: return self.response.response_err(INTERNAL_SERVER_ERROR, "Exception:" + str(e))
def delete_many(self): did, app_id, content, err = post_json_param_pre_proc( self.response, "collection", "filter", access_vault=VAULT_ACCESS_DEL) if err: return err col = get_collection(did, app_id, content["collection"]) if not col: return self.response.response_err(NOT_FOUND, "collection not exist") try: ret = col.delete_many(convert_oid(content["filter"])) data = { "acknowledged": ret.acknowledged, "deleted_count": ret.deleted_count, } db_size = get_mongo_database_size(did, app_id) update_vault_db_use_storage_byte(did, db_size) return self.response.response_ok(data) except Exception as e: return self.response.response_err(INTERNAL_SERVER_ERROR, "Exception:" + str(e))
def __upsert_script_to_db(self, did, app_id, content): if hive_setting.MONGO_URI: uri = hive_setting.MONGO_URI connection = MongoClient(uri) else: connection = MongoClient(host=hive_setting.MONGO_HOST, port=hive_setting.MONGO_PORT) db_name = gene_mongo_db_name(did, app_id) db = connection[db_name] try: db.create_collection(SCRIPTING_SCRIPT_COLLECTION) except CollectionInvalid: pass except Exception as e: return None, f"Could not create collection. Please try again later. Exception : {str(e)}" try: db.create_collection(SCRIPTING_SCRIPT_TEMP_TX_COLLECTION) except CollectionInvalid: pass except Exception as e: return None, f"Could not create collection. Please try again later. Exception : {str(e)}" col = get_collection(did, app_id, SCRIPTING_SCRIPT_COLLECTION) query = {"name": content.get("name")} options = {"upsert": True, "bypass_document_validation": False} try: ret = col.replace_one(query, convert_oid(content), **options) data = { "acknowledged": ret.acknowledged, "matched_count": ret.matched_count, "modified_count": ret.modified_count, "upserted_id": str(ret.upserted_id), } except Exception as e: return None, f"Exception: method: '__upsert_script_to_db', Err: {str(e)}" db_size = get_mongo_database_size(did, app_id) update_vault_db_use_storage_byte(did, db_size) return data, None