示例#1
0
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
示例#2
0
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
示例#3
0
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
示例#4
0
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