def list_info(appname, modelName): ''' list api for show rule list. Request URL: /<appname>/rule/v1/<modelname>/list Http Method: GET Parameters : index, limit Return : { "status":0 "data":{ "items":[ { "id": 1, "title":"海豚英文版", "first_created": "2015-02-05 21:37:38", "last_modified": "2015-02-05 21:37:38" }, { "id": 2, "title":"海豚英文版1", "first_created": "2015-02-05 21:37:38", "last_modified": "2015-02-05 21:37:38" } ] } } ''' MODELNAME = get_model_cls(modelName) index = int(request.args.get('index', 1)) - 1 limit = int(request.args.get('limit', 20)) cond = get_list_cond(appname, request, MODELNAME) sort = [("_id", -1)] return info_list(appname, MODELNAME, cond, index, limit, sort)
def mod_info(appname, modelName): ''' this api is used to modify one rule Request URL: /appname/rule/rule/update HTTP Method:POST Parameters: { "id": 1, "title": "xxxx" } Return : { "status":0 "data":{ "id": 1, "title":"海豚英文版" } } ''' # check post data MODELNAME = get_model_cls(modelName) required_list = list(MODELNAME.params) + ["id&need&int", ] data = get_valid_params(request, required_list) if isinstance(data, Response): return data return info_mod(appname, MODELNAME, data)
def info_del(appname, modelName, ids): MODELNAME = get_model_cls(modelName) data = {"success": [], "failed": []} for id in ids: try: id = int(id) if not isinstance(id, int) else id except: _LOGGER.info("id:%s type error", id) continue cond = {"_id": id} info = MODELNAME.find_one(appname, cond, None) if not info: _LOGGER.info("id %s is not exist", id) continue refer_cond = {} refer_cond[modelName] = id refer_rule = Rule.find(appname, refer_cond, toarray=True) if refer_rule: _LOGGER.info("id %s is refered", id) refer_info = {"id": id, "refered_info": []} for item in refer_rule: temp_dict = {"modelName": "rule"} temp_dict["id"] = item.get("_id") refer_info["refered_info"].append(temp_dict) data["failed"].append(refer_info) else: MODELNAME.remove(appname, cond) data["success"].append({"id": id}) if data["failed"]: return json_response_error(DATA_RELETED_BY_OTHER, data) else: return json_response_ok(data, msg="delete successfully")
def info_get(appname, modelName, cond): MODELNAME = get_model_cls(modelName) info = MODELNAME.find_one(appname, cond, MODELNAME.fields) if not info: return json_response_error(PARAM_ERROR, msg="invalid param id") info["id"] = info.pop("_id") return json_response_ok(info)
def wrapper(*args, **kwargs): # check appname args appname = kwargs.get("appname") if appname not in MONGO_CONFIG: return json_response_error( PARAM_ERROR, msg="appname error, check url") # check modelName args modelName = kwargs.get("modelName") if modelName: MODELNAME = get_model_cls(modelName) if not MODELNAME: return json_response_error( PARAM_ERROR, msg="invalid modelname: %s" % modelName) return func(*args, **kwargs)
def add_info(appname, modelName): ''' create api to add rule. Request URL: /appname/rule/rule/add Http Method: POST Parameters : { "title": "xxxx", "code::"xxxx", #operator need "package_name:"xxxx" #package need } Return : { "status":0 "data":{ "items":[ { "id": 1, "title":"海豚英文版", "first_created": "2015-02-05 21:37:38", "last_modified": "2015-02-05 21:37:38" }, { "id": 2, "title":"联通", "first_created": "2015-02-05 21:37:38", "last_modified": "2015-02-05 21:37:38" } ] } } ''' MODELNAME = get_model_cls(modelName) # check post data data = get_valid_params(request, MODELNAME.params) if isinstance(data, Response): return data # view logic return create(appname, MODELNAME, data)