core.utils --- 工具函数

class core.utils.AdvancedJSONEncoder(skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)

基类:json.encoder.JSONEncoder

定义ApiController JSON解析器

default(obj)

Implement this method in a subclass such that it returns a serializable object for o, or calls the base implementation (to raise a TypeError).

For example, to support arbitrary iterators, you could implement default like this:

def default(self, o):
    try:
        iterable = iter(o)
    except TypeError:
        pass
    else:
        return list(iterable)
    # Let the base class default method raise the TypeError
    return JSONEncoder.default(self, o)
find_dict = {'Decimal': <function AdvancedJSONEncoder.<lambda>>, 'date': <function AdvancedJSONEncoder.<lambda>>, 'datetime': <function AdvancedJSONEncoder.<lambda>>}
class core.utils.UpdateList(*args, **kwargs)

基类:list

主要方法update(),该方法是对list类型拓展, 当update的数据对象存在时对其更新,注意请保证UpdateList 的子项是dict类型而不要使用值类型,值类型对于UpdateList毫无意义

on_update hook函数,接收old_val(旧数据), p_object(新数据),需要返回更新数据 on_append hook函数,接收p_object(添加数据),需要返回添加数据 on_fetch_key hook函数,当key属性定义为函数时需要同时定义如何捕获key值

key 支持字符串,字符串指定子元素中的更新参考值
支持函数,接收val(当前数据),key(参考key值)该key值由on_fetch_key返回,函数返回bool值True为更新,False为添加

on_fetch_key作用:

复杂场景下我们可能需要up[("home2", True)]这样来找到响应的item,这样显示传递key值没有什么问题,key函数可以获取到
相应的key数据以供我们处理,但是当我们调用update时,update需要判断该内容是更新还是添加,这时我们传入的内容是数据,显然
update无法知晓如何获取我们想要的类型key值,如("home2", True),所以我们要定义on_fetch_key来告知update如何捕获我们
想要的类型的key值,on_fetch_key只有当key属性定义为函数时才有意义。
find(callback)

返回满足回调函数的内容

参数:callback -- 回调函数,返回布尔类型用于判断是否满足要求
返回:(索引,值)
update(p_object)

类似于append方法,不同的是当内容存在时会对内容进行更新,更新逻辑遵从update_callback 而当内容不存在时与append方法一致进行末尾加入内容

参数:p_object -- 内容对象
返回:None
core.utils.find(iterable: Iterable[IT], func: Callable[IT, bool]) → Tuple[int, Optional[IT]]

查找可迭代对象的指定项,匹配第一个子项并返回,无匹配项时返回(-1,None)

参数:
  • func -- 匹配函数
  • iterable -- 可迭代对象
返回:

索引,子对象

core.utils.find_key(obj: Union[Dict, List], key: str)

根据字符串查找对象值,字符串形式如a.b.0, 查找对象,如:

{"a":{"b":["val"]}}

val值将被查出

参数:
  • obj -- 查找key值的对象
  • key -- 查找key
返回:

查找到的值

core.utils.inin(content: str, pool: List[str]) → Optional[str]

查找指定内容是否存在于列表的字符串中,这种情况content一定要比列表中字符串短

举例:

inin("a",["asdf","fsfsdf"]) 将返回 "asdf"
参数:
  • content -- 内容
  • pool -- 列表
返回:

匹配内容

core.utils.retry(freq: int = 3, retry_hook: Optional[Callable[int, None]] = None) → Callable

装饰器,为函数添加此装饰器当函数抛出异常时会对函数重新调用,重新调用次数取决于freq指定的参数

参数:
  • freq -- 重试次数
  • retry_hook -- 钩子函数,当函数重调用时回调的函数
返回:

原函数返回值

core.utils.rinin(content: str, pool: List[str]) → Optional[str]

查找指定内容是否存在于列表的字符串中,这种情况content一定要比列表中字符串长

举例:

inin("asdf",["a","fsfsdf"]) 将返回 "a"
参数:
  • content -- 内容
  • pool -- 列表
返回:

匹配内容