用于更改目录、设置属性/envvars等的上下文管理器。
项目描述
morecontext 提供了一些常见操作(特别是更改当前工作目录、对象的属性、dict 字段或环境变量,然后将其设置回原来的值)的上下文管理器。当然,您自己也可以轻松实现这些操作,但为什么要在每次都做同样的事情时麻烦自己,而不是让这个包来帮您完成呢?
类型注解!完全测试!
安装
morecontext 需要 Python 3.6 或更高版本。只需使用 Python 3 的 pip 安装 morecontext
python3 -m pip install morecontext
示例
>>> import os >>> import morecontext >>> os.getcwd() '/some/dir' >>> with morecontext.dirchanged('/some/other/dir'): ... # Now we're in /some/other/dir ... os.getcwd() ... '/some/other/dir' >>> # Out of the `with`, back to /some/dir >>> os.getcwd() '/some/dir'
>>> d = {"foo": 42} >>> with morecontext.itemset(d, "foo", "bar"): ... # d["foo"] == "bar" in here ... d["foo"] ... # If we change d["foo"] in here, it'll still be set back to 42 on exit ... d["foo"] = 3.14 ... 'bar' >>> # Out of the `with`, it's back to 42 >>> d["foo"] 42
API
函数
以下所有上下文管理器函数都使用 contextlib.contextmanager 定义,因此它们也可以作为函数装饰器使用。它们在进入时都返回 None,所以没有必要编写“with dirchanged(path) as foo:”;直接使用“with dirchanged(path):”即可。
这些函数不是线程安全的。
dirchanged(dirpath: Union[str, bytes, os.PathLike]) -> ContextManager[None]
暂时更改当前工作目录。
dirchanged(dirpath) 返回一个上下文管理器。进入时,它存储当前工作目录路径,然后更改当前目录为 dirpath。退出时,它将当前目录更改回存储的路径。
dirrollback() -> ContextManager[None]
保存并恢复当前工作目录。
dirrollback() 返回一个上下文管理器,它在进入时存储当前工作目录,并在退出时更改回该目录。
attrset(obj: Any, name: str, value: Any) -> ContextManager[None]
暂时更改对象的属性值。
attrset(obj, name, value) 返回一个上下文管理器。进入时,它存储对象 obj 中名为 name 的属性的当前值,然后设置该属性为 value。退出时,它将属性恢复到存储的值。
如果给定的属性在进入时未设置,上下文管理器将在退出时取消设置它。
attrdel(obj: Any, name: str) -> ContextManager[None]
暂时取消对象的属性。
attrdel(obj, name) 返回一个上下文管理器。进入时,它存储对象 obj 中名为 name 的属性的当前值,然后取消设置该属性。退出时,它将属性恢复到存储的值。
如果给定的属性在进入时未设置,上下文管理器将在退出时取消设置它。
attrrollback(obj: Any, name: str, copy: bool = False, deepcopy: bool = False) -> ContextManager[None]
保存并恢复对象的属性值。
attrrollback(obj, name) 返回一个上下文管理器,它在进入时存储对象 obj 中名为 name 的属性值,并在退出时将该属性恢复到该值。如果给定的属性在进入时未设置,上下文管理器将在退出时取消设置它。
如果 copy 为真,则保存并恢复属性的浅拷贝。如果 deepcopy 为真,则保存并恢复属性的深拷贝。如果两个选项都为真,则 deepcopy 优先。
itemset(d: MutableMapping[K,V], key: K, value: V) -> ContextManager[None]
暂时更改映射条目的值。
itemset(d, key, value) 返回一个上下文管理器。进入时,它存储 d[key] 的当前值,然后设置该字段为 value。退出时,它将该字段恢复到存储的值。
如果给定的字段在进入时未设置,上下文管理器将在退出时取消设置它。
itemdel(d: MutableMapping[K, Any], key: K) -> ContextManager[None]
暂时取消映射条目。
itemdel(d, key) 返回一个上下文管理器。进入时,它存储 d[key] 的当前值,然后取消设置该字段。退出时,它将该字段恢复到存储的值。
如果给定的字段在进入时未设置,上下文管理器将在退出时取消设置它。
itemrollback(d: MutableMapping[K, Any], key: K, copy: bool = False, deepcopy: bool = False) -> ContextManager[None]
保存并恢复映射条目的值。
itemrollback(d, key) 返回一个上下文管理器,它在进入时存储 d[key] 的值,并在退出时将该字段恢复到该值。如果给定的字段在进入时未设置,上下文管理器将在退出时取消设置它。
如果 copy 为真,则保存并恢复字段的浅拷贝。如果 deepcopy 为真,则保存并恢复字段的深拷贝。如果两个选项都为真,则 deepcopy 优先。
envset(name: str, value: str) -> ContextManager[None]
暂时设置环境变量。
envset(name, value) 返回一个上下文管理器。进入时,它存储环境变量 name 的当前值,然后将其设置为 value。退出时,它将环境变量恢复到存储的值。
如果进入时环境变量未设置,上下文管理器在退出时将取消设置该环境变量。
envdel(name: str) -> ContextManager[None]
暂时取消设置一个环境变量。
envdel(name) 返回一个上下文管理器。进入时,它存储环境变量 name 的当前值,然后取消设置该环境变量。退出时,它将环境变量恢复到存储的值。
如果进入时环境变量未设置,上下文管理器在退出时将取消设置该环境变量。
envrollback(name: str) -> ContextManager[None]
保存并恢复环境变量的值。
envrollback(name) 返回一个上下文管理器,它在进入时存储环境变量 name 的值,并在退出时将该环境变量恢复到该值。如果进入时给定的环境变量未设置,上下文管理器在退出时将取消设置该环境变量。
additem(lst: MutableSequence[T], value: T, prepend: bool = False) -> ContextManager[None]
暂时向序列中添加一个值。
additem(lst, value) 返回一个上下文管理器,它在进入时将 value 追加到序列 lst,并在退出时删除 lst 中最后一个等于 value 的元素(如果有)。
如果 prepend 为 true,则在进入时将 value 预先添加到 lst 中,并在退出时删除 lst 中第一个等于 value 的元素。
类
class OpenClosable:
def open(self) -> None:
...
def close(self) -> None:
...
用于创建简单 重入 上下文管理器的基础类。 OpenClosable 定义了 __enter__ 和 __exit__ 方法,这些方法跟踪当前作用域中的嵌套 with 语句数量,并在进入和退出最外层的 with 时调用实例的 open() 和 close() 方法。
子类应覆盖 open() 和/或 close() 以执行所需的代码,在进入和退出最外层的 with 时执行;OpenClosable 定义的默认 open() 和 close() 方法不做任何事情。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
更多context-0.6.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fffedb3f853b9fcb81296ebd650d8f774c84d604af8b09a6b531a4cd46a5dc35 |
|
MD5 | b2a6e70391cb19309d309a32ab931c67 |
|
BLAKE2b-256 | 4406de0f22b2ed7d5744d1eebe81b150e25545fe91dc839f4263ab73137fa61c |