Skip to main content

Strongly-typed, scalable state management for Python.

Project description

Logo

Strongly-typed, scalable state container for Python.
Documentation

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

GPLv3

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


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)

Uploaded Source

Built Distribution

pydepot-0.1.1-py3-none-any.whl (18.7 kB view details)

Uploaded Python 3

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

Hashes for pydepot-0.1.1.tar.gz
Algorithm Hash digest
SHA256 096767d6934a1065b42b1f21dc06cb7345b423b11581f06f3145a8ee99f48dfb
MD5 1909ab63a0117a349574646d307c0a46
BLAKE2b-256 4ed3a75cecdfd3ad2cfe3d958a5ecf6253036b6b38a06bd139428f15d2c3e8bc

See more details on using hashes here.

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

Hashes for pydepot-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 20dd460e7e1cc7f914aba7b413c2d0072103a7b669e008aba947ac81cf039220
MD5 a5df42d92a4eef88fa90a70694b417d0
BLAKE2b-256 e887f758ec58dc4f78d59d78079d04d5c6d51771b320de4e7b2f95a4576a8fe4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page