HiveNetCore.utils.validate_tool module

数据校验工具

class HiveNetCore.utils.validate_tool.ValidateTool(rule, ignore_list_miss_value=True, ignore_extra_keys=True, i18n_obj=None, is_use_pre_obj_id=True)[源代码]

基类:object

字符串基础校验函数

classmethod And(obj, rules, obj_id='object', ignore_list_miss_value=True, i18n_obj=None, is_use_pre_obj_id=True, pre_obj_id='')[源代码]

组合多个校验规则对同一个对象进行校验, 以’与’的关系返回检查结果

参数
  • obj (object) – 要检查的对象

  • rules (list|tuple) –

    校验规则列表, 格式为 (单个校验规则1, 单个校验规则2, …)

    或 [单个校验规则1, 单个校验规则2, …], 格式参考单个校验规则 (参考_check_by_single_rule的定义)

  • obj_id (string) – default=’object’, 要检查对象的id, 用于在错误信息中显示

  • ignore_list_miss_value (bool) – default=True, 是否忽略列表中不足的对象

  • i18n_obj (SimpleI18N) – default=None, 国际化类的实例对象, 如不传入会尝试自动加载全局的国际化控件

  • is_use_pre_obj_id (bool) –

    default=True, 是否使用前置obj_id, 当指定为True时会根据dict的层级以及列表

    中的位置修改obj_id的显示

  • pre_obj_id (string) – default=’’ 内部使用, 前置对象id,

classmethod List(obj, rule, obj_id='object', ignore_list_miss_value=True, i18n_obj=None, is_use_pre_obj_id=True, pre_obj_id='')[源代码]

按清单方式对传入的对象列表逐一处理

参数
  • obj (tuple|list) –

    要检查的对象列表, 本函数将会使用送入的规则(rule)逐一对列表中的对象进行校验

    注: 如果传入的obj不是列表类型, 则函数会自动将其转为[obj, ]列表进行校验, 以兼容对单一对象进行校验的情况

  • rule (list|tuple|object) –

    对对象列表的单一校验规则:

    type(rule) == list: 针对表格形式的数据进行验证, 校验规则格式为 [rule1, rule2, rule3, …], 针对obj

    的格式为 [ [data11, data12, data13, …], [data21, data22, data23, …], … ]

    type(rule) != list: 视为单一校验规则, 格式参考单个校验规则 (参考_check_by_single_rule的定义)

  • obj_id (string) – default=’object’, 要检查对象的id, 用于在错误信息中显示

  • ignore_list_miss_value (bool) – default=True, 是否忽略列表中不足的对象

  • i18n_obj (SimpleI18N) – default=None, 国际化类的实例对象, 如不传入会尝试自动加载全局的国际化控件

  • is_use_pre_obj_id (bool) –

    default=True, 是否使用前置obj_id, 当指定为True时会根据dict的层级以及列表

    中的位置修改obj_id的显示

  • pre_obj_id (string) – default=’’ 内部使用, 前置对象id,

classmethod Or(obj, rules, obj_id='object', ignore_list_miss_value=True, i18n_obj=None, is_use_pre_obj_id=True, pre_obj_id='')[源代码]

组合多个校验规则对同一个对象进行校验, 以’或’的关系返回检查结果

参数
  • obj (object) – 要检查的对象

  • rules (list|tuple) –

    校验规则列表, 格式为 (单个校验规则1, 单个校验规则2, …)

    或 [单个校验规则1, 单个校验规则2, …], 格式参考单个校验规则 (参考_check_by_single_rule的定义)

  • obj_id (string) – default=’object’, 要检查对象的id, 用于在错误信息中显示

  • ignore_list_miss_value (bool) – default=True, 是否忽略列表中不足的对象

  • i18n_obj (SimpleI18N) – default=None, 国际化类的实例对象, 如不传入会尝试自动加载全局的国际化控件

  • is_use_pre_obj_id (bool) –

    default=True, 是否使用前置obj_id, 当指定为True时会根据dict的层级以及列表

    中的位置修改obj_id的显示

  • pre_obj_id (string) – default=’’ 内部使用, 前置对象id,

__init__(rule, ignore_list_miss_value=True, ignore_extra_keys=True, i18n_obj=None, is_use_pre_obj_id=True)[源代码]

构造函数, 创建指定规则进行校验的实例对象

参数
  • rule (dict|list|tuple|object) – 校验规则, 详细定义见check_by_rule

  • ignore_list_miss_value (bool) – default=True, 是否忽略列表中不足的对象

  • ignore_extra_keys (bool) – default=True, 当规则为dict时, 是否忽略数据中不存在的key

  • i18n_obj (SimpleI18N) – default=None, 国际化类的实例对象, 如不传入会尝试自动加载全局的国际化控件

  • is_use_pre_obj_id (bool) –

    default=True, 是否使用前置obj_id, 当指定为True时会根据dict的层级以及列表

    中的位置修改obj_id的显示

check(obj, obj_id='object')[源代码]

使用实例初始化的规则进行数据检查

参数
  • obj (dict|object) –

    要检查的对象, 根据校验规则的不同应按不同格式传入:

    rule为dict : 代表按字典进行校验, 传入的obj对象也应为dict

    rule为list : 代表按列表进行相应位置的数据校验, 传入的obj对象应为list或tuple格式

  • obj_id (string) – default=’object’, 要检查对象的id, 用于在错误信息中显示

classmethod check_by_rule(rule, obj, obj_id='object', ignore_list_miss_value=True, ignore_extra_keys=True, option_rule=None, i18n_obj=None, is_list_call=False, is_use_pre_obj_id=True, pre_obj_id='')[源代码]

按规则检查对象

参数
  • rule (dict|list|tuple|object) –

    检查规则, 不同类型的参数说明如下:

    dict : 实现按字典遍历检查, 检查对象也必须为对应格式的字典

    其中key为对应关键字, value为检查的具体规则(rule)

    list : 按规则列表检查对应的对象列表, 注意对象也应为list对象

    即: [rule1, rule2, rule3] <-> [obj1, obj2, obj3]

    tuple|object : 单个校验规则, 完整模式为 (校验函数, args参数, kwargs参数, 自定义错误信息)

    1、完整模式传入的是一个tuple对象, 数组每个位置说明如下:

    第1位: 校验函数, 传入检查函数对象(如: ValidateTool.str_len), 也可传入自定义的函数

    自定义函数的格式为: my_fun(obj, *args, **kwargs) -> bool,

    其中args和kwargs是示意, 除第一个入参必须固定为检查对象以外, 其他的入参按需设计

    如果要使用的校验函数是ValidateTool的静态函数, 可以直接传函数名文本, 例如’str_len’

    第2位: args参数, 调用校验函数所需传入的占位参数, 如果没有参数可传None; 该参数应为一个tuple对象, 例如:

    (‘str_len’, (3, 4), ) - 将用以下方式调用校验函数: str_len(obj, 3, 4)

    注意: 如果args参数放置的对象不是tuple类型, 函数会自动把其加入到一个空数组中, 实现兼容处理, 例如:

    (‘str_check_regex’, ‘^[abc]+$’, ) - 将用以下方式调用校验函数: str_check_regex(obj, (‘^[abc]+$’))

    第3位: kwargs参数, 调用校验函数所需传入kv模式的字典, 如果没有参数可传None; 该参数应为一个dict对象, 例如:

    (‘str_is_datetime’, None, {‘format_str’: ‘yyyy/MM/dd’}) - 将用以下方式调用校验函数:

    str_is_datetime(obj, format_str=’yyyy/MM/dd’)

    第4位: 自定义校验不通过时返回的CResult对象的错误信息, 如果不传, 将会根据函数名自动从字典变量’VALIDATE_ERR_MSG’

    中获取对应函数名的错误信息, 当然也可以自己增加或修改’VALIDATE_ERR_MSG’的值来自定义错误信息

    注意: 错误信息中可以通过’$1’、’$2’等占位符将校验本身的信息替换到错误信息中, 可送入的占位变量顺序如下:

    校验对象本身(obj)、校验对象标识(obj_id)、校验函数名、args参数(按顺序拆开)、kwargs参数(按顺序拆开)

    2、传入不完整的tuple对象, 可以只传前几个位置的参数, 例如: (校验函数, ) , (校验函数, None, kwargs参数, )

    程序会自动将该tuple对象补全, 缺失的后面几位会使用None进行补充, 例如:

    (‘str_is_float’, ) –> (‘str_is_float’, None, None, None)

    3、仅传入函数名(string), 针对ValidateTool自带校验函数, 且无需其他入参的情况, 例如:

    ’str_is_float’ -> (ValidateTool.str_is_float, None, None, None)

    4、仅传入可执行函数, 针对自定义校验函数, 且无需其他入参的情况, 例如:

    ValidateTool.str_is_float -> (ValidateTool.str_is_float, None, None, None)

    5、传入其他类型的对象, 程序将自动将对象转换为string去尝试对应回ValidateTool自带校验函数, 例如:

    object -> (str(object), None, None, None)

  • obj (dict|object) –

    要检查的对象, 根据校验规则的不同应按不同格式传入:

    rule为dict : 代表按字典进行校验, 传入的obj对象也应为dict

    rule为list : 代表按列表进行相应位置的数据校验, 传入的obj对象应为list或tuple格式

  • obj_id (string) – default=’object’, 要检查对象的id, 用于在错误信息中显示

  • ignore_list_miss_value (bool) – default=True, 是否忽略列表中不足的对象

  • ignore_extra_keys (bool) – default=True, 当规则为dict时, 是否忽略数据中不存在的key

  • option_rule (dict) –

    default=None, 指示字段是否可忽略, 只有当rule为dict的时候与rule配套使用,

    字典结构与rule一致, key为要检查的字段, value为二元列表[‘M’或’O’, {子字典}]

  • i18n_obj (SimpleI18N) – default=None, 国际化类的实例对象, 如不传入会尝试自动加载全局的国际化控件

  • is_list_call (bool) –

    default=False, 内部针对dict的校验规则使用, 用于区分函数是否已进行过列表拆分处理

    注: 指一个dict规则处理列表中的多个dict数据

  • is_use_pre_obj_id (bool) –

    default=True, 是否使用前置obj_id, 当指定为True时会根据dict的层级以及列表

    中的位置修改obj_id的显示

  • pre_obj_id (string) – default=’’ 内部使用, 前置对象id,

classmethod check_fun(obj, fun, *args, **kwargs)[源代码]

根据传入的函数进行对象校验

注: 函数不会检查对象是否为None

参数
  • obj (string) – 要检查的字符串对象

  • fun (function) –

    用于检查的函数, 定义如下:

    fun(obj, *args, **kwargs):

    return True/False

  • 要传入的占位参数值 (-) –

  • 要传入校验函数的参数值 (-) –

classmethod check_in_enum(obj, enums)[源代码]

检查对象是否在枚举值中

参数
  • obj (object) – 要检查的对象

  • enums (list|tuple) – 枚举列表

classmethod check_len(obj, min_len, max_len)[源代码]

检查对象长度(例如tuple、list)

参数
  • obj (obj) – 要检查的对象

  • min_len (int) – 最小长度

  • max_len (int) – 最大长度

classmethod check_num_area(obj, min_val, max_val, is_eq_min=True, is_eq_max=True)[源代码]

校验数字是否在取值范围内

参数
  • obj (object) – 要检查的字符串对象

  • min_val (float) – 最小值, 如果不需要比较传入None

  • max_val (float) – 最大值, 如果不需要比较传入None

  • is_eq_min (bool) – default=True, 是否可以等于最小值

  • is_eq_max (bool) – default=True, 是否可以等于最大值

classmethod check_time_btween(obj, min_date, max_date, format_str='yyyy-MM-dd', is_eq_min=True, is_eq_max=True)[源代码]

送入的日期是否在两个日期之间

参数
  • obj (string|datetime) –

    要检查的日期对象

    注: 如果传入的是string, 将自动通过format_str进行转换

  • min_date (string|datetime) –

    比较的最小日期时间, None代表不比较

    注: 如果传入的是string, 将自动通过format_str进行转换

  • max_date (string|datetime) –

    比较的最大日期时间, None代表不比较

    注: 如果传入的是string, 将自动通过format_str进行转换

  • is_eq_min (bool) – default=True, 是否可以等于最小值

  • is_eq_max (bool) – default=True, 是否可以等于最大值

classmethod datetime_fmt_to_py(format_str)[源代码]

将类Oracle格式的日期时间格式化字符串转换为Python格式

参数

format_str (string) –

类Oracle格式的日期时间格式, 支持的格式如下:

’yyyy’ : 四位年份

’yy’ : 两位年份

’MM’ : 两位月份, 0-9月前面需补0

’M’ : 一位月份, 0-9月不能补0

’dd’ : 两位日期, 这里限制到不能超过31

’d’ : 一位日期, 这里限制到不能超过31

’hh’ : 两位小时, 12小时制, 这里限制到不能超过12

’hh24’ : 两位小时, 24小时制, 这里限制到不能超过23

’h’ : 一位小时, 12小时制, 这里限制到不能超过12

’h24’ : 一位小时, , 24小时制, 这里限制到不能超过23

’mm’ : 两位分钟, 这里限制到不能超过60

’m’ : 一位分钟, 这里限制到不能超过60

’ss’ : 两位秒, 这里限制到不能超过60

’s’ : 一位秒, 这里限制到不能超过60

’p’ : 早上, 下午标识, AM 或 PM

classmethod is_type(obj, data_type)[源代码]

检查对象是否指定的数据类型

参数
  • obj (object) – 要检查的对象

  • data_type (type) – 对象类型, 可以是基础类型如int, str, list等, 也可以是如VaildateTool等自定义类型

classmethod not_null(obj)[源代码]

检查对象是否非空

参数

obj (object) – 要检查的对象

classmethod str_check_date(obj, format_str='yyyy-MM-dd')[源代码]

校验日期是否为有效日期

参数
  • obj (string) – 要检查的字符串对象

  • format_str (string) – default=’yyyy-MM-dd’, 日期时间格式

classmethod str_check_float_size(obj, int_len, decimal_len)[源代码]

校验数字的精度是否满足要求

参数
  • obj (string) – 要检查的字符串对象

  • int_len (int) – 整数位

  • decimal_len (int) – 小数位

classmethod str_check_num_area(obj, min_val, max_val, is_eq_min=True, is_eq_max=True)[源代码]

校验数字是否在取值范围内

参数
  • obj (string) – 要检查的字符串对象

  • min_val (float) – 最小值, 如果不需要比较传入None

  • max_val (float) – 最大值, 如果不需要比较传入None

  • is_eq_min (bool) – default=True, 是否可以等于最小值

  • is_eq_max (bool) – default=True, 是否可以等于最大值

classmethod str_check_regex(obj, regex_str, flags='0')[源代码]

根据传入的正则表达式进行判断

参数
  • obj (string) – 要检查的字符串对象

  • regex_str (string) – 正则表达式

  • flags (string) –

    default=’0’, 正则表达处理标记生成字符串, 可以多个标记组合, 例如’re.I|re.L’

    可支持的标记包括:

    re.I 忽略大小写

    re.L 表示特殊字符集 w, W, , B, s, S 依赖于当前环境

    re.M 多行模式

    re.S 即为 . 并且包括换行符在内的任意字符( . 不包括换行符)

    re.U 表示特殊字符集 w, W, , B, d, D, s, S 依赖于 Unicode 字符属性数据库

    re.X 为了增加可读性, 忽略空格和 # 后面的注释

classmethod str_is_datetime(obj, format_str='yyyy-MM-dd')[源代码]

校验是否Email

参数
  • obj (string) – 要检查的字符串对象

  • format_str (string) –

    default=’yyyy-MM-dd’, 时间日期格式, 支持的通配符包括:

    ’yyyy’ : 四位年份

    ’yy’ : 两位年份

    ’MM’ : 两位月份, 0-9月前面需补0

    ’M’ : 一位月份, 0-9月不能补0

    ’dd’ : 两位日期, 这里限制到不能超过31

    ’d’ : 一位日期, 这里限制到不能超过31

    ’hh’ : 两位小时, 12小时制, 这里限制到不能超过12

    ’hh24’ : 两位小时, 24小时制, 这里限制到不能超过23

    ’h’ : 一位小时, 12小时制, 这里限制到不能超过12

    ’h24’ : 一位小时, , 24小时制, 这里限制到不能超过23

    ’mm’ : 两位分钟, 这里限制到不能超过60

    ’m’ : 一位分钟, 这里限制到不能超过60

    ’ss’ : 两位秒, 这里限制到不能超过60

    ’s’ : 一位秒, 这里限制到不能超过60

    ’p’ : 早上, 下午标识, AM 或 PM

classmethod str_is_email(obj)[源代码]

校验是否Email

参数

obj (string) – 要检查的字符串对象

classmethod str_is_float(obj)[源代码]

校验是否浮点数

参数

obj (string) – 要检查的字符串对象

classmethod str_is_int(obj)[源代码]

校验是否整数

参数

obj (string) – 要检查的字符串对象

classmethod str_len(obj, min_len, max_len)[源代码]

检查字符串长度(包含两端的值)

注: 一个汉字长度为1

参数
  • obj (string) – 要检查的字符串对象

  • min_len (int) – 最小长度

  • max_len (int) – 最大长度

classmethod str_lenb(obj, min_len, max_len, encoding='utf-8')[源代码]

检查字符串长度(包含两端的值)

注: gbk编码时一个汉字长度为2, utf-8编码时, 一个汉字长度为2-3

参数
  • obj (string) – 要检查的字符串对象

  • min_len (int) – 最小长度

  • max_len (int) – 最大长度

  • encoding (string) – default=’utf-8’, 字节编码

classmethod str_not_null(obj)[源代码]

检查字符串是否非空

参数

obj (string) – 要检查的字符串对象