def patch(user_name, contrib_id, data): _wrangling(data) _validate(data) db = get_db() contrib_ref = ObjectId(contrib_id) res = map(lambda x: {"_id": x["_id"], "err": [], "warn": []}, data) crt_items = [] for i, item in enumerate(data): if item["_id"] is None: dom = _json2dom(item) crt_items.append(dom) res[i]["_id"] = str(dom["_id"]) upd_items = [] for item in filter( lambda x: x["_id"] is not None and ("_isRemoved" not in x or not x["_isRemoved"]), data): dom = _json2dom(item) upd_items.append(dom) rm_ids = [] for item in filter(lambda x: "_isRemoved" in x and x["_isRemoved"], data): rm_ids.append(ObjectId(item["_id"])) if len(crt_items) > 0: db.contribs_v2.update({"_id": contrib_ref}, {"$pushAll": { "items": crt_items }}) if len(upd_items) > 0: for upd_item in upd_items: db.contribs_v2.update( { "_id": contrib_ref, "items._id": upd_item["_id"] }, {"$set": { "items.$": upd_item }}) #Waiting for the miracle to come, https://jira.mongodb.org/browse/SERVER-831 #cnt = db.user.find({"_id": user_name, "contribs.name": contrib_name}, {"contribs.$.data": {"$elemMatch": {"_id" : "name_1_name_3"}}}) if len(rm_ids) > 0: db.contribs_v2.update({"_id": contrib_ref}, {"$pull": { "items": { "_id": { "$in": rm_ids } } }}) res = {"data": res, "graphs": get_graphs(user_name, contrib_id)} return res
def delete(user_name, contrib_id): """delete contrib for the user""" client = mongo.MongoClient(config["MONGO_URI"]) db = client[config["MONGO_DB"]] graphs = get_graphs(user_name, contrib_id) db.users.update({"_id": user_name}, {"$pull" : {"contribs" : {"ref" : contrib_id}} }) db.users.update({"_id": user_name, "graphs.contribs" : contrib_id}, {"$pull" : {"graphs.$.contribs" : contrib_id} }) db.contribs.remove({"_id" : ObjectId(contrib_id)}) return graphs
def delete(user_name, contrib_id): """delete contrib for the user""" client = mongo.MongoClient(config["MONGO_URI"]) db = client[config["MONGO_DB"]] graphs = get_graphs(user_name, contrib_id) db.users.update({"_id": user_name}, {"$pull": { "contribs": { "ref": contrib_id } }}) db.users.update({ "_id": user_name, "graphs.contribs": contrib_id }, {"$pull": { "graphs.$.contribs": contrib_id }}) db.contribs.remove({"_id": ObjectId(contrib_id)}) return graphs
def patch(user_name, contrib_id, data): _wrangling(data) _validate(data) db = get_db() contrib_ref = ObjectId(contrib_id) res = map(lambda x: {"_id": x["_id"], "err": [], "warn": []}, data) crt_items = [] for i, item in enumerate(data): if item["_id"] is None: dom = _json2dom(item) crt_items.append(dom) res[i]["_id"] = str(dom["_id"]) upd_items = [] for item in filter(lambda x: x["_id"] is not None and ("_isRemoved" not in x or not x["_isRemoved"]), data): dom = _json2dom(item) upd_items.append(dom) rm_ids = [] for item in filter(lambda x: "_isRemoved" in x and x["_isRemoved"], data): rm_ids.append(ObjectId(item["_id"])) if len(crt_items) > 0: db.contribs_v2.update({"_id": contrib_ref}, {"$pushAll" : {"items" : crt_items}}) if len(upd_items) > 0: for upd_item in upd_items: db.contribs_v2.update({"_id": contrib_ref, "items._id": upd_item["_id"]}, {"$set": {"items.$" : upd_item}}) #Waiting for the miracle to come, https://jira.mongodb.org/browse/SERVER-831 #cnt = db.user.find({"_id": user_name, "contribs.name": contrib_name}, {"contribs.$.data": {"$elemMatch": {"_id" : "name_1_name_3"}}}) if len(rm_ids) > 0: db.contribs_v2.update({"_id" : contrib_ref}, {"$pull": {"items" : {"_id" : {"$in" : rm_ids}}}}) res = {"data": res, "graphs": get_graphs(user_name, contrib_id)} return res