# Pycider
[![Documentation Status](https://readthedocs.org/projects/pycider/badge/?version=latest)](https://pycider.readthedocs.io/en/latest/?badge=latest)![Test Status](https://github.com/melodyasper/pycider/actions/workflows/ci.yml/badge.svg)
[Documentation is here](http://pycider.readthedocs.io/). This code is a Python implementation of deciders based on the F# code from [Jérémie Chassaing](https://github.com/thinkbeforecoding/) located here [dddeu-2023-deciders](https://github.com/thinkbeforecoding/dddeu-2023-deciders). There was additionally a talk on this, to be found [here](https://www.youtube.com/watch?v=72TOhMpEVlA).
## Installation
You can use `pip install pycider` or `poetry add pycider` to install this project from [PyPI](https://pypi.org/project/pycider/).
## Usage
You can create `Process` or a `Decider`. A simple example of this can be found under the [test composition page](./tests/test_compositions.py).
## Decider
`Decider` is a simple state machine that seperates state changes and actions. `Command`s are actions which when executed return `Event`s representing the results from the actions. You can use `Event`'s to deterministically update the `State` allowing replayability and easy serialization by only saving `Event`'s.
* `Command`s are turned into `Event`'s through `decide()` calls.
* `Event`'s deterministically update the `State` through `evolve()` calls.
## Process
`Process` is a simple state machine for managing a system. A system has several needs. The system given a `State` should be able to resume to the next `Command`, The system should be able to react to `Event` changes and return `Command`'s for dealing with those changes. Finally the system should be able to update the `State` deterministically given a `Event`.
* `Event`'s are turned into `Command`s thrugh `react()` calls.
* Given a `State`, the system should be able to `resume()` to the appropriate `Command`.
* `Event`'s deterministically update the `State` through `evolve()` calls.
Raw data
{
"_id": null,
"home_page": "https://github.com/melodyasper/pycider",
"name": "pycider",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.12",
"maintainer_email": null,
"keywords": "ddd, domain, design, decider, deciders, aggregates, aggregate, composition",
"author": "Melody Asper",
"author_email": "melodyaheath@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/6e/6f/bcecaebdc4614d818b95feb247096680573a3f0dfeaf128b9bf8725bb2a7/pycider-0.6.11.tar.gz",
"platform": null,
"description": "# Pycider\n\n[![Documentation Status](https://readthedocs.org/projects/pycider/badge/?version=latest)](https://pycider.readthedocs.io/en/latest/?badge=latest)![Test Status](https://github.com/melodyasper/pycider/actions/workflows/ci.yml/badge.svg)\n\n\n[Documentation is here](http://pycider.readthedocs.io/). This code is a Python implementation of deciders based on the F# code from [J\u00e9r\u00e9mie Chassaing](https://github.com/thinkbeforecoding/) located here [dddeu-2023-deciders](https://github.com/thinkbeforecoding/dddeu-2023-deciders). There was additionally a talk on this, to be found [here](https://www.youtube.com/watch?v=72TOhMpEVlA).\n\n## Installation\n\nYou can use `pip install pycider` or `poetry add pycider` to install this project from [PyPI](https://pypi.org/project/pycider/).\n\n## Usage\n\nYou can create `Process` or a `Decider`. A simple example of this can be found under the [test composition page](./tests/test_compositions.py). \n\n## Decider \n\n`Decider` is a simple state machine that seperates state changes and actions. `Command`s are actions which when executed return `Event`s representing the results from the actions. You can use `Event`'s to deterministically update the `State` allowing replayability and easy serialization by only saving `Event`'s. \n\n* `Command`s are turned into `Event`'s through `decide()` calls.\n* `Event`'s deterministically update the `State` through `evolve()` calls.\n\n## Process\n\n`Process` is a simple state machine for managing a system. A system has several needs. The system given a `State` should be able to resume to the next `Command`, The system should be able to react to `Event` changes and return `Command`'s for dealing with those changes. Finally the system should be able to update the `State` deterministically given a `Event`. \n\n* `Event`'s are turned into `Command`s thrugh `react()` calls.\n* Given a `State`, the system should be able to `resume()` to the appropriate `Command`.\n* `Event`'s deterministically update the `State` through `evolve()` calls.\n\n",
"bugtrack_url": null,
"license": null,
"summary": "Aggregates composition for domain driven design in Python",
"version": "0.6.11",
"project_urls": {
"Homepage": "https://github.com/melodyasper/pycider",
"Repository": "https://github.com/melodyasper/pycider"
},
"split_keywords": [
"ddd",
" domain",
" design",
" decider",
" deciders",
" aggregates",
" aggregate",
" composition"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "61005f1394f2e5297a04283dec4948d5bd0c77b4f4c91bb6ffc1bbbe9b943a67",
"md5": "8f3d4f5026d4d6bd446e2a52d0681086",
"sha256": "5730ae5dec21b155eccc79a6dd7300de2ceef92ae8d5d1832a6f654d78f7615b"
},
"downloads": -1,
"filename": "pycider-0.6.11-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8f3d4f5026d4d6bd446e2a52d0681086",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.12",
"size": 7869,
"upload_time": "2024-11-04T19:43:31",
"upload_time_iso_8601": "2024-11-04T19:43:31.634704Z",
"url": "https://files.pythonhosted.org/packages/61/00/5f1394f2e5297a04283dec4948d5bd0c77b4f4c91bb6ffc1bbbe9b943a67/pycider-0.6.11-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6e6fbcecaebdc4614d818b95feb247096680573a3f0dfeaf128b9bf8725bb2a7",
"md5": "f1ec481ab230eb59e1f70b3466e112cb",
"sha256": "b7bead0aa8eace9e03ef9cf3f491b464495541c5835d29466f44ab01a9440571"
},
"downloads": -1,
"filename": "pycider-0.6.11.tar.gz",
"has_sig": false,
"md5_digest": "f1ec481ab230eb59e1f70b3466e112cb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.12",
"size": 7038,
"upload_time": "2024-11-04T19:43:33",
"upload_time_iso_8601": "2024-11-04T19:43:33.630135Z",
"url": "https://files.pythonhosted.org/packages/6e/6f/bcecaebdc4614d818b95feb247096680573a3f0dfeaf128b9bf8725bb2a7/pycider-0.6.11.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-04 19:43:33",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "melodyasper",
"github_project": "pycider",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pycider"
}