Strongly-typed, scalable state management for Python.
Project description
Simple example
# main.py
from typing import NamedTuple
import pydepot
class State(NamedTuple):
counter: int
class AddToCounterAction(pydepot.Action):
def __init__(self, value: int):
self.value: int = value
class AddToCounterReducer(pydepot.Reducer[AddToCounterAction, State]):
@property
def action_type(self) -> type[AddToCounterAction]:
return AddToCounterAction
def apply(self, action: AddToCounterAction, state: State) -> State:
return State(counter=state.counter + action.value)
class CounterSubscriber(pydepot.StoreSubscriber[State]):
def on_state(self, state: State) -> None:
print(f"The counter has changed to {state.counter}.")
def main() -> None:
store = pydepot.Store(initial_state=State(counter=0))
store.register(AddToCounterReducer())
subscriber = CounterSubscriber()
store.subscribe(subscriber)
store.dispatch(AddToCounterAction(value=42))
if __name__ == "__main__":
main()
$ python3 main.py
The counter has changed to 42!
Installation
Pydepot is available as pydepot
on PyPI:
pip install pydepot
Usage
For detailed quickstart and API reference, visit the Documentation
License
Copyright (C) 2023 tombartk
This program is free software: you can redistribute it and/or modify it under the terms
of the GNU Affero General Public License as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program.
If not, see https://www.gnu.org/licenses/.
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
pydepot-0.1.1.tar.gz
(22.8 kB
view details)
Built Distribution
pydepot-0.1.1-py3-none-any.whl
(18.7 kB
view details)
File details
Details for the file pydepot-0.1.1.tar.gz
.
File metadata
- Download URL: pydepot-0.1.1.tar.gz
- Upload date:
- Size: 22.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.24.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 096767d6934a1065b42b1f21dc06cb7345b423b11581f06f3145a8ee99f48dfb |
|
MD5 | 1909ab63a0117a349574646d307c0a46 |
|
BLAKE2b-256 | 4ed3a75cecdfd3ad2cfe3d958a5ecf6253036b6b38a06bd139428f15d2c3e8bc |
File details
Details for the file pydepot-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: pydepot-0.1.1-py3-none-any.whl
- Upload date:
- Size: 18.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.24.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 20dd460e7e1cc7f914aba7b413c2d0072103a7b669e008aba947ac81cf039220 |
|
MD5 | a5df42d92a4eef88fa90a70694b417d0 |
|
BLAKE2b-256 | e887f758ec58dc4f78d59d78079d04d5c6d51771b320de4e7b2f95a4576a8fe4 |