Skip to main content

受 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_pa​​th_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_pa​​th_label: str, custom_query_args: Sequence[Any] = () )
    调用get(),传入路径键和之前提供的默认值register()
    如果这些路径键中的任何一个是 PartialQuery 的实例,则每个都将被调用并从
    自定义查询参数列表中传递一个值,并且预计会返回一个有效的路径键或 KeyQuery。
 

扩展名.Registrar。register_set ( self, value: Any, registered_pa​​th_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 (11.6 kB 查看哈希

已上传 source