tornado.util — 通用实用程序

各种实用程序函数和类。

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

此模块中面向公众的部分是 Configurable 类及其 configure 方法,它成为其子类的接口的一部分,包括 AsyncHTTPClientIOLoopResolver.

class tornado.util.TimeoutError[source]

gen.with_timeoutIOLoop.run_sync 引发的异常。

在版本 5.0 中更改: 统一 tornado.gen.TimeoutErrortornado.ioloop.TimeoutErrortornado.util.TimeoutError。这两个旧名称仍然作为别名存在。

在版本 6.2 中更改: tornado.util.TimeoutErrorasyncio.TimeoutError 的别名

class tornado.util.ObjectDict[source]

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

class tornado.util.GzipDecompressor[source]

流式 gzip 解压缩器。

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

decompress(value: bytes, max_length: int = 0) bytes[source]

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

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

如果给出了 max_length,某些输入数据可能会保留在 unconsumed_tail 中;如果它不为空,则必须检索此值并将其传递回对 decompress 的未来调用。

property unconsumed_tail: bytes

返回未消耗的部分。

flush() bytes[source]

返回由 decompress 未返回的任何剩余缓冲数据。

还检查错误,例如截断输入。在调用 flush 之后,不能对该对象调用任何其他方法。

tornado.util.import_object(name: str) Any[source]

按名称导入对象。

import_object('x') 等同于 import ximport_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][source]

提供来自异常对象的 errno。

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

tornado.util.re_unescape(s: str) str[source]

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

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

在版本 4.4 中新增。

class tornado.util.Configurable(*args: Any, **kwargs: Any)[source]

可配置接口的基类。

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

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

可配置子类必须定义类方法 configurable_baseconfigurable_default,并使用实例方法 initialize 而不是 __init__

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

classmethod configurable_base() Type[Configurable][source]

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

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

classmethod configurable_default() Type[Configurable][source]

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

initialize() None

初始化 Configurable 子类实例。

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

在版本 4.2 中更改: 现在除了关键字参数之外还可以接受位置参数。

classmethod configure(impl: Union[None, str, Type[Configurable]], **kwargs: Any) None[source]

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

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

classmethod configured_class() Type[Configurable][source]

返回当前配置的类。

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

替换 args, kwargs 对中的一个值。

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

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

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

如果参数不存在,则返回 default

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

new_value 替换 args, kwargs 中的命名参数。

返回 (old_value, args, kwargs)。 返回的 argskwargs 对象可能与输入对象不同,或者输入对象可能被修改。

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

tornado.util.timedelta_to_seconds(td: datetime.timedelta) float[source]

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