tornado.util — 通用工具

雜項的實用函式和類別。

這個模組在 Tornado 內部使用。這裡定義的函式和類別不一定對其他應用程式有用,但這裡的文件會說明它們,以防它們有用。

這個模組中唯一公開的部分是 Configurable 類別及其 configure 方法,它成為其子類別介面的一部分,包括 AsyncHTTPClientIOLoopResolver

class tornado.util.TimeoutError[原始碼]

gen.with_timeoutIOLoop.run_sync 引發的例外狀況。

在 5.0 版本變更: tornado.gen.TimeoutErrortornado.ioloop.TimeoutError 合併為 tornado.util.TimeoutError。先前的兩個名稱仍然保留為別名。

在 6.2 版本變更: tornado.util.TimeoutErrorasyncio.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

property unconsumed_tail: bytes

傳回剩餘未使用的部分

flush() bytes[原始碼]

傳回任何尚未由解壓縮傳回的剩餘緩衝資料。

也會檢查錯誤,例如截斷的輸入。在 flush 之後,不得在此物件上呼叫其他方法。

tornado.util.import_object(name: str) Any[原始碼]

依名稱匯入物件。

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][原始碼]

從 Exception 物件提供 errno。

在某些情況下,errno 屬性未設定,因此我們會從 args 中取出 errno,但如果有人在沒有任何 args 的情況下建立 Exception 的實例,則會收到元組錯誤。因此,此函式會抽象所有這些行為,以提供您取得 errno 的安全方法。

tornado.util.re_unescape(s: str) str[原始碼]

取消轉義 re.escape 所轉義的字串。

對於可能不是由 re.escape 產生的正規表示式,可能會引發 ValueError (例如,包含 \d 的字串無法取消轉義)。

4.4 版本中的新功能。

class tornado.util.Configurable(*args: Any, **kwargs: Any)[原始碼]

可配置介面的基底類別。

可配置介面是一個(抽象)類別,其建構子充當其某個實作子類別的工廠函數。實作子類別及其初始設定器的可選關鍵字引數可以使用 configure 在執行時全域設定。

透過將建構子用作工廠方法,介面看起來像一個普通的類別,isinstance 的運作方式與平常相同等等。當實作的選擇很可能是一個全域決策時(例如,當 epoll 可用時,始終使用它而不是 select),或者當先前單體類別已分割為專用子類別時,此模式最為有用。

可配置的子類別必須定義類別方法 configurable_baseconfigurable_default,並使用實例方法 initialize 而不是 __init__

變更於 5.0 版本: 現在可以在類別階層結構的多個層級指定設定。

classmethod configurable_base() Type[Configurable][原始碼]

傳回可配置階層結構的基底類別。

這通常會傳回定義它的類別。(這與 cls 類別方法參數不一定相同)。

classmethod configurable_default() Type[Configurable][原始碼]

傳回如果未設定則要使用的實作類別。

initialize() None

初始化 Configurable 子類別實例。

可配置類別應使用 initialize 而不是 __init__

變更於 4.2 版本: 現在除了關鍵字引數外,還接受位置引數。

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

設定當實例化基底類別時要使用的類別。

關鍵字引數將會儲存並新增至傳遞至建構子的引數。這可以用於為某些參數設定全域預設值。

classmethod configured_class() Type[Configurable][原始碼]

傳回目前已設定的類別。

class tornado.util.ArgReplacer(func: Callable, name: str)[原始碼]

取代 args、kwargs 對中的一個值。

檢查函式簽名以依名稱尋找引數,無論是以位置還是關鍵字傳遞。用於裝飾器和類似的包裝函式。

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

傳回指定名稱引數的舊值,而不取代它。

如果引數不存在,則傳回 default

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)。回傳的 argskwargs 物件可能與輸入的物件不同,或者輸入的物件可能會被修改。

如果找不到指定名稱的參數,new_value 將會被加入到 kwargs 中,並且 None 會被當作 old_value 回傳。

tornado.util.timedelta_to_seconds(td: datetime.timedelta) float[原始碼]

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