pycider


Namepycider JSON
Version 0.6.11 PyPI version JSON
download
home_pagehttps://github.com/melodyasper/pycider
SummaryAggregates composition for domain driven design in Python
upload_time2024-11-04 19:43:33
maintainerNone
docs_urlNone
authorMelody Asper
requires_python<4.0,>=3.12
licenseNone
keywords ddd domain design decider deciders aggregates aggregate composition
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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"
}
        
Elapsed time: 0.40457s