受 Redux 启发的状态管理
项目描述
管理状态
受 Redux 启发的状态管理
快速开始
设置
from managedstate import State
initial_state = {
"first_key": [
{
"id": 1,
"second_key": True
},
{
"id": 2,
"second_key": False
}
]
}
state = State(initial_state=initial_state)
获取状态
- 完整的状态对象
>>> state.get()
{'first_key': [{'id': 1, 'second_key': True}, {'id': 2, 'second_key': False}]}
- 子状态对象
>>> state.get(["first_key", 0, "second_key"], defaults=[[], {}, False])
True
- 子状态对象,使用查询函数
def id_is_1_query(first_key_list):
for index, obj in enumerate(first_key_list):
if obj["id"] == 1:
return index
>>> state.get(["first_key", KeyQuery(id_is_1_query), "second_key"], defaults=[[], {}, False])
True
设置状态
- 完整的状态对象
>>> state.set({'first_key': [{'id': 3, 'second_key': True}, {'id': 4, 'second_key': False}]})
>>> state.get()
{'first_key': [{'id': 3, 'second_key': True}, {'id': 4, 'second_key': False}]}
- 子状态对象,使用查询函数
def get_id_key_query(target_id): # This will dynamically create the query we need, when we need it
def id_query(substate):
for index, obj in enumerate(substate):
if obj["id"] == target_id:
return index
return KeyQuery(id_query)
>>> state.set(False, ['first_key', get_id_key_query(3), 'second_key'], defaults=[[], {}])
>>> state.get()
{'first_key': [{'id': 3, 'second_key': False}, {'id': 4, 'second_key': False}]}
功能性
依赖项
此包中的 State 类和扩展分别从objectextensions实现 Extendable 和 Extension 。因此,应用扩展是通过调用类方法State.with_extensions()并传入要应用的扩展类来完成的。
示例代码:
from managedstate import State
from managedstate.extensions import Registrar
state = State.with_extensions(Registrar)()
扩展
扩展名。Registrar
允许在简写标签下注册特定的 get 和 set 操作,以便以后使用。
扩展名。Listeners提供了一种简单的方法来附加将在和/或
之后立即调用的观察者方法。set()get()
数据类
AttributeName ( self, attribute_name: str )
在获取或设置状态时,应提供此类的实例作为路径键,
以指示应通过对象属性访问状态的下一个嵌套级别。
注意:由于此类间接用于确定访问状态的方法,
因此不应将其直接存储为该状态中的键。
KeyQuery ( self, path_key_getter: Callable[[Any], Any] )
获取或设置状态时,可以将此类的实例作为路径键提供,
以指示应通过返回的路径键访问状态的下一个嵌套级别
从其存储的功能。
该函数将接收当前嵌套级别的状态对象的副本,
以确定要返回的键。
扩展名。PartialQuery ( self, path_key_getter: Callable[[Any], Any] )
此类的实例只能在Registrar.register_path().
当使用相关路径标签调用registered_get()/时,
将调用下面提供的函数并从自定义查询 args 列表中传递一个值;
应返回有效的路径键或 KeyQuery。registered_set()
特性
扩展名.Registrar。registered_pa
ths 返回当前路径注册表的副本。
方法
状态。get ( self, path_keys: Sequence[Any] = (), defaults: Sequence[Any] = () )
使用提供的路径键按顺序钻取状态对象。
任何时候进一步进入状态对象失败,
都会替换相关默认值索引处的默认值。
返回向下钻取状态对象的副本。
状态。set ( self, value: Any, path_keys: Sequence[Any] = (), defaults: Sequence[Any] = () )
使用提供的路径键按顺序钻取状态对象。
任何时候进一步进入状态对象失败,
都会替换相关默认值索引处的默认值。
最终路径键用作索引,以存储
向下钻取状态对象内部提供的值的副本。
扩展名.Registrar。register_path ( self, registered_path_label: str, path_keys: Sequence[Any], defaults: Sequence[Any] = () )
将提供的路径键和默认值保存在提供的标签下,以便以后可以
进行自定义获取或设置只需在对registered_get()or的调用中再次提供标签即可registered_set()。
扩展名.Registrar。get_shape ( self, initial_state: Any = None )
使用当前注册的路径为状态生成默认形状。
为此目的,任何包含 PartialQuery 对象的注册路径都将被截断,因为无法
确定 PartialQuery 对象将提供什么样的值来进一步深入了解状态。
扩展名.Registrar。register_get ( self, registered_path_label: str, custom_query_args: Sequence[Any] = () )
调用get(),传入路径键和之前提供的默认值register()。
如果这些路径键中的任何一个是 PartialQuery 的实例,则每个都将被调用并从
自定义查询参数列表中传递一个值,并且预计会返回一个有效的路径键或 KeyQuery。
扩展名.Registrar。register_set ( self, value: Any, registered_path_label: str, custom_query_args: Sequence[Any] = () )
调用set(),传入路径键和之前提供的默认值register()。
如果这些路径键中的任何一个是 PartialQuery 的实例,则每个都将被调用并从
自定义查询参数列表中传递一个值,并且预计会返回一个有效的路径键或 KeyQuery。
扩展名.Listeners。add_listener ( self, method: str, listener: Callable[[dict], None] )
将提供的侦听器添加到指定方法的一组回调中。
这些回调将以 形式接收方法返回值及其参数
的副本result, self, *args, **kwargs。
扩展名.Listeners。remove_listener ( self, method: str, listener: Callable[[dict], None] )
从指定方法的回调集中移除提供的侦听器。
附加信息
- 作为路径键提供的 KeyQuery 实例可以返回任何有效的路径键,除了另一个 KeyQuery 或 PartialQuery
- 同样,PartialQuery 实例可以返回除另一个 PartialQuery 之外的任何有效路径键(但是它们可以返回 KeyQuery)
- 此包中提供的数据类并非旨在存储在状态对象本身内。这样做可能会导致意外行为
项目详情
managedstate -4.0.0.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 834b87e6cf28cced742f3db9211d2c1f5ea478c1833a9aaf54f0533ef16b6ae8 |
|
| MD5 | 467dabd802c5dfbc15ec3a2d60fc20ea |
|
| 布莱克2-256 | 591f5c00880561f84aae8089e14c942bd223784227751d21e7e5e6500c05e456 |