一个便捷实用的上下文管理工具
Project description
功能
- 上下文管理/切换
- 描述器支持
- 一流的类型支持
安装
pip install mapgraph
Or
pdm add mapgraph
入门指南
全局上下文对象
from mapgraph.instance_of import get_instance
from mapgraph.globals import GLOBAL_INSTANCE_CONTEXT
GLOBAL_INSTANCE_CONTEXT.store(666)
assert get_instance(int) == 666
描述器支持
from mapgraph.instance_of import InstanceOf, get_instance
from mapgraph.globals import GLOBAL_INSTANCE_CONTEXT
GLOBAL_INSTANCE_CONTEXT.store(666)
class Test:
a = InstanceOf(int)
assert Test().a == 666
实例上下文
from mapgraph.instance_of import InstanceOf, get_instance
from mapgraph.context import InstanceContext
from mapgraph.globals import GLOBAL_INSTANCE_CONTEXT
context = InstanceContext()
GLOBAL_INSTANCE_CONTEXT.store(666)
context.store(6, "6")
assert get_instance(int) == 666
with context.scope():
assert get_instance(int) == 6
assert get_instance(str) == "6"
泛型支持
from typing import TypeVar, Generic
from typing_extensions import Annotated
from mapgraph.instance_of import get_instance
from mapgraph.context import InstanceContext
from mapgraph.globals import GLOBAL_INSTANCE_CONTEXT
from pydantic import Field
T = TypeVar("T")
class Obj(Generic[T]):
a: T
def __init__(self, a: T):
self.a = a
context = InstanceContext()
local_context = InstanceContext()
GLOBAL_INSTANCE_CONTEXT.store("GLOBAL", 10, {"a": 10}, Obj[int](10))
local_context.store(1, {1: "a"}, Obj[str]("1"))
context.store("context")
assert get_instance(Obj[int]).a == 10
with local_context.scope():
assert get_instance(Obj[str]).a == "1"
with context.scope():
assert get_instance(int) == 1
assert get_instance(Annotated[int, Field(gt=1)]) == 10
assert get_instance(dict) == {1: "a"}
assert get_instance(dict[str, int]) == {"a": 10}
支持类型
like_isinstance
- 基础类型 str/int/...
- 容器泛型 list[T]/dict[K, V]/...
- Union 类型类型
- Type
- TypeVar 类型变量
- 泛型类 Generic[T]
- Annotated/Field 注解类型
- Protocol 协议类型
- Protocol[T] 泛型协议类型
- TypedDict 字典类型
like_issubclass
- 基础类型 str/int
- 容器泛型 list[T]/dict[K, V]
- Union 类型类型
- Type
- TypeVar 类型变量
- 泛型类 Generic[T]
- Protocol 协议类型
- Protocol[T] 泛型协议类型
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
mapgraph-0.1.3.tar.gz
(10.3 kB
view hashes)
Built Distribution
mapgraph-0.1.3-py3-none-any.whl
(10.2 kB
view hashes)