Tornado 通用utilities
该模块由 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()
返回可配置层次结构的基类。
这通常会返回定义它的类。 (不一定与cls
classmethod 参数相同)。
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 中引入)。