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), 也可传入自定义的函数
第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_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 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_len(obj, min_len, max_len)[源代码]¶
检查字符串长度(包含两端的值)
注: 一个汉字长度为1
- 参数
obj (string) – 要检查的字符串对象
min_len (int) – 最小长度
max_len (int) – 最大长度