一个便捷实用的上下文管理工具
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
Release history Release notifications | RSS feed
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.8.tar.gz
(10.5 kB
view details)
Built Distribution
mapgraph-0.1.8-py3-none-any.whl
(10.4 kB
view details)
File details
Details for the file mapgraph-0.1.8.tar.gz
.
File metadata
- Download URL: mapgraph-0.1.8.tar.gz
- Upload date:
- Size: 10.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: pdm/2.18.0 CPython/3.10.12 Linux/6.5.0-1025-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c9876db598a85859002ce41c9a6ff168f439a2bb6a62adab52cef281111bf26f |
|
MD5 | f60141d2f6dc94f4b7642cd303c151f8 |
|
BLAKE2b-256 | 7d4b1d9f2ed8f0ae5b9b158e995070d1fac322c9cfac8a4909bc891bb4499e8d |
File details
Details for the file mapgraph-0.1.8-py3-none-any.whl
.
File metadata
- Download URL: mapgraph-0.1.8-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: pdm/2.18.0 CPython/3.10.12 Linux/6.5.0-1025-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2314f2791bad90cade2c4986074dfe57dc3386b28793b433ef1a9b133af1f109 |
|
MD5 | 3a67ab75e54406f83d6d1a158224726c |
|
BLAKE2b-256 | fb3f96bc89f1a244722f39ac98fa06a06f5e455640495c937983a1a3a9f68047 |