State¶
Use the state API to manipulate the state of the application.
- class burr.core.state.State(
- initial_values: Dict[str, Any] | None = None,
- typing_system: TypingSystem[StateType] | None = None,
An immutable state object. This is the only way to interact with state in Burr.
- __init__(
- initial_values: Dict[str, Any] | None = None,
- typing_system: TypingSystem[StateType] | None = None,
- append(**updates: Any) State[StateType] ¶
Appends to the state with a set of key-value pairs. Each one must correspond to a list-like object, or an error will be raised.
This is an upsert operation, meaning that if the key does not exist, a new list will be created with the value in it.
state = State({"a": [1]}) state.append(a=2) # State({"a": [1, 2]})
- Parameters:
updates – updates to apply
- Returns:
new state object
- apply_operation(
- operation: StateDelta,
Applies a given operation to the state, returning a new state
- classmethod deserialize(json_dict: dict, **kwargs) State[StateType] ¶
Converts a dictionary representing a JSON object back into a state
- extend(**updates: list[Any]) State[StateType] ¶
Extends the state with a set of key-value pairs. Each one must correspond to a list-like object, or an error will be raised.
This is an upsert operation, meaning that if the key does not exist, a new list will be created and extended with the values.
state = State({"a": [1]}) state.extend(a=[2, 3]) # State({"a": [1, 2, 3]})
- Parameters:
updates – updates to apply
- Returns:
new state object
- get_all() Dict[str, Any] ¶
Returns the entire state, realize as a dictionary. This is a copy.
- increment(**updates: int) State[StateType] ¶
Increments the state with a set of key-value pairs. Each one must correspond to an integer, or an error will be raised.
- Parameters:
updates – updates to apply
- Returns:
new state object
- merge(other: State) State[StateType] ¶
Merges two states together, overwriting the values in self with those in other.
- serialize(**kwargs) dict ¶
Converts the state to a JSON serializable object
- subset(
- *keys: str,
- ignore_missing: bool = True,
Returns a subset of the state, with only the given keys
- update(**updates: Any) State[StateType] ¶
Updates the state with a set of key-value pairs Does an upsert operation (if the keys exist their value will be overwritten, otherwise they will be created)
state = State({"a": 1}) state.update(a=2, b=3) # State({"a": 2, "b": 3})
- Parameters:
updates – Updates to apply
- Returns:
A new state with the updates applied
- wipe(delete: list[str] | None = None, keep: list[str] | None = None)¶
- Wipes the state, either by deleting the keys in delete and keeping everything else
or keeping the keys in keep. and deleting everything else. If you pass nothing in it will delete the whole thing.
- Parameters:
delete – Keys to delete
keep – Keys to keep
- Returns:
A new state object
- with_typing_system(
- typing_system: TypingSystem[AssignedStateType],
Copies state with a specific typing system
Custom field level serialization and deserialization¶
Use the following to register custom field level serialization and deserialization functions. Note: this registration is global for any state field with the same name.
- burr.core.state.register_field_serde(field_name: str, serializer: Callable, deserializer: Callable)¶
Registers a custom serializer + deserializer for a field globally.
This is useful for really controlling how a field is serialized and deserialized for tracking / persistence.
def my_field_serializer(value: MyType, **kwargs) -> dict: serde_value = _do_something_to_serialize(value) return {"value": serde_value} def my_field_deserializer(value: dict, **kwargs) -> MyType: serde_value = value["value"] return _do_something_to_deserialize(serde_value) register_field_serde("my_field", my_field_serializer, my_field_deserializer)
- Parameters:
field_name – The name of the field to register the serializer for.
serializer – A function that takes the field value and returns a JSON serializable object.
deserializer – A function that takes the JSON serializable object and returns the field value.