{ "info": { "author": "Bert Blommers", "author_email": "info@bertblommers.nl", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries", "Topic :: Utilities" ], "description": "# dynamodb-migrator \n[![Build Status](https://travis-ci.org/bblommers/dynamodb-migrator.svg?branch=master)](https://travis-ci.org/bblommers/dynamodb-migrator)\n[![Coverage Status](https://coveralls.io/repos/github/bblommers/dynamodb-migrator/badge.svg?branch=master)](https://coveralls.io/github/bblommers/dynamodb-migrator?branch=master)\n[![PyPI version](https://badge.fury.io/py/dynamodb-migrator.svg)](https://badge.fury.io/py/dynamodb-migrator)\n\nA library that helps you create and migrate DynamoDB databases.\n\nAs performant DynamoDB is, that does come with the trade-off of being inflexible. Changing column names or adding secondary indexes is impossible. \nThe recommended approach is to create a new table with the desired properties, and migrate the existing data. \nThis library will help you do just that.\n\n ## Usage\n - Write a migration script\n - Execute the migration script as a step in the build pipeline\n - Add to the migration-script as required\n\n## Example Script\n```python\nfrom migrator.dynamodb_migrator import Migrator\nmigrator = Migrator()\n@migrator.version(1)\n@migrator.create(AttributeDefinitions=[{'AttributeName': 'hash_key', 'AttributeType': 'N'}],\n TableName='my_new_table',\n KeySchema=[{'AttributeName': 'hash_key', 'KeyType': 'HASH'}],\n BillingMode='PAY_PER_REQUEST')\ndef v1(created_table):\n print(\"Table created using the kwargs provided\")\n print(\"Note that the keyword-args are passed onto boto as is\")\n print(created_table)\n\n\n@migrator.version(2)\n@migrator.add_index(AttributeDefinitions=[{'AttributeName': 'postcode', 'AttributeType': 'S'}],\n LocalSecondaryIndexes=[{'IndexName': 'string',\n 'KeySchema': [{'AttributeName': 'customer_nr', 'KeyType': 'HASH'},\n {'AttributeName': 'postcode', 'KeyType': 'RANGE'}],\n 'Projection': {'ProjectionType': 'ALL'}}])\ndef v2(created_table):\n print(\"Created a new table with the new index\")\n print(\"Created a DynamoDB stream that sends all updates to the old table to a custom Lambda-function\")\n print(\"The custom Lambda-function sends all updates to the new table\")\n print(created_table)\n\n\n@NotYetImplemented\n@migrator.version(3)\n@migrator.delete_table(\"first_table\")\ndef v3(migrate):\n print(\"About to delete table\")\n print(\"Ensure that all upstream applications point to the new table, before adding this part to the pipeline!\")\n migrate()\n print(\"Table deleted\")\n\n\n@NotYetImplemented\n@migrator.version(4)\n@migrator.convert(lambda item -> {'id': translate(item.id)})\ndef v4(migrate):\n print(\"About to:\")\n print(\" - Create new table (first_table_v4)\")\n print(\" - Create a AWS Lambda script that will execute the above lambda, and write the result int he new table\")\n print(\" - Create DynamoDB Stream on 'first_table' that triggers the new Lambda\")\n print(\" - Execute a script that automatically updates all existing data\")\n print(\" (This will trigger all data in 'first_table' to be converted and copied into the new table\")\n migrate()\n print(\"Table with new data is ready to use\")\n\n```\n\n## Examples\nSee the [examples](examples)-folder.\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/bblommers/dynamodb-migrator", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "dynamodb-migrator", "package_url": "https://pypi.org/project/dynamodb-migrator/", "platform": "", "project_url": "https://pypi.org/project/dynamodb-migrator/", "project_urls": { "Homepage": "https://github.com/bblommers/dynamodb-migrator" }, "release_url": "https://pypi.org/project/dynamodb-migrator/0.0.8/", "requires_dist": [ "tenacity" ], "requires_python": ">=3.6", "summary": "Library that helps you create and migrate DynamoDB databases", "version": "0.0.8", "yanked": false, "yanked_reason": null }, "last_serial": 6776712, "releases": { "0.0.2": [ { "comment_text": "", "digests": { "md5": "85c62c70ade484a5abae743aaf1009d1", "sha256": "6f1cabc3cddfbd0f2d2673be659bfd7211974469922c685f900f1e910d6bd44a" }, "downloads": -1, "filename": "dynamodb_migrator-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "85c62c70ade484a5abae743aaf1009d1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6097, "upload_time": "2019-09-27T09:29:36", "upload_time_iso_8601": "2019-09-27T09:29:36.466805Z", "url": "https://files.pythonhosted.org/packages/00/9b/e62cdf1d831bddea60dd0d379f5d10b94467ee596ed66353b02b5cc8dd55/dynamodb_migrator-0.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5d6ca9b3ac17011b02c731c81b4bbc02", "sha256": "8d7c5f76f915b9b02e94a97303ffdba695a8cbb2e3ed7053f76854a3379ab276" }, "downloads": -1, "filename": "dynamodb-migrator-0.0.2.tar.gz", "has_sig": false, "md5_digest": "5d6ca9b3ac17011b02c731c81b4bbc02", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3848, "upload_time": "2019-09-27T09:29:39", "upload_time_iso_8601": "2019-09-27T09:29:39.134773Z", "url": "https://files.pythonhosted.org/packages/5b/5c/f63717a83cc4e2bdc6ad001c4942a8f3016847f959da4fcd5e9906cf6ecc/dynamodb-migrator-0.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "ff8ca9e7957f2c83650e19bf3f9932c2", "sha256": "9b28f4a0c4f1607eaabad3129574a61c6346c1a25ef0a497efdaade0cd5ba4d3" }, "downloads": -1, "filename": "dynamodb_migrator-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "ff8ca9e7957f2c83650e19bf3f9932c2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5832, "upload_time": "2019-10-28T10:29:36", "upload_time_iso_8601": "2019-10-28T10:29:36.499646Z", "url": "https://files.pythonhosted.org/packages/0f/67/0b32dda283b80629e8f6ece0df0e283daa38039d22709e3680e9d690120a/dynamodb_migrator-0.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "137ba6fc7533fa537519ef1071db564d", "sha256": "0e2fe70e04e3481fdb8109789517f59a126532472df57028c4db65744a43da71" }, "downloads": -1, "filename": "dynamodb-migrator-0.0.3.tar.gz", "has_sig": false, "md5_digest": "137ba6fc7533fa537519ef1071db564d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3640, "upload_time": "2019-10-28T10:29:38", "upload_time_iso_8601": "2019-10-28T10:29:38.168005Z", "url": "https://files.pythonhosted.org/packages/06/fa/7c47643a6503401a315b4c75b83d41ae164d4785915911fc41914b45c439/dynamodb-migrator-0.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "f759e281dc2bad2056913153232943b9", "sha256": "878d8b13129e2d15f9eca373334b5f41e874dde76a66567f32f9f8f2adbc4600" }, "downloads": -1, "filename": "dynamodb_migrator-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "f759e281dc2bad2056913153232943b9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 12474, "upload_time": "2019-10-28T10:59:28", "upload_time_iso_8601": "2019-10-28T10:59:28.306716Z", "url": "https://files.pythonhosted.org/packages/87/a3/e66cadb4edcf08617db680da463e8c80bed091834fc6e3f7c5b7a2c33000/dynamodb_migrator-0.0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "1e040973dfe2dd2003eed9ae804d67bb", "sha256": "53927702140cb95a9bb62f75e1219e98b884413075909b69a21ac74d3953f356" }, "downloads": -1, "filename": "dynamodb-migrator-0.0.4.tar.gz", "has_sig": false, "md5_digest": "1e040973dfe2dd2003eed9ae804d67bb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6958, "upload_time": "2019-10-28T10:59:30", "upload_time_iso_8601": "2019-10-28T10:59:30.071343Z", "url": "https://files.pythonhosted.org/packages/c0/e3/406cbabcad286a069e638e75e0e568481933c3b1a301ca854e31db3a44be/dynamodb-migrator-0.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "0c953193cd4355d6f00c584e6d442dc2", "sha256": "31e5fa94b2cc1cfc988d07de758671e46ff1ce4c3039a361ac728575248bcf81" }, "downloads": -1, "filename": "dynamodb_migrator-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "0c953193cd4355d6f00c584e6d442dc2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14474, "upload_time": "2019-12-10T08:51:22", "upload_time_iso_8601": "2019-12-10T08:51:22.385676Z", "url": "https://files.pythonhosted.org/packages/ae/78/e5b503a2fa12a2a13c53c96e5e27655b9e2228a3ca7605a62df55782fbf9/dynamodb_migrator-0.0.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4eade1b05c24d833270812b311138d70", "sha256": "1262370669a841361e7cb1f4e0c00109e681767bc20f88802624f53c83e847f5" }, "downloads": -1, "filename": "dynamodb-migrator-0.0.5.tar.gz", "has_sig": false, "md5_digest": "4eade1b05c24d833270812b311138d70", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8292, "upload_time": "2019-12-10T08:51:24", "upload_time_iso_8601": "2019-12-10T08:51:24.140620Z", "url": "https://files.pythonhosted.org/packages/2f/6e/b322adaaf2a91101e1692519dac6ce15c4def6c5d3a4537280149721280b/dynamodb-migrator-0.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "61a0358307b627fc8d589ffc6802a9c9", "sha256": "82e38a8a23600cba94bed1f1e94b108a8238763d17e990285b56b4b99894268c" }, "downloads": -1, "filename": "dynamodb_migrator-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "61a0358307b627fc8d589ffc6802a9c9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14486, "upload_time": "2019-12-10T09:03:25", "upload_time_iso_8601": "2019-12-10T09:03:25.257076Z", "url": "https://files.pythonhosted.org/packages/d1/07/2d8f0b3f402873adacdb905b90ac7fcef752419c24aac55b08d06caa74dc/dynamodb_migrator-0.0.6-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "527aac0a7e740bfbb26e9e339f5aadf0", "sha256": "0b8827d5df623d0ce5e06ae858f0443adc9da595ce5c3c0ae7a559d5bb010ec1" }, "downloads": -1, "filename": "dynamodb-migrator-0.0.6.tar.gz", "has_sig": false, "md5_digest": "527aac0a7e740bfbb26e9e339f5aadf0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8337, "upload_time": "2019-12-10T09:03:26", "upload_time_iso_8601": "2019-12-10T09:03:26.890423Z", "url": "https://files.pythonhosted.org/packages/ea/8e/266555b35c78e9922814fecc228896d26abe244323d01f00c3a2a6a9593a/dynamodb-migrator-0.0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "54500fa5302e08060fd231dace3efb67", "sha256": "c5deed7da67c76ce42a030fa564f5342dbc64fae1b0901639dc8539b11ddbe52" }, "downloads": -1, "filename": "dynamodb_migrator-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "54500fa5302e08060fd231dace3efb67", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 15166, "upload_time": "2019-12-14T08:44:27", "upload_time_iso_8601": "2019-12-14T08:44:27.486783Z", "url": "https://files.pythonhosted.org/packages/05/39/fe7305aa9df5fea4614827e171c9bb39680c55e5064c8fbc9413e50c2d24/dynamodb_migrator-0.0.7-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "139fe47bdc5d6b31e41434be745f95cf", "sha256": "c49246ee7673b717fb65805efb443db0c5ebae023d397e75ef26dff60d2658c6" }, "downloads": -1, "filename": "dynamodb-migrator-0.0.7.tar.gz", "has_sig": false, "md5_digest": "139fe47bdc5d6b31e41434be745f95cf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8821, "upload_time": "2019-12-14T08:44:29", "upload_time_iso_8601": "2019-12-14T08:44:29.030434Z", "url": "https://files.pythonhosted.org/packages/e7/3e/eaf52f467b6c1ba0ff87c9adcf1e57d36b04240737653906acef6072ee03/dynamodb-migrator-0.0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "69f827ef7f86e8d0538d5af07e9be902", "sha256": "df91e6717fa7494c8362641e0168395911b4a543bb6c3ab839d6032a09f66b4b" }, "downloads": -1, "filename": "dynamodb_migrator-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "69f827ef7f86e8d0538d5af07e9be902", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 16089, "upload_time": "2020-03-09T12:36:20", "upload_time_iso_8601": "2020-03-09T12:36:20.479698Z", "url": "https://files.pythonhosted.org/packages/79/99/b6c400cd54bed60181039723b17e467cd88cc25177da48f58070293d7d13/dynamodb_migrator-0.0.8-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0e29b61477ea40c2a09cc583fbd65355", "sha256": "1c5d1470c7b58089d2356c930c4ce4da3ae9169fbdab9abd5c895f1c6365da8d" }, "downloads": -1, "filename": "dynamodb-migrator-0.0.8.tar.gz", "has_sig": false, "md5_digest": "0e29b61477ea40c2a09cc583fbd65355", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 9583, "upload_time": "2020-03-09T12:36:22", "upload_time_iso_8601": "2020-03-09T12:36:22.221430Z", "url": "https://files.pythonhosted.org/packages/e9/96/be752d01579455eab70bbc375b42d2e955fc52462204313551a6e0eca050/dynamodb-migrator-0.0.8.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "69f827ef7f86e8d0538d5af07e9be902", "sha256": "df91e6717fa7494c8362641e0168395911b4a543bb6c3ab839d6032a09f66b4b" }, "downloads": -1, "filename": "dynamodb_migrator-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "69f827ef7f86e8d0538d5af07e9be902", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 16089, "upload_time": "2020-03-09T12:36:20", "upload_time_iso_8601": "2020-03-09T12:36:20.479698Z", "url": "https://files.pythonhosted.org/packages/79/99/b6c400cd54bed60181039723b17e467cd88cc25177da48f58070293d7d13/dynamodb_migrator-0.0.8-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0e29b61477ea40c2a09cc583fbd65355", "sha256": "1c5d1470c7b58089d2356c930c4ce4da3ae9169fbdab9abd5c895f1c6365da8d" }, "downloads": -1, "filename": "dynamodb-migrator-0.0.8.tar.gz", "has_sig": false, "md5_digest": "0e29b61477ea40c2a09cc583fbd65355", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 9583, "upload_time": "2020-03-09T12:36:22", "upload_time_iso_8601": "2020-03-09T12:36:22.221430Z", "url": "https://files.pythonhosted.org/packages/e9/96/be752d01579455eab70bbc375b42d2e955fc52462204313551a6e0eca050/dynamodb-migrator-0.0.8.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }