{ "info": { "author": "Ross Patterson", "author_email": "me@rpatterson.net", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "========================================\nExperimental ZODB Broken Object Handling\n========================================\n\nWARNING! This package is highly experimental and should not be used\nby anyone but experts in the inner workings of the ZCA and the ZODB\nand it should never be used in production.\n\nThe handling of broken objects by the ZODB can make an application\nwith add-ons that use zope.interface far too fragile. If marker\ninterfaces from an add-on are used on objects in the ZODB, removing\nthat add-on can make any zope.interface operation on that object fail.\nEven worse, if an add-on registers any components in a registry in the\nZODB, that entire registry will become unusable for any ZCA\noperations.\n\nSince the interfaces and the ZCA are often core parts of an\napplication using the ZODB, it may be appropriate to add special\nhandling for broken objects to those services.The patches included in\nthis package attempt to do just that.\n\nFor objects in the ZODB which directly provide a marker interface,\nthese patches allow that object to behave as without the application\nof the marker interface if the interface is no longer available. If\nthe interface is made available again, the full behavior of that\ninterface is restored. Similarly, if a component whose class,\nprovided interface, or required interfaces are missing, these patches\nallow the registry to perform lookups it would have been able to do\nwithout the broken component registration. If the component\nclass, provided interface, and required interfaces are restored,\nthen the component registration is fully restored. If an object or\nregistry in the ZODB is committed to the ZODB with broken interfaces\nor components, the commit will succeed and it is still possible to\nfully restore previous behavior if the missing classes and interfaces\nare restored.\n\nThe one exception is when the class of a *non-persistent* component\nregistered in a persistent registry is removed, the registry cannot be\nsuccessfully committed back to the ZODB. IOW, if your persistent\nregistry contains a registration for a component whose base classes do\n*not* include persistent.Persistent, then you'll be able to *use* the\nregistry but you won't be able to make any changes to the registry\nwithout first removing the broken component registration.\n\nThe intention of this package is to see if the implementation of\nbroken object handling is correct and robust enough to merge into\nzope.interface and zope.component themselves. IOW, when this code is\nfound to be robust enough to use more widely, this package won't be\nthe home for it. So once again, unless you are a senior Zope\ndeveloper, do not use these patches.\n\nIf you want to try this package out, work only on a copy of your ZODB,\nnever on the live data, and simply add this package to your instance's\neggs. It uses z3c.autoinclude to automatically apply the patches\nunder a Plone instance.\n\n\nChangelog\n=========\n\n0.7 - 2019-02-15\n----------------\n\n- Fix broken release upload.\n [rpatterson]\n\n0.6 - 2019-02-15\n----------------\n\n- Plone: Cleanup portlet types from code which has been removed.\n [rpatterson]\n\n- Tolerate empty ZODB.broken class cache.\n [rossp]\n\n- Fix broken class check, tolerate ExtensionClass as is the case in a\n Zope2 application.\n [rossp]\n\n0.5 - 2011-11-07\n----------------\n\n- Update ZCML to include newer patches.\n [rossp]\n\n0.4 - 2011-11-07\n----------------\n\n- Fix ZODB.broken.Broken pickling so that non-persistent component\n registrations don't interfere with committing changes to a\n persistent registry.\n [rossp]\n\n0.3 - 2011-11-07\n----------------\n\n- Pickle broken interfaces in such a way that they can be unpickled\n without this package being installed.\n [rossp]\n\n- Fix component registrations such that they can be used to unregister\n broken registrations.\n [rossp]\n\n\n0.2 - 2011-11-06\n----------------\n\n- Add configure.zcml and z3c.autoinclude support for applying the\n patches under Plone.\n [rossp]\n\n\n0.1 - 2011-11-06\n----------------\n\n- Initial release.\n [rossp]\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rpatterson/experimental.broken", "keywords": "", "license": "ZPL", "maintainer": "", "maintainer_email": "", "name": "experimental.broken", "package_url": "https://pypi.org/project/experimental.broken/", "platform": "", "project_url": "https://pypi.org/project/experimental.broken/", "project_urls": { "Homepage": "https://github.com/rpatterson/experimental.broken" }, "release_url": "https://pypi.org/project/experimental.broken/0.7/", "requires_dist": null, "requires_python": "", "summary": "Better ZODB handling of broken interfaces and components", "version": "0.7" }, "last_serial": 4827309, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "4b14d127d6607da57f2fc015e2beb895", "sha256": "401d6c7e9e750786794cc5e18ecfa4140d65d39a1181096fef47a8e62262ff2a" }, "downloads": -1, "filename": "experimental.broken-0.1.tar.gz", "has_sig": false, "md5_digest": "4b14d127d6607da57f2fc015e2beb895", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5784, "upload_time": "2011-11-07T08:08:13", "url": "https://files.pythonhosted.org/packages/1f/7c/cda5eb4f18913e3cca24f5f493a60af5ff6b2ae68ae27120e3a4c305503d/experimental.broken-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "2dc9d9b79de3519f49af901e18237828", "sha256": "5e1a3fb1387bc89c75d907c2fb3505d4ba6a28a52abbd404f31fbc4013f98fd2" }, "downloads": -1, "filename": "experimental.broken-0.2.tar.gz", "has_sig": false, "md5_digest": "2dc9d9b79de3519f49af901e18237828", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6271, "upload_time": "2011-11-07T08:38:17", "url": "https://files.pythonhosted.org/packages/78/63/ab44b4f20cfcf34963f3d9771634234be96c3e2c89a5cae7366e3e9f7128/experimental.broken-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "1aecb03f88f83a00d7f169672f8cbadc", "sha256": "10bb9078c77a38131f5c4beded48be8dc06c0320f8f4e1cf73cb7455863fdf5b" }, "downloads": -1, "filename": "experimental.broken-0.3.tar.gz", "has_sig": false, "md5_digest": "1aecb03f88f83a00d7f169672f8cbadc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7600, "upload_time": "2011-11-07T20:53:04", "url": "https://files.pythonhosted.org/packages/ad/ab/d91f7a0abe50223e46de59f6541bbeffac5485130c54f23c063121e39859/experimental.broken-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "259d3a30a22cb85bace0a73ef8b8d803", "sha256": "f8b906c02b8e8655000daacd688275e675165e8d49fafbefd165d94f6226e30f" }, "downloads": -1, "filename": "experimental.broken-0.4.tar.gz", "has_sig": false, "md5_digest": "259d3a30a22cb85bace0a73ef8b8d803", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7933, "upload_time": "2011-11-07T23:03:10", "url": "https://files.pythonhosted.org/packages/79/93/49f3e08104b5d95fe675f3582b53a8f2e75e4634aef25dc56c9adc9b4c30/experimental.broken-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "fe84e3880aa9379f75371b4971d7914a", "sha256": "e07ec792653d245d5cd4cba4cfde8fe32326b8677b942d71dc3c1159de782740" }, "downloads": -1, "filename": "experimental.broken-0.5.tar.gz", "has_sig": false, "md5_digest": "fe84e3880aa9379f75371b4971d7914a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7997, "upload_time": "2011-11-07T23:36:28", "url": "https://files.pythonhosted.org/packages/c1/60/7a82b32e86b54fb1ef277d926e4a3e03bdf4d1c8541621756305fa26803c/experimental.broken-0.5.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "e1d13e49671ae93ec03429cba2fc2556", "sha256": "7ba5ac9298f73667a7cf58f4f18bb5091882e672b1f014c496f0808c2a56de70" }, "downloads": -1, "filename": "experimental.broken-0.7.tar.gz", "has_sig": false, "md5_digest": "e1d13e49671ae93ec03429cba2fc2556", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8381, "upload_time": "2019-02-15T23:04:22", "url": "https://files.pythonhosted.org/packages/11/44/96afb439d03bb606a41b9a9d2cdc98dd1ad26aaeb819acd2f07fa376cfa0/experimental.broken-0.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e1d13e49671ae93ec03429cba2fc2556", "sha256": "7ba5ac9298f73667a7cf58f4f18bb5091882e672b1f014c496f0808c2a56de70" }, "downloads": -1, "filename": "experimental.broken-0.7.tar.gz", "has_sig": false, "md5_digest": "e1d13e49671ae93ec03429cba2fc2556", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8381, "upload_time": "2019-02-15T23:04:22", "url": "https://files.pythonhosted.org/packages/11/44/96afb439d03bb606a41b9a9d2cdc98dd1ad26aaeb819acd2f07fa376cfa0/experimental.broken-0.7.tar.gz" } ] }