{ "info": { "author": "Patrick Porto", "author_email": "patrick.s.porto@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# Kant Framework\n[![Build Status](https://travis-ci.org/patrickporto/kant.svg?branch=master)](https://travis-ci.org/patrickporto/kant)\n[![codecov.io](https://codecov.io/github/patrickporto/kant/coverage.svg?branch=master)](https://codecov.io/github/patrickporto/kant?branch=master)\n[![PyPI Package latest release](https://img.shields.io/pypi/v/kant.svg)](https://pypi.python.org/pypi/kant)\n[![Supported versions](https://img.shields.io/pypi/pyversions/kant.svg)](https://pypi.python.org/pypi/kant)\n[![Supported implementations](https://img.shields.io/pypi/implementation/kant.svg)](https://pypi.python.org/pypi/kant)\n\n\nA CQRS and Event Sourcing framework, safe for humans.\n\n## Feature Support\n\n* Event Store\n* Optimistic concurrency control\n* JSON serialization\n* SQLAlchemy Projections\n* Snapshots **[IN PROGRESS]**\n\nKant officially supports Python 3.5-3.6.\n\n## Getting started\n\nCreate declarative events\n\n```python\nfrom kant import events\n\nclass BankAccountCreated(events.Event):\n id = events.CUIDField(primary_key=True)\n owner = events.CharField()\n\nclass DepositPerformed(events.Event):\n amount = events.DecimalField()\n```\n\nCreate aggregate to apply events\n\n```python\nfrom kant import aggregates\n\nclass BankAccount(aggregates.Aggregate):\n id = aggregates.CUIDField()\n owner = aggregates.CharField()\n balance = aggregates.DecimalField()\n\n def apply_bank_account_created(self, event):\n self.id = event.id\n self.owner = event.owner\n self.balance = 0\n\n def apply_deposit_performed(self, event):\n self.balance += event.amount\n```\n\nNow, save the events\n\n```python\nfrom kant.eventstore import connect\n\nawait connect(user='user', password='user', database='database')\n\n# create event store for bank_account\nconn.create_keyspace('bank_account')\n\n# create events\nbank_account_created = BankAccountCreated(\n id=123,\n owner='John Doe',\n)\ndeposit_performed = DepositPerformed(\n amount=20,\n)\n\nbank_account = BankAccount()\nbank_account.dispatch([bank_account_created, deposit_performed])\nbank_account.save()\n\nstored_bank_account = BankAccount.objects.get(123)\n```\n\n## Installing\nTo install Kant, simply use [pipenv](pipenv.org) (or pip)\n\n```bash\n$ pipenv install kant\n```\n\n\n\n## Contributing\n\nPlease, read the contribute guide [CONTRIBUTING](CONTRIBUTING.md).", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/patrickporto/kant", "keywords": "eventsourcing cqrs eventstore", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "kant", "package_url": "https://pypi.org/project/kant/", "platform": "", "project_url": "https://pypi.org/project/kant/", "project_urls": { "Homepage": "http://github.com/patrickporto/kant" }, "release_url": "https://pypi.org/project/kant/2.1.0/", "requires_dist": null, "requires_python": "", "summary": "The CQRS and Event Sourcing framework for Python", "version": "2.1.0" }, "last_serial": 3588226, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "4e4269c732bdee501603a25470fa6b16", "sha256": "7f8d332ecdf442eab61015ba6ac2f71ccb832bc95b7638c503d7141ff1b35a5b" }, "downloads": -1, "filename": "kant-0.1.0.tar.gz", "has_sig": false, "md5_digest": "4e4269c732bdee501603a25470fa6b16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2987, "upload_time": "2018-01-11T17:59:14", "url": "https://files.pythonhosted.org/packages/79/ba/2f98b6b28450eeae2e4f2ba1a397b1a1c9e5b3abe269974743ce76ff1c14/kant-0.1.0.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "617a885626ae36838ac5a0d265b6e488", "sha256": "dc0f9850e1e62b4ba51e986b1b21f383f4c26eb626b5589b8641b6a48c960dd3" }, "downloads": -1, "filename": "kant-0.1.2.tar.gz", "has_sig": false, "md5_digest": "617a885626ae36838ac5a0d265b6e488", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2944, "upload_time": "2018-01-11T19:00:10", "url": "https://files.pythonhosted.org/packages/aa/e0/e053f6c7bfcfb555fd695255c56baafd502fd23e522d096389017a85d30a/kant-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "2c38288048e34b4057c10b8af3aab675", "sha256": "6ad3bdb63aecded904c14c9ded809a040e4458108491228d8e59caac757a50f7" }, "downloads": -1, "filename": "kant-0.1.3.tar.gz", "has_sig": false, "md5_digest": "2c38288048e34b4057c10b8af3aab675", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4961, "upload_time": "2018-01-11T20:12:18", "url": "https://files.pythonhosted.org/packages/a6/f2/3e92bc5840d395610d82ec3770599d17cd95b823bc690940aacc2f8284c3/kant-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "3f631b88b12a74ec121e3fb7107eae2d", "sha256": "ec05d68a5ee6fee877a6c9f58043d1be24e16b3c003595974df4b29ff12c166b" }, "downloads": -1, "filename": "kant-0.1.4.tar.gz", "has_sig": false, "md5_digest": "3f631b88b12a74ec121e3fb7107eae2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4974, "upload_time": "2018-01-27T15:30:48", "url": "https://files.pythonhosted.org/packages/7d/9d/d50f2a8331d4340b386a1d35cf9b38ab316b52fd7d65d3fc8b1fb2ca83ff/kant-0.1.4.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "bfeedb9f6e5f7662b476fe62afc46e40", "sha256": "bedf24c3903239984dc5ca6580f5aa941a9886ea9199acb0c2ce02623a7b895a" }, "downloads": -1, "filename": "kant-0.2.0.tar.gz", "has_sig": false, "md5_digest": "bfeedb9f6e5f7662b476fe62afc46e40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4695, "upload_time": "2018-01-15T14:36:21", "url": "https://files.pythonhosted.org/packages/b2/6e/0b8b8434ba29f6ea9494ff5756e2cd72684299d847b307d164124921063c/kant-0.2.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "f53193c6eb9b78a69a557478cdeaee4e", "sha256": "0f58835cebce58f6843a0f0bb1d5e88ff45dcf4c53245f8896320bbd6e70556f" }, "downloads": -1, "filename": "kant-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f53193c6eb9b78a69a557478cdeaee4e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5829, "upload_time": "2018-01-26T21:09:02", "url": "https://files.pythonhosted.org/packages/38/0c/dab93cff50962cd51d4b533632b7f8b054ab7075ce836d8804a76f95a2d2/kant-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "44562038678b6c09672a9fd66995e1b6", "sha256": "2b54dacf98ca3ceeb28628a83f6660d4a7de0e60d9ea02e2ddadbdce471c5332" }, "downloads": -1, "filename": "kant-1.0.1.tar.gz", "has_sig": false, "md5_digest": "44562038678b6c09672a9fd66995e1b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5900, "upload_time": "2018-01-27T15:28:20", "url": "https://files.pythonhosted.org/packages/1b/ba/8cd65536cf56768c1fae5d20ae76a92a92663318cdb369e94ad5877b25be/kant-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "bc99d6bb7678ccab831e7ad442fb911f", "sha256": "bbe7af94716ba4687cceb82f890822c422f63c9b0ae59fb5c34af0a5ff6ee0ca" }, "downloads": -1, "filename": "kant-1.0.2.tar.gz", "has_sig": false, "md5_digest": "bc99d6bb7678ccab831e7ad442fb911f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7496, "upload_time": "2018-01-27T15:30:54", "url": "https://files.pythonhosted.org/packages/73/8e/1b33fc575f621cca387b149b30acb318846cd4282515ee31b56b012da50e/kant-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "4ca20f99e461688ae43c8730d0255b01", "sha256": "ea76e3186fdbe2391bf30e7aa4a60300b753f988abceb90c816b0724b3d3e909" }, "downloads": -1, "filename": "kant-1.0.3.tar.gz", "has_sig": false, "md5_digest": "4ca20f99e461688ae43c8730d0255b01", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7492, "upload_time": "2018-01-27T15:32:46", "url": "https://files.pythonhosted.org/packages/a6/1d/ce6e430f5bf304c77c76da2c4f4d2a5c511e11a7dffed68ec5c59e79a47f/kant-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "44c48f86399c48877831f6a4b2ab78a2", "sha256": "47a1ad5f8cbb35cd3e7024b4ce71d8540b1a91cf923548eee181413525a3e929" }, "downloads": -1, "filename": "kant-1.0.4.tar.gz", "has_sig": false, "md5_digest": "44c48f86399c48877831f6a4b2ab78a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7423, "upload_time": "2018-01-27T15:39:54", "url": "https://files.pythonhosted.org/packages/12/9f/8ec645e42f8d905c97008a41d7c0e245bdb0b1e8ae5e0723bc723d081734/kant-1.0.4.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "db678ecf91f7cad9d3c4c68f16672c02", "sha256": "003df5d280eefa89dccc6c40a7d3d246f610b3ab5d354e073d39558f60a4245f" }, "downloads": -1, "filename": "kant-1.1.0.tar.gz", "has_sig": false, "md5_digest": "db678ecf91f7cad9d3c4c68f16672c02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7414, "upload_time": "2018-01-29T18:14:27", "url": "https://files.pythonhosted.org/packages/6a/11/ffcb142d1873cf05f7d5d07616ea7627332db8dd65ecc0d029579b3ccbb2/kant-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "4264cd62b4d03fe7483f2933cbe9d36c", "sha256": "40786c4b001224e33ed4ba2000ab98affe57974b539848c88d4e6154c5147fba" }, "downloads": -1, "filename": "kant-1.1.1.tar.gz", "has_sig": false, "md5_digest": "4264cd62b4d03fe7483f2933cbe9d36c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7434, "upload_time": "2018-01-29T19:06:42", "url": "https://files.pythonhosted.org/packages/b3/a2/b450264f29c4c1b78e4302ba2e63941804ed1193c4d7f0105fb3cdcbf001/kant-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "74ebb6d8292ab0eedbfe8f0d5999b7b4", "sha256": "ae112768e689680ae309c6792a3369fae983e32f63f791d57cd63d23e2476a0a" }, "downloads": -1, "filename": "kant-1.1.2.tar.gz", "has_sig": false, "md5_digest": "74ebb6d8292ab0eedbfe8f0d5999b7b4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7437, "upload_time": "2018-01-29T19:34:43", "url": "https://files.pythonhosted.org/packages/45/19/67db7548c416b869cb838366822c8f53334b3397e4bfb2cceb7b28c11ba3/kant-1.1.2.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "65d0f809c6d16c7c461a2fc290ea4b41", "sha256": "9eae7a06357d98249bbb4542f94eb4e26d090a1c5f8535793a27513300eb3dcb" }, "downloads": -1, "filename": "kant-2.0.0.tar.gz", "has_sig": false, "md5_digest": "65d0f809c6d16c7c461a2fc290ea4b41", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8975, "upload_time": "2018-02-08T22:54:56", "url": "https://files.pythonhosted.org/packages/d1/6d/e0b2691a21c77894aa60470cb178be5346403e58c44e269d0d955b5cf90e/kant-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "196873dc8cb7e27783c4dd6e56f74dba", "sha256": "de5d473b3a991991a4592122a56106d2af2348ee614d2aa7b17e56bf5ef19668" }, "downloads": -1, "filename": "kant-2.0.1.tar.gz", "has_sig": false, "md5_digest": "196873dc8cb7e27783c4dd6e56f74dba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8979, "upload_time": "2018-02-09T16:55:51", "url": "https://files.pythonhosted.org/packages/a7/f5/199d9360793a3f896cf91b452b2f3ec50e9e26b1edcf36011030b03fe5d8/kant-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "6d4c365645f14f354ff2c51e81bd08af", "sha256": "1ad59d960b25547d37826f314bd0580f85f439be1215b7c1d1e019d71cabc721" }, "downloads": -1, "filename": "kant-2.0.2.tar.gz", "has_sig": false, "md5_digest": "6d4c365645f14f354ff2c51e81bd08af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8999, "upload_time": "2018-02-09T18:16:41", "url": "https://files.pythonhosted.org/packages/bc/35/7909e7d9e28c362c3daab90c978bf054ed8a296de752bf0ed82ed425cec3/kant-2.0.2.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "c71be7ba34b74eaa6169ddacc864d51a", "sha256": "7ceac36edfeddb8ab55fefc0d8853dcf03d0c89bb594c2d069cd556e5c5d3075" }, "downloads": -1, "filename": "kant-2.1.0.tar.gz", "has_sig": false, "md5_digest": "c71be7ba34b74eaa6169ddacc864d51a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9008, "upload_time": "2018-02-16T17:26:16", "url": "https://files.pythonhosted.org/packages/b6/08/c104b9c0170b676b24c21100695271fff7853c56bb18ea3792b88f373cf9/kant-2.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c71be7ba34b74eaa6169ddacc864d51a", "sha256": "7ceac36edfeddb8ab55fefc0d8853dcf03d0c89bb594c2d069cd556e5c5d3075" }, "downloads": -1, "filename": "kant-2.1.0.tar.gz", "has_sig": false, "md5_digest": "c71be7ba34b74eaa6169ddacc864d51a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9008, "upload_time": "2018-02-16T17:26:16", "url": "https://files.pythonhosted.org/packages/b6/08/c104b9c0170b676b24c21100695271fff7853c56bb18ea3792b88f373cf9/kant-2.1.0.tar.gz" } ] }