Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
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)
Beispiel #4
0
        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
Beispiel #5
0
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 " "