{ "info": { "author": "AXANT", "author_email": "tech@axant.it", "bugtrack_url": null, "classifiers": [], "description": "About tgext.evolve\n==================\n\ntgext.evolve is a TurboGears2 extension for generic migrations and evolutions.\n\ntgext.evolve *is safe to be used in multiprocessing and multithreading environments*\nas it relies on a distributed lock on your database to perform evolutions.\n\nDuring the evolution period the application will respond with a **503** status code,\nfeel free to configure TurboGears to trap it and use your ErrorController to provide\na custom page.\n\nInstalling\n----------\n\ntgext.evolve can be installed from pypi::\n\n pip install tgext.evolve\n\nshould just work for most of the users.\n\nEnabling\n--------\n\nTo enable tgext.evolve put inside your application\n``config/app_cfg.py`` the following::\n\n import tgext.evolve\n tgext.evolve.plugme(base_config, options={\n 'evolutions': [\n # ... Your evolutions ...\n ]\n })\n\nor you can use ``tgext.pluggable`` when available::\n\n from tgext.pluggable import plug\n plug(base_config, 'tgext.evolve', evolutions=[\n # ... Your evolutions ...\n ])\n\ntgext.evolve can then be disabled using the ``tgext.evolve.enabled = false``\noption in your configuration files. This is often the case during test suites.\n\nUsing Evolutions\n----------------\n\nEvolutions are a subclass of ``tgext.evolve.Evolution`` that\nmust provide an ``evolution_id`` property and an ``evolve()``\nmethod.\n\nHere is a sample evolution that does not much apart waiting for 10 seconds::\n\n import time\n from tgext.evolve import Evolution\n\n class TestEvolution1(Evolution):\n evolution_id = 'test_evolution_1'\n\n def evolve(self):\n time.sleep(10)\n\nPlease note that in case you modify data or touch the database\nthrough ``model.DBSession`` or other manners you must ``flush``\nand ``commit`` your UnitOfWork and Transaction yourself as evolutions\nare performed outside the transaction manager in a separated thread.\n\nThen you can register your evolution with something like::\n\n from tgext.pluggable import plug\n plug(base_config, 'tgext.evolve', evolutions=[\n TestEvolution1\n ])\n\nIn case your evolution requires parameters you can register an\ninstance of it instead of registering the class.\n\n.. note::\n\n There is no opposite to the ``evolve()`` method as there is no\n guarantee that evolutions are reversible. In case you need\n reversible migrations for database schemas please use a\n schema migration framework.\n\nChangeLog\n---------\n\n0.0.5\n~~~~~\n\n* small bugfix and deprecation gardening\n\n0.0.4\n~~~~~\n\n* small Python3 compatibility fixes\n\n0.0.3\n~~~~~\n\n* Experimental support for SQLAlchemy, tested on SQLite and MySQL.\n\n0.0.2\n~~~~~\n\n* Allow disabling tgext.evolve using ``tgext.evolve.enabled = False`` in `.ini` files.\n\n0.0.1\n~~~~~\n\n* First release with only MongoDB/Ming support.\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/axant/tgext.evolve", "keywords": "turbogears2.extension", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "tgext.evolve", "package_url": "https://pypi.org/project/tgext.evolve/", "platform": "", "project_url": "https://pypi.org/project/tgext.evolve/", "project_urls": { "Homepage": "https://github.com/axant/tgext.evolve" }, "release_url": "https://pypi.org/project/tgext.evolve/0.0.5/", "requires_dist": null, "requires_python": "", "summary": "Manages automatic updates and evolutions which are better suited outside schema migrations", "version": "0.0.5" }, "last_serial": 4469080, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "f4caa446f95ef2311e7470fa198658a5", "sha256": "6e6f40d1dba0a150e4a1ea46dc46fcd6ea2ec087c893bdee1bc9f6fc7066c796" }, "downloads": -1, "filename": "tgext.evolve-0.0.1.tar.gz", "has_sig": false, "md5_digest": "f4caa446f95ef2311e7470fa198658a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4619, "upload_time": "2015-08-25T12:17:38", "url": "https://files.pythonhosted.org/packages/a1/be/5fe985f447dc45149d334b027d41e75ac3906dffe5b325a5e8ba83a4b872/tgext.evolve-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "9126f119b23a2b5f8cee6c793f82ea92", "sha256": "e21a90901be47f2eedf83ffa48dfb5d7747e5070558d3093ec6b2fbb12e8b41f" }, "downloads": -1, "filename": "tgext.evolve-0.0.2.tar.gz", "has_sig": false, "md5_digest": "9126f119b23a2b5f8cee6c793f82ea92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4867, "upload_time": "2015-08-31T19:30:16", "url": "https://files.pythonhosted.org/packages/32/ac/8dbb6a6e011d24437b5aeafaa547719e072a786008e45a523672c65e35d8/tgext.evolve-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "9e9ea468dc952fb881f6812b381f456a", "sha256": "184f41d117a4d6bf189cd1bbeeb674de805bdcbfee33bf3cd999e586019e4f57" }, "downloads": -1, "filename": "tgext.evolve-0.0.3.tar.gz", "has_sig": false, "md5_digest": "9e9ea468dc952fb881f6812b381f456a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5272, "upload_time": "2015-09-16T12:15:59", "url": "https://files.pythonhosted.org/packages/b7/6e/2a6488592c561a389ab9b2fbbeb20b907813e2f7b1fe8338311afb993a2b/tgext.evolve-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "142cf5a1f401694ffcec6623e48cbd49", "sha256": "9cbc3f3a537a0ce5954d29dd7503eda11660b4a80732f1e53691eeff80a0d2bf" }, "downloads": -1, "filename": "tgext.evolve-0.0.4.tar.gz", "has_sig": false, "md5_digest": "142cf5a1f401694ffcec6623e48cbd49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5244, "upload_time": "2017-10-23T18:49:20", "url": "https://files.pythonhosted.org/packages/e5/c5/1ad09567725a9744fa90cd7f9b52dfcd91d2ea23633b28031fb89b30bef9/tgext.evolve-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "22803e3b7b9e3cb3032446b2af335b49", "sha256": "d6dc8f03999df622572a2f617359e87e296de79d6734bc3fcc963a318b6b913b" }, "downloads": -1, "filename": "tgext.evolve-0.0.5.tar.gz", "has_sig": false, "md5_digest": "22803e3b7b9e3cb3032446b2af335b49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5331, "upload_time": "2018-11-09T11:34:14", "url": "https://files.pythonhosted.org/packages/83/85/d28be8baac973968add302e5ca3379747b8ca74d42ca479c0d8a16d2e3a9/tgext.evolve-0.0.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "22803e3b7b9e3cb3032446b2af335b49", "sha256": "d6dc8f03999df622572a2f617359e87e296de79d6734bc3fcc963a318b6b913b" }, "downloads": -1, "filename": "tgext.evolve-0.0.5.tar.gz", "has_sig": false, "md5_digest": "22803e3b7b9e3cb3032446b2af335b49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5331, "upload_time": "2018-11-09T11:34:14", "url": "https://files.pythonhosted.org/packages/83/85/d28be8baac973968add302e5ca3379747b8ca74d42ca479c0d8a16d2e3a9/tgext.evolve-0.0.5.tar.gz" } ] }