Skip to main content

Redux reimplemented in Python.

PyPI version

To see it in action, try the todos demo. (Mouse-click needed, as in the original demo)

pip install urwid_todos ; python -m urwid_todos

What is it? Why would I want it?

The Redux Readme is a good place to start.

The Gist

The whole state of your app is stored in an object tree inside a single store. The only way to change the state tree is to emit an action, an object describing what happened. To specify how the actions transform the state tree, you write pure reducers.

That’s it!

from __future__ import print_function
import pydux

# This is a reducer, a pure function with (state, action) => state signature.
# It describes how an action transforms the state into the next state.
#
# The shape of the state is up to you: it can be a primitive, an array, an object,
# or even an frozendict data structure [1]. The only important part is that you should
# not mutate the state object, but return a new object if the state changes.
#
# [1]: https://pypi.python.org/pypi/frozendict
#
# In this example, we use a `if` statement and strings, but you can use a
# helper that follows a different convention if it makes sense for your
# project.
def counter(state, action):
    if state is None:
        state = 0
    if action is None:
        return state
    elif action['type'] == 'INCREMENT':
        return state + 1
    elif action['type'] == 'DECREMENT':
        return state - 1
    return state

# Create a Redux store holding the state of your app.
# Its API is { subscribe, dispatch, get_state }.
store = pydux.create_store(counter)

# You can use subscribe() to update the UI in response to state changes.
store.subscribe(lambda: print(store.get_state()))

# The only way to mutate the internal state is to dispatch an action.
# The actions can be serialized, logged or stored and later replayed.
store.dispatch({ 'type': 'INCREMENT' })
# 1
store.dispatch({ 'type': 'INCREMENT' })
# 2
store.dispatch({ 'type': 'DECREMENT' })
# 1

Further examples of Python usage

urwid_pydux provides a React-Redux Component API for text/console GUIs made with Urwid.

urwid_todos is a reimplementation of the Redux todos example made with urwid_pydux.

Acknowledgements

The initial test suite was imported from python-redux, a Redux implementation for Python 3.4+.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pydux-0.2.1.tar.gz (9.1 kB view details)

Uploaded Source

File details

Details for the file pydux-0.2.1.tar.gz.

File metadata

  • Download URL: pydux-0.2.1.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pydux-0.2.1.tar.gz
Algorithm Hash digest
SHA256 fb5872c5f4b25e54c4c17bd308e365e20fe935162c468d3a19198a4b84fc1348
MD5 34e1eeb624616c1df2c1c1cd1fd58eb0
BLAKE2b-256 40fdf9fd8ac9c870c17da6db59684524a3309e00cd6384a7af54c62f90ccb97a

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.2

2 files

This release

0.2.1 This release

1 file

0.2.0

1 file

0.1.0

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page