{ "info": { "author": "Tres Seaver, Agendaless Consulting, Inc.", "author_email": "tseaver@agendaless.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Zope Public License", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "``appendonly`` README\n=====================\n\nThis package provides a set of data structures for use in ZODB applications\nwhere standard BTrees are poor fits for an application's requirements.\n\nIn particular, these data structures are designed to minimize conflict\nerrors when doing frequent \"append\" operations to queues and stacks.\n\n\n``appendonly.AppendStack``\n--------------------------\n\nThis class provides a LIFO stack of separately-persisted objects:\n\n- The stack manages a set of \"layer\" objects, with a configurable limit\n on the number of layers. Each layer has a configurable maximum length,\n and a sequential generation number.\n\n- The stack appends items to most recent layer until the layer is filled;\n it then adds a new layer.\n\n- If the number of layers then exceeds the configured maximum, the stack\n pruneds the oldest layer(s) to conform to that limit.\n\n- When pruning, the stack calls an application-supplied callback for\n archiving / cleanup of the pruned layer.\n\n- Iteration over the stack yields (generation, index, object) tuples.\n in reverse order to that in which the objects were appended.\n\nThe stack is implemented as a single persistent record, with custom\nZODB conflict resolution code.\n\n\n``appendonly.Archive``\n----------------------\n\nThis class provides a linked list of separately-persisted copies of layer\ndata pruned from an ``AppendStack``. The intended use would be something\nlike::\n\n from appendonly import AppendStack\n from appendonly import Archive\n\n class RecentItems(object):\n def __init__(self):\n self._recent = AppendStack()\n self._archive = Archive()\n\n def pushItem(object):\n self._stack.push(object, self._archive.addLayer)\n\n def __iter__(self):\n for generation, index, item in self._stack:\n yield item\n for generation, index, item in self._archive:\n yield items\n\n\n``appendonly.Accumulator``\n--------------------------\n\nThis class provides a list-like data structure, where the only mutations\nallowed are to append to or clear the list. Intended uses are for a\nset of pending operations / changes / notifications, which get processed\nas a unit (at which point the accumulator is cleared).\n\n\n``appendonly`` Changelog\n========================\n\n1.2 (2014-12-28)\n----------------\n\n- Add support for Python 3.4.\n\n- Make ``ZODB`` dependency unconditional, now that it fully supports Py3k.\n\n- Add support for testing on Travis.\n\n1.1 (2013-11-28)\n----------------\n\n- Add ``Accumulator.extend`` method to enhance list-ness.\n\n- Add support for PyPy.\n\n- Add support for Python 3.2 / 3.3.\n\n1.0.1 (2013-02-25)\n------------------\n\n- Fix brown-bag in 1.0 release (``Accumulator.append`` changes were not\n persisted).\n\n1.0 (2013-02-25)\n----------------\n\n- Add a conflict-free 'Accumulator' class: manages a queue of items which\n can be iterated, appended to, or conumed entirely (no partial / pop).\n\n- Automate tests for supported Python versions via 'tox'.\n\n- Drop support for Python 2.4 / 2.5.\n\n\n0.10 (2012-02-21)\n------------------\n\n- Add an 'Archive' class, intended to support long-term storage of the\n layer data pruned from an 'AppendStack'.\n\n\n0.9 (2010-08-09)\n----------------\n\n- Initial public release.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "UNKNOWN", "keywords": "zodb", "license": "ZPL", "maintainer": null, "maintainer_email": null, "name": "appendonly", "package_url": "https://pypi.org/project/appendonly/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/appendonly/", "project_urls": { "Download": "UNKNOWN", "Homepage": "UNKNOWN" }, "release_url": "https://pypi.org/project/appendonly/1.2/", "requires_dist": null, "requires_python": null, "summary": "Persistent append-only data structures.", "version": "1.2" }, "last_serial": 1362927, "releases": { "0.10": [ { "comment_text": "", "digests": { "md5": "5e2383bc8b21960cb4ab21a2278d58b6", "sha256": "f704ce234f769a3b7985e7ecc0a93197a5fac4ce806d895016aa2bc295c57962" }, "downloads": -1, "filename": "appendonly-0.10.tar.gz", "has_sig": false, "md5_digest": "5e2383bc8b21960cb4ab21a2278d58b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8777, "upload_time": "2012-02-21T22:57:14", "url": "https://files.pythonhosted.org/packages/e8/d0/79531306aad99f0e75b7c67cc91c545c069f298cf3577b6b79dc752e3c11/appendonly-0.10.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "a059079d322b2d2ffaa2e7313f4aac12", "sha256": "4c67924909836786a819821faa0f6df76c074da049c44e97f690466d70a7625a" }, "downloads": -1, "filename": "appendonly-0.9.tar.gz", "has_sig": false, "md5_digest": "a059079d322b2d2ffaa2e7313f4aac12", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7493, "upload_time": "2010-08-09T18:51:00", "url": "https://files.pythonhosted.org/packages/78/77/c398489f3404700a17ecd9b8a27837364ecbf783bd7a2b1183e774c199c8/appendonly-0.9.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "33107e46e3ff0a375d120050dff1dff6", "sha256": "543084d1e452dacc073a948d78b0c4340ada58275a491309d5d1062b89e6a24c" }, "downloads": -1, "filename": "appendonly-1.0.tar.gz", "has_sig": false, "md5_digest": "33107e46e3ff0a375d120050dff1dff6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10747, "upload_time": "2013-02-25T21:53:41", "url": "https://files.pythonhosted.org/packages/59/a3/6c41192ddc606edc6dd9d5aa7a028c440118b34dcd11f77ee2ba1bf7fd84/appendonly-1.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "5e5990fd1b3a0d5325a09a61dc4bc3c6", "sha256": "e5db03b27a42eba59d89d5853f6ddcb8401d02aca373b90b3d70cb0472805f1b" }, "downloads": -1, "filename": "appendonly-1.0.1.tar.gz", "has_sig": false, "md5_digest": "5e5990fd1b3a0d5325a09a61dc4bc3c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10838, "upload_time": "2013-02-25T23:52:59", "url": "https://files.pythonhosted.org/packages/e2/2e/ab49fd4af42384ca8705bba0ab8053136b2eeebd857a464776a7bfc867f3/appendonly-1.0.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "55ccc4b4eb0387688eafde15de7b450a", "sha256": "30e057e2ec8917491112fd32146695f82597de2f171ff4c1977d5ca604196a60" }, "downloads": -1, "filename": "appendonly-1.2.tar.gz", "has_sig": false, "md5_digest": "55ccc4b4eb0387688eafde15de7b450a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11807, "upload_time": "2014-12-28T19:32:03", "url": "https://files.pythonhosted.org/packages/3a/43/542e9ef723a09c1f11fe4f18bd4057bbdc2b117579125b936ebe271d23ad/appendonly-1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "55ccc4b4eb0387688eafde15de7b450a", "sha256": "30e057e2ec8917491112fd32146695f82597de2f171ff4c1977d5ca604196a60" }, "downloads": -1, "filename": "appendonly-1.2.tar.gz", "has_sig": false, "md5_digest": "55ccc4b4eb0387688eafde15de7b450a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11807, "upload_time": "2014-12-28T19:32:03", "url": "https://files.pythonhosted.org/packages/3a/43/542e9ef723a09c1f11fe4f18bd4057bbdc2b117579125b936ebe271d23ad/appendonly-1.2.tar.gz" } ] }