Ejemplo n.º 1
0
def delete_rule_info(appname, rule_ids):
    data = {"success": [], "failed": []}
    for rule_id in rule_ids:
        try:
            rule_id = int(rule_id) if not isinstance(rule_id, int) else rule_id
        except:
            _LOGGER.error("id:%s type error", rule_id)
            continue

        cond = {"_id": rule_id}
        rule = Rule.find_one(appname, cond, None)
        if not rule:
            _LOGGER.error("rule id %s is not exist", rule_id)
            continue
        refer_cond = {"target_id": int(rule_id), "target_field": "rule"}
        refer_rule = ReferInfo.find_one_refered_info(
            appname, refer_cond, None)
        if refer_rule:
            _LOGGER.info("rule id %s is refer", rule_id)
            refer_info = {"id": rule_id}
            refer_info["refered_info"] = refer_rule["refered_info"]
            data["failed"].append(refer_info)
        else:
            Rule.remove(appname, cond)
            data["success"].append({"id": rule_id})

    if data["failed"]:
        return json_response_error(DATA_RELETED_BY_OTHER, data)
    else:
        return json_response_ok(data, msg="delete successfully")
Ejemplo n.º 2
0
def delete_refered_info(appname, target_field, target_id, unrefer_data):
    """
    deference  refered info
    """
    cond = {"target_id": int(target_id)}
    cond["target_field"] = target_field
    refer_info = ReferInfo.find_one(appname, cond, None)
    if not refer_info:
        _LOGGER.error("refered id:%s not in db", target_id)
        return
    if not refer_info.get("refered_info"):
        return ReferInfo.remove(appname, {"target_id": target_id})
    if unrefer_data in refer_info["refered_info"]:
        refer_info["refered_info"].remove(unrefer_data)
    if refer_info["refered_info"]:
        refer_info.pop("_id")
        ReferInfo.update(appname, cond, refer_info)
    else:
        ReferInfo.remove(appname, {"target_id": target_id})
    _LOGGER.info("update the id refer info:%s", target_id)
Ejemplo n.º 3
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)