Ejemplo n.º 1
0
def add_refered_info(
        appname, target_field, target_id, refered_data, old_id=None):
    cond = {"target_id": int(target_id)}
    cond["target_field"] = target_field
    refer_info = ReferInfo.find_one(appname, cond, None)
    if not refer_info:
        refered_list = []
        refered_list.append(refered_data)
        info_instance = ReferInfo.new(target_field, target_id, refered_list)
        ReferInfo.save(appname, info_instance)
    else:
        if refered_data not in refer_info["refered_info"]:
            refer_info["refered_info"].append(refered_data)
            refer_info.pop("_id")
            ReferInfo.update(appname, cond, refer_info)
            _LOGGER.info("update the id refer info:%s", target_id)
    if old_id is not None:
        if old_id == target_id:
            return
        old_cond = {}
        old_cond["target_id"] = int(old_id)
        old_cond["target_field"] = target_field
        old_info = ReferInfo.find_one(appname, old_cond, None)
        if not old_info:
            _LOGGER.error("refered id:%s not in db", old_id)
            return
        if not old_info.get("refered_info"):
            _LOGGER.info("update the id refer info:%s", old_id)
            return ReferInfo.remove(appname, {"target_id": old_info["_id"]})
        if refered_data in old_info["refered_info"]:
            old_info["refered_info"].remove(refered_data)
        if old_info["refered_info"]:
            old_info.pop("_id")
            ReferInfo.update(appname, old_cond, old_info)
        else:
            ReferInfo.remove(appname, {"target_id": old_id})
        _LOGGER.info("update the id refer info:%s", old_id)