{ "info": { "author": "Jim Fulton", "author_email": "jim@zope.com", "bugtrack_url": null, "classifiers": [ "Framework :: ZODB", "Intended Audience :: Developers", "License :: OSI Approved :: Zope Public License" ], "description": "Second-generation demo storage\n==============================\n\nThe zc.demostorage2 module provides a storage implementation that\nwraps two storages, a base storage and a storage to hold changes.\nThe base storage is never written to. All new records are written to\nthe changes storage. Both storages are expected to:\n\n- Use packed 64-bit unsigned integers as object ids,\n\n- Allocate object ids sequentially, starting from 0, and\n\n- in the case of the changes storage, accept object ids assigned externally.\n\nIn addition, it is assumed that less than 2**63 object ids have been\nallocated in the first storage. \n\nNote that DemoStorage also assumes that it's base storage uses 64-bit\nunsigned integer object ids allocated sequentially.\n\n.. contents::\n\nChange History\n--------------\n\n0.1.1 (2008-02-07)\n******************\n\nFixed a packaging bug that caused some files to be omitted.\n\n0.1 (2008-02-04)\n****************\n\nInitial release.\n\nConfiguration\n-------------\n\nThe section below shows how to create zc.demostorage2 storages from\nPython. If you're using ZConfig, you need to:\n\n- import zc.demostroage2\n\n- include a demostroage2 section\n\nHere's an example that shows how to configure demo storage and how to\nuse the configuration from python:\n\n >>> import ZODB.config\n >>> storage = ZODB.config.storageFromString(\"\"\"\n ... \n ... %import zc.demostorage2\n ... \n ... \n ... \n ... path base.fs\n ... \n ... \n ... path changes.fs\n ... \n ... \n ... \"\"\")\n\nThis creates a demo storage that gets base data from a file storage\nnamed base.fs and stores changes in a file storage named changes.fs.\n\n >>> storage\n \n\n >>> storage.close()\n\nDemo (doctest)\n--------------\n\nNote that most people will configure the storage through ZConfig. If\nyou are one of those people, you may want to stop here. :) The\nexamples below show you how to use the storage from Python, but they\nalso exercise lots of details you might not be interested in.\n\nTo see how this works, we'll start by creating a base storage and\nputing an object (in addition to the root object) in it:\n\n >>> from ZODB.FileStorage import FileStorage\n >>> base = FileStorage('base.fs')\n >>> from ZODB.DB import DB\n >>> db = DB(base)\n >>> from persistent.mapping import PersistentMapping\n >>> conn = db.open()\n >>> conn.root()['1'] = PersistentMapping({'a': 1, 'b':2})\n >>> import transaction\n >>> transaction.commit()\n >>> db.close()\n >>> import os\n >>> original_size = os.path.getsize('base.fs')\n\nNow, lets reopen the base storage in read-only mode:\n\n >>> base = FileStorage('base.fs', read_only=True)\n\nAnd open a new storage to store changes:\n\n >>> changes = FileStorage('changes.fs')\n\nand combine the 2 in a demofilestorage:\n\n >>> from zc.demostorage2 import DemoStorage2\n >>> storage = DemoStorage2(base, changes)\n\nIf there are no transactions, the storage reports the lastTransaction\nof the base database:\n\n >>> storage.lastTransaction() == base.lastTransaction()\n True\n\nLet's add some data:\n\n >>> db = DB(storage)\n >>> conn = db.open()\n >>> items = conn.root()['1'].items()\n >>> items.sort()\n >>> items\n [('a', 1), ('b', 2)]\n\n >>> conn.root()['2'] = PersistentMapping({'a': 3, 'b':4})\n >>> transaction.commit()\n\n >>> conn.root()['2']['c'] = 5\n >>> transaction.commit()\n\nHere we can see that we haven't modified the base storage:\n\n >>> original_size == os.path.getsize('base.fs')\n True\n\nBut we have modified the changes database:\n\n >>> len(changes)\n 2\n\nOur lastTransaction reflects the lastTransaction of the changes:\n\n >>> storage.lastTransaction() > base.lastTransaction()\n True\n\n >>> storage.lastTransaction() == changes.lastTransaction()\n True\n\nLet's walk over some of the methods so ewe can see how we delegate to\nthe new oderlying storages:\n\n >>> from ZODB.utils import p64, u64\n >>> storage.load(p64(0), '') == changes.load(p64(0), '')\n True\n >>> storage.load(p64(0), '') == base.load(p64(0), '')\n False\n >>> storage.load(p64(1), '') == base.load(p64(1), '')\n True\n\n >>> serial = base.getTid(p64(0))\n >>> storage.loadSerial(p64(0), serial) == base.loadSerial(p64(0), serial)\n True\n\n >>> serial = changes.getTid(p64(0))\n >>> storage.loadSerial(p64(0), serial) == changes.loadSerial(p64(0),\n ... serial)\n True\n\nThe object id of the new object is quite large:\n\n >>> u64(conn.root()['2']._p_oid)\n 4611686018427387905L\n\nLet's look at some other methods:\n\n >>> storage.getName()\n 'DemoStorage2(base.fs, changes.fs)'\n\n >>> storage.sortKey() == changes.sortKey()\n True\n\n >>> storage.getSize() == changes.getSize()\n True\n \n >>> len(storage) == len(changes)\n True\n\n \nUndo methods are simply copied from the changes storage:\n\n >>> [getattr(storage, name) == getattr(changes, name)\n ... for name in ('supportsUndo', 'undo', 'undoLog', 'undoInfo')\n ... ]\n [True, True, True, True]\n\n\nDownload\n--------", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "UNKNOWN", "keywords": null, "license": "ZPL 2.1", "maintainer": null, "maintainer_email": null, "name": "zc.demostorage2", "package_url": "https://pypi.org/project/zc.demostorage2/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/zc.demostorage2/", "project_urls": { "Download": "UNKNOWN", "Homepage": "UNKNOWN" }, "release_url": "https://pypi.org/project/zc.demostorage2/0.1.3/", "requires_dist": null, "requires_python": null, "summary": "ZODB storage that stores changes relative to a base storage", "version": "0.1.3" }, "last_serial": 802170, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "61421fd5bf4daf4ae7b83354fae13257", "sha256": "92374cd8b9f58cd3b31468f21dbc0ad36ac8f330d8171c2a22710414bd4c4d90" }, "downloads": -1, "filename": "zc.demostorage2-0.1.0.tar.gz", "has_sig": false, "md5_digest": "61421fd5bf4daf4ae7b83354fae13257", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7432, "upload_time": "2008-02-04T18:35:37", "url": "https://files.pythonhosted.org/packages/0f/9c/95750a424f958350711f195b820a4fee72e9cf8c9d8b50e26c373f4215eb/zc.demostorage2-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "419af124a0974fad427fb563326dbba9", "sha256": "6edd988e5963a5235db4981fe2cd14a30985527e642b32dd822e5dea09efbf86" }, "downloads": -1, "filename": "zc.demostorage2-0.1.1.tar.gz", "has_sig": false, "md5_digest": "419af124a0974fad427fb563326dbba9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6941, "upload_time": "2008-02-07T18:15:04", "url": "https://files.pythonhosted.org/packages/24/4f/14886cc84f444eb72ea2e4e2ee3e750a26f2e4674a9ae6e06d38c9ee23b3/zc.demostorage2-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "f70d357efdef81e7c1d3d5622da3a504", "sha256": "0a9ca7327aaaeceffce36d469e405fd078695653d84b4a1697efece687f35076" }, "downloads": -1, "filename": "zc.demostorage2-0.1.2.tar.gz", "has_sig": false, "md5_digest": "f70d357efdef81e7c1d3d5622da3a504", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6976, "upload_time": "2008-03-25T15:24:54", "url": "https://files.pythonhosted.org/packages/96/12/1d675b74577c1d5137061b26f0ef79ff1e498658c0d787bf331e245a3857/zc.demostorage2-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "4066c73c6c335b8010c5807ce48d87e7", "sha256": "536edbb810684d3fec69d4b97468dc04e90c3d4be2428f4862f5cacb2027d9da" }, "downloads": -1, "filename": "zc.demostorage2-0.1.3.tar.gz", "has_sig": false, "md5_digest": "4066c73c6c335b8010c5807ce48d87e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6997, "upload_time": "2008-05-22T15:18:45", "url": "https://files.pythonhosted.org/packages/f9/d1/0fc856ac24721bfa0195134988274a1a0c63c5ab5ca1ab9ca385ec175e98/zc.demostorage2-0.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4066c73c6c335b8010c5807ce48d87e7", "sha256": "536edbb810684d3fec69d4b97468dc04e90c3d4be2428f4862f5cacb2027d9da" }, "downloads": -1, "filename": "zc.demostorage2-0.1.3.tar.gz", "has_sig": false, "md5_digest": "4066c73c6c335b8010c5807ce48d87e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6997, "upload_time": "2008-05-22T15:18:45", "url": "https://files.pythonhosted.org/packages/f9/d1/0fc856ac24721bfa0195134988274a1a0c63c5ab5ca1ab9ca385ec175e98/zc.demostorage2-0.1.3.tar.gz" } ] }