def check_post(self, post_frame={}): for name, value in post_frame.items(): data = self.post_body.get(name) if not data: #level 1 return "POST_FORMAT_ERR", "LACK POST FIELD:" + name if type_util.is_dict(value): if not type_util.is_dict(data): return "POST_FORMAT_ERR", "Error POST FIELD Type (%s) MUST BE A DICT" % ( name) for key, val in value.items(): data_val = data.get(key) if data_val is None: #level 2 return "POST_FORMAT_ERR", "LACK POST FIELD:%s.%s" % ( name, key) if type_util.is_dict(val): if not type_util.is_dict(data_val): return "POST_FORMAT_ERR", "Error POST FIELD Type (%s.%s) MUST BE A DICT" % ( name, key) for k, v in val.items(): data_v = data_val.get(k) if data_v is None: #level 3 return "POST_FORMAT_ERR", "LACK POST FIELD:%s.%s.%s" % ( name, key, k) return None
def __filter_fileds(self, result, fieldList): def key_filter(item): if not fieldList: return item _fieldList = [ k if k.upper().find(" AS ") < 0 else k.strip().split()[-1] for k in fieldList ] if type_util.is_array(item): return [key_filter(i) for i in item] elif type_util.is_dict(item): new_obj = {} for k in item: if k in _fieldList: new_obj[k] = item[k] return new_obj else: return item try: obj = json.loads(result).get("data") if type_util.is_array(obj): return [key_filter(o) for o in obj] elif type_util.is_dict(obj): return key_filter(obj) else: return obj except Exception, e: print "Error when __filter_fields:", str(e) return None
def Utf8(s): if not s: return str(s) if type_util.is_dict(s) or type_util.is_array(s): encoder = json.JSONEncoder(encoding='utf-8', ensure_ascii=False) #其他编码的不会被转成unicode return encoder.encode(s) elif type_util.is_str(s): return s.encode("utf-8") else: return str(s)
def key_filter(item): if not fieldList: return item _fieldList = [ k if k.upper().find(" AS ") < 0 else k.strip().split()[-1] for k in fieldList ] if type_util.is_array(item): return [key_filter(i) for i in item] elif type_util.is_dict(item): new_obj = {} for k in item: if k in _fieldList: new_obj[k] = item[k] return new_obj else: return item
def Where(kvMap): def whereStr(indexMap): conditions = [] for key, val in indexMap.items(): if type_util.is_int(val): conditions.append("`%s`=%d" % (key, val)) elif type_util.is_array(val) and len(val) == 2: if str(val[0]).strip() == "<>" and len(val[1]) == 2: conditions.append( "`%s` >= '%s' AND `%s` <= '%s'" % (key, str(val[1][0]), key, str(val[1][1]))) elif val[0].upper() == "LIKE": if type_util.is_array(val[1]): conditions.append(" AND ".join([ " `%s` " % (key) + ' LIKE "%' + sub_name + '%"' for sub_name in val[1] ])) else: conditions.append(" `%s` " % (key) + ' LIKE "%' + str(val[1]) + '%"') elif val[0].upper( ) == "IN": #("IN", "123,234") or ("IN", [123,234]) if type_util.is_str(val[1]): conditions.append("`%s` IN (%s)" % (key, val[1])) if type_util.is_array(val[1]): items = [ "'" + str(_val) + "'" if type_util.is_str(_val) else str(_val) for _val in val[1] ] conditions.append("`%s` IN (%s)" % (key, ",".join(items))) elif val[0].upper( ) == "NOT IN": #("NOT IN", "123,234") or ("NOT IN", [123,234]) if type_util.is_str(val[1]): conditions.append("`%s` NOT IN (%s)" % (key, val[1])) if type_util.is_array(val[1]): items = [ "'" + str(_val) + "'" if type_util.is_str(_val) else str(_val) for _val in val[1] ] conditions.append("`%s` NOT IN (%s)" % (key, ",".join(items))) else: conditions.append("`%s` %s '%s'" % (key, val[0], str(val[1]))) else: conditions.append(" `%s` = '%s'" % (key, str(val))) return " AND ".join(conditions) if not kvMap: return " " elif type_util.is_str(kvMap): return kvMap if kvMap.upper().strip().startswith( "WHERE") else " WHERE " + kvMap elif type_util.is_dict(kvMap): return " WHERE " + whereStr(kvMap) elif type_util.is_array(kvMap): return " WHERE " + " OR ".join( ['(' + whereStr(indexMap) + ')' for indexMap in kvMap]) else: print "Error, Where condition is not support, type:", type( kvMap), kvMap return " "