阅读(4416) (0)

Tornado 通用utilities

2022-03-11 09:55:33 更新

该模块由 Tornado 内部使用。 不一定期望此处定义的函数和类对其他应用程序有用,但如果有用,它们会在此处记录。

该模块的一个面向公众的部分是 ​Configurable类及其配置方法,它成为其子类接口的一部分,包括 ​AsyncHTTPClient​、​IOLoop和 ​Resolver

exception tornado.util.TimeoutError

with_timeout和 ​IOLoop.run_sync​ 引发的异常。

在 5.0 版更改: 将 ​tornado.gen.TimeoutError​ 和 ​tornado.ioloop.TimeoutError​ 统一为 ​tornado.util.TimeoutError​。 两个以前的名字都保留为别名。

class tornado.util.ObjectDict

使字典表现得像一个对象,具有属性样式访问。

class tornado.util.GzipDecompressor

流式 ​gzip解压缩器。

该接口类似于 ​zlib.decompressobj​ 的接口(没有一些可选参数,但它理解 ​gzip表头和校验和)。

decompress(value: bytes, max_length: int = 0) → bytes

解压缩一个块,返回新的可用数据。

一些数据可能会被缓冲以供以后处理; 当没有更多的输入数据时,必须调用 ​flush以确保所有数据都已处理。

如果给定了 ​max_length​,则 ​unconsumed_tail中可能会遗留一些输入数据; 如果它不为空,您必须检索此值并将其传递回对 ​decompress的 ​future​调用。

unconsumed_tail

返回剩余的未消耗部分

flush() → bytes

返回解压缩尚未返回的任何剩余缓冲数据。

还检查诸如截断输入之类的错误。 在flush之后不能对该对象调用其他方法。

tornado.util.import_object(name: str) → Any

按名称导入对象。

import_object('x')等价于​import x​。import_object('x.y.z')​ 等价于 ​from x.y import z​。

>>> import tornado.escape
>>> import_object('tornado.escape') is tornado.escape
True
>>> import_object('tornado.escape.utf8') is tornado.escape.utf8
True
>>> import_object('tornado') is tornado
True
>>> import_object('tornado.missing_module')
Traceback (most recent call last):
    ...
ImportError: No module named missing_module

tornado.util.errno_from_exception(e: BaseException) → Optional[int]

提供来自 ​Exception对象的 ​errno​。

在某些情况下,没有设置 ​errno属性,因此我们将 ​errno从 ​args中提取出来,但是如果有人在没有任何 ​args的情况下实例化 ​Exception,您将收到元组错误。 所以这个函数抽象了所有的行为,给你一个安全的方法来获取 ​errno​。

tornado.util.re_unescape(s: str) → str

取消转义由 ​re.escape​ 转义的字符串。

对于 ​re.escape​ 无法生成的正则表达式可能会引发 ​ValueError​(例如,包含 ​\d​ 的字符串不能被转义)。

class tornado.util.Configurable

可配置接口的基类。

可配置接口是一个(抽象)类,其构造函数充当其实现子类之一的工厂函数。 可以在运行时使用 ​configure全局设置实现子类及其初始化程序的可选关键字参数。

通过使用构造函数作为工厂方法,接口看起来像一个普通的类,isinstance 像往常一样工作等。这种模式在实现的选择可能是全局决策时最有用(例如,当 ​epoll可用时,总是使用 它而不是 ​select​),或者当以前的整体类被拆分为专门的子类时。

可配置子类必须定义类方法​configurable_base和​configurable_default​,并使用实例方法​initialize而不是​__init__​。

在 5.0 版更改: 现在可以在类层次结构的多个级别指定配置。

classmethod configurable_base()

返回可配置层次结构的基类。

这通常会返回定义它的类。 (不一定与clsclassmethod 参数相同)。

classmethod configurable_default()

如果没有配置,则返回要使用的实现类。

initialize() → None

初始化一个可配置的子类实例。

可配置类应该使用​initialize​而不是 ​__init__​。

classmethod configure(impl, **kwargs)

设置基类实例化时使用的类。

关键字参数将被保存并添加到传递给构造函数的参数中。 这可用于为某些参数设置全局默认值。

classmethod configured_class()

返回当前配置的类。

class tornado.util.ArgReplacer(func: Callable, name: str)

替换 (​args​、​kwargs)键值对中的一个值。

检查函数签名以按名称查找参数,无论它是通过位置还是关键字传递。 用于装饰器和类似的包装器。

get_old_value(args: Sequence[Any], kwargs: Dict[str, Any], default: Any = None) → Any

返回命名参数的旧值而不替换它。

如果参数不存在,则返回默认值。

replace(new_value: Any, args: Sequence[Any], kwargs: Dict[str, Any]) → Tuple[Any, Sequence[Any], Dict[str, Any]]

将 ​args​、​kwargs中的命名参数替换为 ​new_value​。

返回​ (old_value, args, kwargs)​。 返回的 ​args​和 ​kwargs对象可能与输入对象不同,或者输入对象可能发生了变异。

如果未找到命名参数,则将 ​new_value添加到 ​kwargs中,并且 ​None将作为 ​old_value返回。

tornado.util.timedelta_to_seconds(td)

等同于 ​td.total_seconds()​(在 Python 2.7 中引入)。