{ "info": { "author": "G\u00fcnther Jena", "author_email": "guenther@jena.at", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "===================\nPython RevisionDict\n===================\n\n.. image:: https://img.shields.io/pypi/v/revisiondict.svg\n :target: https://pypi.python.org/pypi/revisiondict\n\n.. image:: https://img.shields.io/travis/semiversus/python-revisiondict.svg\n :target: https://travis-ci.org/semiversus/python-revisiondict\n\n.. image:: https://codecov.io/gh/semiversus/python-revisiondict/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/semiversus/python-revisiondict\n\n.. image:: https://img.shields.io/github/license/semiversus/python-revisiondict.svg\n :target: https://en.wikipedia.org/wiki/MIT_License\n\nRevisionDict works like an ordinary dictionary with additional revision keeping of changes. It remembers the order when\nkeys were *updated* (in contrast to the ``OrderedDict`` which is remembering the order when keys are *inserted*).\n\nIt is revision tracking the overall dictionary, but does not store each earlier value for each key in the dictionary.\nIt's basically answering the following questions:\n\n* What is the actual revision number?\n* What changed since revsion number *N*?\n* In which revision has value of key *K* changed the last time?\n\nUse `RevisionDict` to build caching systems, interface multiple clients to a common database,\npublish/subscribe systems,...\n\nAdditional functionality compared to ``dict()``:\n\n* ``.revision`` - returning the actual revision as integer (starting with 0)\n* ``.base_revision`` - revision before oldest item changed (or 0 on empty dict)\n* ``.key_to_revision(key)`` - return the revision when the given key was changed\n* ``.checkout(start=0)`` - return a dict with changes since ``start``\n\nInstall\n-------\n\n.. code-block:: bash\n\n pip install revisiondict\n\nExample\n-------\n\n.. code::python\n\n>>> d=RevisionDict()\n>>> d.revision # get revision (is 0 at init)\n0\n>>> d.base_revision # get revision before oldest change\n0\n\nAdding new items:\n\n.. code::python\n\n>>> d['a']=0; d['b']=1; d['c']=2 # make three updates\n>>> d.revision # showing 3 changes\n3\n>>> d.base_revision # get revision before oldest change\n0\n\nInspecting content of RevisionDict:\n\n.. code::python\n\n>>> d.checkout()=={'a': 0, 'b': 1, 'c': 2} # get a dictionary with all changes\nTrue\n>>> d.checkout(2) # get all changes starting with rev. 2\n{'c': 2}\n>>> d.checkout(3) # all changes starting with actual revision\n{}\n>>> d.key_to_revision('b') # revision where 'b' was changed last time\n2\n>>> d\nRevisionDict([_Item(key='a', value=0, revision=1), _Item(key='b', value=1, revision=2), _Item(key='c', value=2, revision=3)])\n\nUpdate items:\n\n.. code::python\n\n>>> d['a']=3 # update value of 'a' (was 0 before)\n>>> d.revision\n4\n>>> d.base_revision\n1\n>>> d.key_to_revision('a')\n4\n>>> d.checkout(3) # get all changes starting with rev. 3\n{'a': 3}\n>>> tuple(d.keys()) # iterate over keys (ordered by time of update)\n('b', 'c', 'a')\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/semiversus/python-revisiondict", "keywords": "dict revision versioning", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "revisiondict", "package_url": "https://pypi.org/project/revisiondict/", "platform": "", "project_url": "https://pypi.org/project/revisiondict/", "project_urls": { "Homepage": "https://github.com/semiversus/python-revisiondict" }, "release_url": "https://pypi.org/project/revisiondict/0.2.3/", "requires_dist": null, "requires_python": "", "summary": "RevisionDict works like an ordinary dictionary with additional revision keeping of changes.", "version": "0.2.3" }, "last_serial": 3902062, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "19ef692a7011a1ed7714353a25e56fed", "sha256": "f7dbd963bc19c15dd2a3fad0bffe54bf12719ab7001f93e07c78de545d8f046b" }, "downloads": -1, "filename": "revisiondict-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "19ef692a7011a1ed7714353a25e56fed", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5716, "upload_time": "2018-03-25T01:26:42", "url": "https://files.pythonhosted.org/packages/a2/45/d2981d0ebd4465099a82887aaa11d419ee50d16c44ca87f3628e004c80fc/revisiondict-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "420eb4ba53fbd29f5e4b275717715827", "sha256": "d7065837290fb9a59ae4d1e0e7d2f0f2f66f808712c220523850c64648498768" }, "downloads": -1, "filename": "revisiondict-0.1.1.tar.gz", "has_sig": false, "md5_digest": "420eb4ba53fbd29f5e4b275717715827", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15221, "upload_time": "2018-03-25T01:26:43", "url": "https://files.pythonhosted.org/packages/16/37/7c6165b8cac5414a254a80e54177ece32b8dff1cd477b8364ca3ad6e1431/revisiondict-0.1.1.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "41d12960b71f1ddd00d3f3e4db674b03", "sha256": "7a4f95747dfd40afb27be9c7f554c8325263c3e63277eeb517139208b4e7ab55" }, "downloads": -1, "filename": "revisiondict-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "41d12960b71f1ddd00d3f3e4db674b03", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4315, "upload_time": "2018-04-23T18:33:30", "url": "https://files.pythonhosted.org/packages/01/5d/48722c845f8045705c31ed3ba6420b2f2647f38822672546825a8555c05e/revisiondict-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "40610976de5bbebeb0353ccb6f65d692", "sha256": "eaabffc979e8320de474bf47c80ce28f32cbb9049184be9f22ad825a187a4ab5" }, "downloads": -1, "filename": "revisiondict-0.2.1.tar.gz", "has_sig": false, "md5_digest": "40610976de5bbebeb0353ccb6f65d692", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12282, "upload_time": "2018-04-23T18:33:31", "url": "https://files.pythonhosted.org/packages/ef/cf/17b792b9bc2ade19d13b72e69a7cedb310e3ff438aaadf838a30cc24090b/revisiondict-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "a2ba3494e4210033065c124ea89bd517", "sha256": "80a3354c6faf07c28e92183e7bd8aa4a8bfb2de11d022a97acb8318e85c08784" }, "downloads": -1, "filename": "revisiondict-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a2ba3494e4210033065c124ea89bd517", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4314, "upload_time": "2018-05-04T21:09:59", "url": "https://files.pythonhosted.org/packages/38/f5/c5e6c0036b7857ce75f2b03ca44cfdc0c35ea6746ad3960d542c45e50020/revisiondict-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef3b7ef807f94e9f1d7e7a6bf48f036c", "sha256": "0b0031e823927f71cacebc2bc7b7f9a79512922ce3ed3e3c9383f74a5a2df1b2" }, "downloads": -1, "filename": "revisiondict-0.2.2.tar.gz", "has_sig": false, "md5_digest": "ef3b7ef807f94e9f1d7e7a6bf48f036c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12308, "upload_time": "2018-05-04T21:10:03", "url": "https://files.pythonhosted.org/packages/ea/b0/44979997117d17fd3519d20c20869d53e7b479cc630abd031e3d0dd2e78c/revisiondict-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "67d502bb7d022928f2bdf4bee04b1e4e", "sha256": "41cbb5d9fc98de62eec78f0de4024064bfa9fa5b2d77270fe75d6fb62d3e08c9" }, "downloads": -1, "filename": "revisiondict-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "67d502bb7d022928f2bdf4bee04b1e4e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4527, "upload_time": "2018-05-26T20:22:41", "url": "https://files.pythonhosted.org/packages/5e/30/56750318d66e272fcb39f840ffb6a1c3516a20522d1a15836e02e290bb2a/revisiondict-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36c38d07d6deec3299912f988e7b49e7", "sha256": "c21ce3c75712ca95819017aac4bd24f97ca9311e3fd3e2d9f66b5707eed4a9d6" }, "downloads": -1, "filename": "revisiondict-0.2.3.tar.gz", "has_sig": false, "md5_digest": "36c38d07d6deec3299912f988e7b49e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4359, "upload_time": "2018-05-26T20:22:42", "url": "https://files.pythonhosted.org/packages/e3/02/4b58b7efcd06a9175529f8c12f8f191008b3ca4c5d0a644fcabc1f02b7df/revisiondict-0.2.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "67d502bb7d022928f2bdf4bee04b1e4e", "sha256": "41cbb5d9fc98de62eec78f0de4024064bfa9fa5b2d77270fe75d6fb62d3e08c9" }, "downloads": -1, "filename": "revisiondict-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "67d502bb7d022928f2bdf4bee04b1e4e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4527, "upload_time": "2018-05-26T20:22:41", "url": "https://files.pythonhosted.org/packages/5e/30/56750318d66e272fcb39f840ffb6a1c3516a20522d1a15836e02e290bb2a/revisiondict-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36c38d07d6deec3299912f988e7b49e7", "sha256": "c21ce3c75712ca95819017aac4bd24f97ca9311e3fd3e2d9f66b5707eed4a9d6" }, "downloads": -1, "filename": "revisiondict-0.2.3.tar.gz", "has_sig": false, "md5_digest": "36c38d07d6deec3299912f988e7b49e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4359, "upload_time": "2018-05-26T20:22:42", "url": "https://files.pythonhosted.org/packages/e3/02/4b58b7efcd06a9175529f8c12f8f191008b3ca4c5d0a644fcabc1f02b7df/revisiondict-0.2.3.tar.gz" } ] }