aioredux

Pythonic redux


License
MPL-2.0
Install
pip install aioredux==0.1.0

Documentation

aioredux

pypi version travis-ci build status pypi download statistics

Pythonic Redux

Pythonic Redux using asyncio. aioredux provides a predictable state container with the following goal: "[Redux] helps you write applications that behave consistently, run in different environments ..., and are easy to test" (from the Redux documentation).

  • Free software: Mozilla Public License

This package requires Python 3.4 or higher

Usage

import asyncio
import aioredux

 async def go():
     initial_state = {
         'todos': (),
     }

     def add_todo(text):
         return {'type': 'ADD_TODO', 'text': text}

     def reducer(state, action):
         if action['type'] == 'ADD_TODO':
             todos = state['todos'] + (action['text'],)
             return {'todos': todos}
         return state

     store = yield from aioredux.create_store(reducer, initial_state)
     yield from store.dispatch(add_todo('todo text'))
     print(store.state['todos'])

 asyncio.get_event_loop().run_until_complete(go())

Implementation notes

  • dispatch is marked as async although in most cases it functions like a plain Python function returning a Future. This is done to allow for cases where dispatch performs a more complicated set of (async) actions.
  • A Pythonic version of redux-thunk is also included.