{ "info": { "author": "Chris Brantley", "author_email": "", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Dynamatic\n\nDynamatic is a python library for working with DynamoDB. It is NOT an ORM. It sits somewhere between the low-level [boto3](https://github.com/boto/boto3) library (on which Dynamatic is based) and high-level ORMs like [PynamoDB](https://github.com/pynamodb/PynamoDB).\n\n## Motivation\n\nFirst, I was inspired by [this blog post](https://www.trek10.com/blog/dynamodb-single-table-relational-modeling/) which was inspired by [this excellent re:Invent 2018 session by Rick Houlihan](https://youtu.be/HaEPXoXVf2k) about how to properly model data in DynamoDB for efficiency and scale.\n\nSecond, I did not want an ORM. ORMs like PynamoDB package their own methods of defining object schemas but there are already excellent libraries out there like [Pydantic](https://github.com/samuelcolvin/pydantic) or [Marshmallow](https://github.com/marshmallow-code/marshmallow). They also tend to impose traditional relational database patterns (like Active Record) that do not scale well.\n\nThird, boto3 is a great library but its DynamoDB API is painfully low-level and not particularly \"Pythonic\". Working with advanced features like [Update Expressions](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html) and [Projection Expressions](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ProjectionExpressions.html) is complex and unintutive.\n\nSo this library aims to be a happy medium: Providing enough abstraction and \"developer ergonomics\" to get up and running with DynamoDB quickly, while not getting in the way with high-level ORM features.\n\n## Installation\n\nDynamatic requires Python 3.6 or later. You can install it via pip.\n\n```bash\npip install dynamatic\n```\n\n## Usage\n\nTODO! Documentation and usage examples coming soon!\n\n## Contributing\n\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\n\nPlease make sure to update tests as appropriate.\n\n## License\n\n[MIT](https://choosealicense.com/licenses/mit/)\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/chrisbrantley/dynamatic", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "dynamatic", "package_url": "https://pypi.org/project/dynamatic/", "platform": "", "project_url": "https://pypi.org/project/dynamatic/", "project_urls": { "Homepage": "https://github.com/chrisbrantley/dynamatic" }, "release_url": "https://pypi.org/project/dynamatic/1.0.0b5/", "requires_dist": [ "boto3 (>=1.9)" ], "requires_python": ">=3.6", "summary": "A DynamoDB library based on boto3", "version": "1.0.0b5", "yanked": false, "yanked_reason": null }, "last_serial": 7546419, "releases": { "1.0.0b1": [ { "comment_text": "", "digests": { "md5": "3fdf6a7d022f7c8be81fbc697fd4dfb6", "sha256": "c436807c361ecec2a00a8e03995659406e426c1bc8221c699d1276d07afce8b4" }, "downloads": -1, "filename": "dynamatic-1.0.0b1-py3-none-any.whl", "has_sig": false, "md5_digest": "3fdf6a7d022f7c8be81fbc697fd4dfb6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 9778, "upload_time": "2019-10-25T15:41:07", "upload_time_iso_8601": "2019-10-25T15:41:07.243164Z", "url": "https://files.pythonhosted.org/packages/94/56/1aa19e7e388126bab0064d5caa709f0a165c3f189d76f0f2f9b0935559bb/dynamatic-1.0.0b1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "267e568bc12429d4e70349257ac61203", "sha256": "a7a99f1575d99d5f5653b2f34ebee74e226bcba740b74a63a8b6055f13b3ee96" }, "downloads": -1, "filename": "dynamatic-1.0.0b1.tar.gz", "has_sig": false, "md5_digest": "267e568bc12429d4e70349257ac61203", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7042, "upload_time": "2019-10-25T15:41:09", "upload_time_iso_8601": "2019-10-25T15:41:09.738348Z", "url": "https://files.pythonhosted.org/packages/0e/46/06fee42cefde3e3b72aaa318ead286dc9fdac0e38621b810f5e84f2ccf2e/dynamatic-1.0.0b1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.0b2": [ { "comment_text": "", "digests": { "md5": "3d41c5467f4187ad554ce2dfcdedb4a6", "sha256": "9329386ecda0e57d4d6b3f7f1255573f0fc71731c727170080e9f42975ab7a14" }, "downloads": -1, "filename": "dynamatic-1.0.0b2-py3-none-any.whl", "has_sig": false, "md5_digest": "3d41c5467f4187ad554ce2dfcdedb4a6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 9821, "upload_time": "2019-10-25T16:53:38", "upload_time_iso_8601": "2019-10-25T16:53:38.034795Z", "url": "https://files.pythonhosted.org/packages/e6/5d/74f36fe11bff495bec4f8e4f37465ef962a1e194e28558dbea6906827af4/dynamatic-1.0.0b2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "29b52067fbbe6170a556649b62375cac", "sha256": "34d62fde72b0371d22c9bd98676237104db04bc0f54ae8817dc1e5c2e1f6bab7" }, "downloads": -1, "filename": "dynamatic-1.0.0b2.tar.gz", "has_sig": false, "md5_digest": "29b52067fbbe6170a556649b62375cac", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7090, "upload_time": "2019-10-25T16:53:39", "upload_time_iso_8601": "2019-10-25T16:53:39.709928Z", "url": "https://files.pythonhosted.org/packages/f0/3e/b1bcbaa52e4c96b54fac10fecaa0318e54262766751fb20a38fda76f651c/dynamatic-1.0.0b2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.0b3": [ { "comment_text": "", "digests": { "md5": "759e16a829f795f2c584942580956492", "sha256": "84ae51219f5bfe6d572984c495d276d9c117b961b00ee362f9c56b0d833f6a70" }, "downloads": -1, "filename": "dynamatic-1.0.0b3-py3-none-any.whl", "has_sig": false, "md5_digest": "759e16a829f795f2c584942580956492", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 9830, "upload_time": "2019-10-25T19:00:24", "upload_time_iso_8601": "2019-10-25T19:00:24.768542Z", "url": "https://files.pythonhosted.org/packages/23/47/3dbd58b0b6aae61d8fb1b66c731473396866179fefc4020231b554bc4aa9/dynamatic-1.0.0b3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "eb5c6c8afc6c2d8b199aec4af33557e8", "sha256": "c61cec5de12581e98d08725ab969f48a2f17ad2b730ff846c9dbf08a9339075e" }, "downloads": -1, "filename": "dynamatic-1.0.0b3.tar.gz", "has_sig": false, "md5_digest": "eb5c6c8afc6c2d8b199aec4af33557e8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7104, "upload_time": "2019-10-25T19:00:27", "upload_time_iso_8601": "2019-10-25T19:00:27.176754Z", "url": "https://files.pythonhosted.org/packages/c7/e6/ea1fb99c8daf33940f34e5a7c34c790e5be2ea9e8a1a5e4fdd35a019f5cd/dynamatic-1.0.0b3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.0b4": [ { "comment_text": "", "digests": { "md5": "4940b69de56220ba620a0e7ea528aa1b", "sha256": "dbc53ef8adfaee6997897a5993f9353fe6fe41b5fb49b3c03665dc922dcabd92" }, "downloads": -1, "filename": "dynamatic-1.0.0b4-py3-none-any.whl", "has_sig": false, "md5_digest": "4940b69de56220ba620a0e7ea528aa1b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 9832, "upload_time": "2019-10-26T18:26:02", "upload_time_iso_8601": "2019-10-26T18:26:02.907685Z", "url": "https://files.pythonhosted.org/packages/41/85/3a76a68e3997242872d075601d2ebe41550fae0978eebabf2d8c882ee114/dynamatic-1.0.0b4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "3668316d96a930ad84a0778fc675b103", "sha256": "01e74444160a849836795d6e8beb19fdb4d51cc66315cab13fd11d475781e3ff" }, "downloads": -1, "filename": "dynamatic-1.0.0b4.tar.gz", "has_sig": false, "md5_digest": "3668316d96a930ad84a0778fc675b103", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7103, "upload_time": "2019-10-26T18:26:04", "upload_time_iso_8601": "2019-10-26T18:26:04.328504Z", "url": "https://files.pythonhosted.org/packages/59/94/5307aa013ea2ed57d04476a17a9414d0f9306a47b0fd87a8b6ad9386fc8e/dynamatic-1.0.0b4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.0b5": [ { "comment_text": "", "digests": { "md5": "f69e70e5e9a79589d05806b52a46df89", "sha256": "c905fd2ac5d8b5ae87c8b7447f9af5d618571e9991984fe5cd486022b8c0f23a" }, "downloads": -1, "filename": "dynamatic-1.0.0b5-py3-none-any.whl", "has_sig": false, "md5_digest": "f69e70e5e9a79589d05806b52a46df89", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 9865, "upload_time": "2020-06-23T20:45:06", "upload_time_iso_8601": "2020-06-23T20:45:06.130737Z", "url": "https://files.pythonhosted.org/packages/fb/30/afc5247ba144ce462bc20abf549bd70a6363cbfc3b2bbfd9230ed094fe04/dynamatic-1.0.0b5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "fb0f40851e9e6b91f7a0ce3c862db4b5", "sha256": "8ece6e549478908f742748c1adc0dd40e3a04bb754e66cf0004f5991bd571457" }, "downloads": -1, "filename": "dynamatic-1.0.0b5.tar.gz", "has_sig": false, "md5_digest": "fb0f40851e9e6b91f7a0ce3c862db4b5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7124, "upload_time": "2020-06-23T20:45:07", "upload_time_iso_8601": "2020-06-23T20:45:07.599854Z", "url": "https://files.pythonhosted.org/packages/46/4b/a5e6c3020095560e2313d46cd8d1e771ed0dcdb593d46ab9b3ba20f0986d/dynamatic-1.0.0b5.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f69e70e5e9a79589d05806b52a46df89", "sha256": "c905fd2ac5d8b5ae87c8b7447f9af5d618571e9991984fe5cd486022b8c0f23a" }, "downloads": -1, "filename": "dynamatic-1.0.0b5-py3-none-any.whl", "has_sig": false, "md5_digest": "f69e70e5e9a79589d05806b52a46df89", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 9865, "upload_time": "2020-06-23T20:45:06", "upload_time_iso_8601": "2020-06-23T20:45:06.130737Z", "url": "https://files.pythonhosted.org/packages/fb/30/afc5247ba144ce462bc20abf549bd70a6363cbfc3b2bbfd9230ed094fe04/dynamatic-1.0.0b5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "fb0f40851e9e6b91f7a0ce3c862db4b5", "sha256": "8ece6e549478908f742748c1adc0dd40e3a04bb754e66cf0004f5991bd571457" }, "downloads": -1, "filename": "dynamatic-1.0.0b5.tar.gz", "has_sig": false, "md5_digest": "fb0f40851e9e6b91f7a0ce3c862db4b5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7124, "upload_time": "2020-06-23T20:45:07", "upload_time_iso_8601": "2020-06-23T20:45:07.599854Z", "url": "https://files.pythonhosted.org/packages/46/4b/a5e6c3020095560e2313d46cd8d1e771ed0dcdb593d46ab9b3ba20f0986d/dynamatic-1.0.0b5.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }