{ "info": { "author": "Lex Scarisbrick", "author_email": "lex@scarisbrick.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Rollback\n========\n\nThis is a simple Pythonic mechanism for rolling back multiple operations in a predictable way, usable as a `context manager`_ or a standalone instance (see `Example usage`_). By default, errors are re-raised, but an explicit mode or call *must* be supplied to trigger a rollback. Valid modes are:\n\n- ``onError`` Boolean when ``True`` will roll back if an error is\n raised\n- ``onSuccess`` Boolean when ``True`` will roll back if an error is\n *not* raised\n\nBoth modes can be set to ``True`` to always rollback. A rollback can also be triggered manually by calling ``doRollback``. Note that multiple calls to ``doRollback`` will only call the rollback steps once.\n\nErrors can be supressed by setting ``raiseError`` to ``False``. Note that errors from rollback steps will not be surpressed, regardless of the ``raiseError`` setting.\n\nIf a rollback is triggered, each step is called in a last in, first out order (LIFO). That is, the most recently added step is called first, the first step is called last.\n\nCompatibility\n~~~~~~~~~~~~~\n\nRollback was tested with the following versions of Python:\n\n- 3.7.4\n- 3.6.9\n- 3.5.7\n- 3.4.10\n- 3.3.7\n- 2.7.16\n- 2.6.9\n\nInstallation\n~~~~~~~~~~~~\n\nInstall from source:\n\n::\n\n python setup.py install\n\nInstall from PyPI:\n\n::\n\n pip install rollback\n\nExample usage\n~~~~~~~~~~~~~\n\n.. code:: python\n\n from __future__ import print_function\n\n from rollback import Rollback\n\n # *always* rollback after exiting block, letting any error be re-raised\n with Rollback(onError=True, onSuccess=True) as rollback:\n print('do a1')\n rollback.addStep(print, 'undo a1')\n print('do a2')\n rollback.addStep(print, 'undo a2')\n\n # rollback *only* if *no* error is raised, letting any error be re-raised\n with Rollback(onSuccess=True) as rollback:\n print('do b1')\n rollback.addStep(print, 'undo b1')\n print('do b2')\n rollback.addStep(print, 'undo b2')\n\n # rollback manually\n with Rollback() as rollback:\n print('do c1')\n rollback.addStep(print, 'undo c1')\n print('do c2')\n rollback.addStep(print, 'undo c2')\n rollback.doRollback()\n\n # rollback *only* if an error is raised, suppressing the error\n with Rollback(onError=True, raiseError=False) as rollback:\n print('do d1')\n rollback.addStep(print, 'undo d1')\n print('do d2')\n rollback.addStep(print, 'undo d2')\n raise RuntimeError('this is not re-raised')\n\n # rollback *only* if an error is raised, letting the error be re-raised\n with Rollback(onError=True) as rollback:\n print('do e1')\n rollback.addStep(print, 'undo e1')\n print('do e2')\n rollback.addStep(print, 'undo e2')\n raise RuntimeError('this is re-raised')\n\nProduces output:\n\n::\n\n do a1\n do a2\n undo a2\n undo a1\n do b1\n do b2\n undo b2\n undo b1\n do c1\n do c2\n undo c2\n undo c1\n do d1\n do d2\n undo d2\n undo d1\n do e1\n do e2\n undo e2\n undo e1\n Traceback (most recent call last):\n File \"example.py\", line 41, in \n raise RuntimeError('this is re-raised')\n RuntimeError: this is re-raised\n\n.. _context manager: https://docs.python.org/3/reference/datamodel.html#with-statement-context-managers\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/lexsca/rollback", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "rollback", "package_url": "https://pypi.org/project/rollback/", "platform": "", "project_url": "https://pypi.org/project/rollback/", "project_urls": { "Homepage": "https://github.com/lexsca/rollback" }, "release_url": "https://pypi.org/project/rollback/1.0.7/", "requires_dist": null, "requires_python": "", "summary": "Simple rollback mechanism", "version": "1.0.7" }, "last_serial": 5532593, "releases": { "1.0.4": [ { "comment_text": "", "digests": { "md5": "1db3548c6a1e18ab568393502b0a8ff7", "sha256": "3ea7a30e566d07415f9756512b8ddebe49e6eebf55e8e48e29fdc5ab15eb2a08" }, "downloads": -1, "filename": "rollback-1.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1db3548c6a1e18ab568393502b0a8ff7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3110, "upload_time": "2017-04-14T19:07:49", "url": "https://files.pythonhosted.org/packages/00/08/e53a99e7e1a2ef2753d290ceb5c48777b4705379e9c6a0937d6b8e469e26/rollback-1.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "184000c4af93fffc240f7d2665f2c453", "sha256": "289997072df1d8825b293c5bec6513d2af6054f17f8edd19757abf8e9f9b609f" }, "downloads": -1, "filename": "rollback-1.0.4.tar.gz", "has_sig": false, "md5_digest": "184000c4af93fffc240f7d2665f2c453", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1925, "upload_time": "2017-04-14T19:07:50", "url": "https://files.pythonhosted.org/packages/12/61/b15d0487ec7cacff066f804db22f7b7ecda79feca2956c259db415f7e289/rollback-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "0d2048ba689fe9628428c7db6b8d180c", "sha256": "20fd1a3fbc8c3081d9eeebb648c1940a688b3660e15da0243a1bf39eeea3a2eb" }, "downloads": -1, "filename": "rollback-1.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0d2048ba689fe9628428c7db6b8d180c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3113, "upload_time": "2017-04-20T01:10:08", "url": "https://files.pythonhosted.org/packages/fd/f2/c1f64e524de2460bec483e52f46fb0ca41f80dab3d570bf5930499e15ce4/rollback-1.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f018fe82b8ec2f34a6a8a5dde100e484", "sha256": "91762a667f128af77de912059584250ab8c3f749c20dc7702de73b1860343271" }, "downloads": -1, "filename": "rollback-1.0.5.tar.gz", "has_sig": false, "md5_digest": "f018fe82b8ec2f34a6a8a5dde100e484", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1944, "upload_time": "2017-04-20T01:10:10", "url": "https://files.pythonhosted.org/packages/b2/df/609e7e2d6c41ec709c8b502cc257ae46f390e8edbed13410d582f1f02f79/rollback-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "7544c7b7fb409f3d4c8fcf79b36b4261", "sha256": "250cc4aa89e73e9c02e5b277e86aa741f999d64a78042c2ad8ae0fd20384636f" }, "downloads": -1, "filename": "rollback-1.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7544c7b7fb409f3d4c8fcf79b36b4261", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5450, "upload_time": "2017-04-23T15:05:24", "url": "https://files.pythonhosted.org/packages/34/cc/02f086a39c471350be0e5cfff355984a2507e04f80873ccdefa6ce84866b/rollback-1.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "df6900f0f3c6728b4609b9f57671758d", "sha256": "89c91ab38310469725d21f0bf1e0f331f854d448fefac2a66b2b621af360698a" }, "downloads": -1, "filename": "rollback-1.0.6.tar.gz", "has_sig": false, "md5_digest": "df6900f0f3c6728b4609b9f57671758d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3523, "upload_time": "2017-04-23T15:05:26", "url": "https://files.pythonhosted.org/packages/1a/b4/4f58b3e18cf03fcab3f927d410e5111babbc5f456b2cc71dfe57c5a78c49/rollback-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "b632a92dac1ea5346205c67c03632b3d", "sha256": "3942cb8e0a4a3348cca880908b13b578b566b1b0d52ed902a9cf31a636536eef" }, "downloads": -1, "filename": "rollback-1.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b632a92dac1ea5346205c67c03632b3d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4342, "upload_time": "2019-07-15T00:21:06", "url": "https://files.pythonhosted.org/packages/32/6e/62162c0886e50bc41c67b85413979b7489eafaca88531f21631548a9239d/rollback-1.0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fbb2d885161447ae4d6795fe80b70de9", "sha256": "2f99868417e1b26d88057ce7ef54fea700bfd33ac60c214d50a87ba5a623f72b" }, "downloads": -1, "filename": "rollback-1.0.7.tar.gz", "has_sig": false, "md5_digest": "fbb2d885161447ae4d6795fe80b70de9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3459, "upload_time": "2019-07-15T00:21:08", "url": "https://files.pythonhosted.org/packages/7d/f3/1af38c51f2d10eb67cfc22c6bf52450e977174cbc66c16580c544f650957/rollback-1.0.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b632a92dac1ea5346205c67c03632b3d", "sha256": "3942cb8e0a4a3348cca880908b13b578b566b1b0d52ed902a9cf31a636536eef" }, "downloads": -1, "filename": "rollback-1.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b632a92dac1ea5346205c67c03632b3d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4342, "upload_time": "2019-07-15T00:21:06", "url": "https://files.pythonhosted.org/packages/32/6e/62162c0886e50bc41c67b85413979b7489eafaca88531f21631548a9239d/rollback-1.0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fbb2d885161447ae4d6795fe80b70de9", "sha256": "2f99868417e1b26d88057ce7ef54fea700bfd33ac60c214d50a87ba5a623f72b" }, "downloads": -1, "filename": "rollback-1.0.7.tar.gz", "has_sig": false, "md5_digest": "fbb2d885161447ae4d6795fe80b70de9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3459, "upload_time": "2019-07-15T00:21:08", "url": "https://files.pythonhosted.org/packages/7d/f3/1af38c51f2d10eb67cfc22c6bf52450e977174cbc66c16580c544f650957/rollback-1.0.7.tar.gz" } ] }