ancient.rig.check 源代码

[文档]class BaseMessage: """ 自定义规则函数返回的对象,可以继承该类,自定义返回Message对象 该类是包含校验信息的消息类,当继承该类后,可以为该类添加方法 用于得到该类时直接调用处理 :param key: 系统调用,触发message的key值 :param status: 状态 :param msg: 自定义rule函数返回的自定义内容 """ def __init__(self, key=None, status=True, msg=None): self.key = key self.status = status self.msg = msg
[文档]def rule(fn): """ 装饰器,用于装饰自定义规则rule函数 :param fn: 被装饰的普通函数 :return: None """ def wrap(*args, **kwargs): # 判断是被系统调用,还是用户调用 if kwargs.get("caller", False): # 系统调用会传入caller,如果被装饰的函数接收caller会造成错误 return fn(args[0]) # 用户调用了规则函数,用于自定义传参,同时让返回值仍然是一个可以被系统调用函数 return lambda param, caller: fn(param, *args, **kwargs) return wrap
[文档]def some(content, config): """ 检验dict对象,当一个key值触发错误就返回message对象 校验字典:: print(some({ "name": "lisys", "age": None }, { "name": not_null(msg="自定义传参"), "age": [not_null] }).__dict__) :param content: 检验dict对象 :param config: 配置dict对象 :return: dict """ for key in content: m = verify(content[key], config.get(key, [])) if not m.status: m.key = key return m return BaseMessage(None, msg=content)
[文档]def every(content, config): """ 检验dict对象,当全部key值校验完所有规则函数返回message对象 校验字典:: print(every({ "name": "lisys", "age": None }, { "name": not_null, "age": [not_null()] }).__dict__) :param content: 检验dict对象 :param config: 配置dict对象 :return: Message """ every_message = BaseMessage(None, status=True, msg=[]) for key in content: m = verify(content[key], config.get(key, []), True) if not m.status: m.key = key every_message.status = False every_message.msg.append(m) return every_message
[文档]def verify(param, preset, strict=False): """ 校验传入内容 strict为true,并且preset是一个rule列表时,verify会校验所有rule 并且返回一个主Message对象,该Message的msg是一个列表,包含所有的规则错误校验信息 如果有一个规则校验失败,那么主Message对象的status值将为False 使用预设即rule的列表进行校验:: # 检验value的值是否符合规则,not_null为非假的规则函数,verify函数返回BaseMessage对象 value = "hello SystemLight" print(verify(value, [not_null]).__dict__) value = "hello SystemLight" print(verify(value, [not_null(msg="自定义传参")]).__dict__) 直接传入rule函数:: value = None print(verify(value, not_null(msg="自定义传参")).__dict__) value = None print(verify(value, not_null).__dict__) :param param: 检验内容 :param preset: 预设preset,rule函数列表,也可以直接传递rule函数 :param strict: 是否为严格模式,即需要校验全部的rule函数才做错误返回 :return: Message """ if hasattr(preset, "__call__"): base_m = preset(param, caller=True) elif strict: base_m = BaseMessage(param) base_m.msg = [] for rule_call in preset: m = rule_call(param, caller=True) if not m.status: base_m.status = False base_m.msg.append(m) else: for rule_call in preset: base_m = rule_call(param, caller=True) if not base_m.status: return base_m base_m = BaseMessage(param) return base_m
[文档]@rule def not_null(param, msg="none"): """ 该rule函数是一个最简单的校验规则函数,用于校验值是否为真 内置规则函数,校验内容是否为真值,在使用时,使用者需要按照功能自行制定规则函数 切记规则函数需要使用@rule装饰器进行装饰,并且一定返回Message对象,使用者可以根据需求自行定制Message对象 也可以使用默认的BaseMessage对象 :param param: param 规则函数必须接收的值即验证的内容,类似self,用户只需接收,无须管理传入 :param msg: msg 用户自定义传参,在调用验证函数时被使用者传入规则函数的参数 :return: Message 所有继承BaseMessage的对象 """ if param: return BaseMessage() else: return BaseMessage(msg=msg, status=False)