{ "info": { "author": "Roger Ineichen,Stephan Richter and the Zope Community", "author_email": "zope3-dev@zope.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Zope3", "Intended Audience :: Developers", "License :: OSI Approved :: Zope Public License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "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 :: Implementation :: CPython", "Topic :: Internet :: WWW/HTTP" ], "description": "The ``z3c.breadcrumb`` package provides base classes for breadcrumb\nimplementations. It allows you to write adapters for each content object which\nprovides it's own rules for providing the breadcrumb name, url and selection.\n\n\nDetailed Documentation\n**********************\n\n======\nREADME\n======\n\nThe z3c.breadcrumb package provides base classes for breadcrumb\nimplementations. It allows you to write adapters for each content object which\nprovides it's own rule for providing the breadcrumb name, url and selection.\n\nLet's do some imports we will use later.\n\n >>> import zope.interface\n >>> import zope.component\n >>> from zope.publisher.interfaces.http import IHTTPRequest\n >>> from zope.publisher.browser import TestRequest\n >>> from zope.traversing.browser import absoluteURL\n >>> from zope.container import contained\n >>> from z3c.breadcrumb import interfaces\n >>> from z3c.breadcrumb import browser\n\n\nIBreadcrumb\n-----------\n\nLet's define a interface and a content object.\n\n >>> class IOffice(zope.interface.Interface):\n ... \"\"\"Office interface.\"\"\"\n\n >>> @zope.interface.implementer(IOffice)\n ... class Office(contained.Contained):\n ... def __init__(self, label):\n ... self.label = label\n ... self.activeURL = True\n\n >>> office = Office(u'Zope Foundation')\n >>> office.__name__ = u'ZF'\n\nThere is a generic breadcrumb implementation which is registered by\ndefault. If we do not implement a custom IBreadcrumb the generic adapter will\nreturn the ``title`` or ``__name__`` of the item. Let's register the default\nadapter, this is normally done in ``configure.zcml``:\n\n >>> zope.component.provideAdapter(browser.GenericBreadcrumb)\n\nAnd see what we get:\n\n >>> request = TestRequest()\n >>> breadcrumb = zope.component.getMultiAdapter((office, request),\n ... interfaces.IBreadcrumb)\n >>> breadcrumb.name\n u'ZF'\n\nWe can also implement a custom ``IBreadcrumb`` adapter and provide another\nname for the breadcrumb name:\n\n >>> @zope.interface.implementer(interfaces.IBreadcrumb)\n ... @zope.component.adapter(IOffice, IHTTPRequest)\n ... class BreadcrumbForOffice(object):\n ...\n ... def __init__(self, context, request):\n ... self.context = context\n ... self.request = request\n ...\n ... @property\n ... def name(self):\n ... return self.context.label\n ...\n ... @property\n ... def url(self):\n ... return absoluteURL(self.context, self.request)\n ...\n ... @property\n ... def activeURL(self):\n ... return self.context.activeURL\n\nLet's register the custom ``IBreadcrumb`` adapter for IOffice:\n\n >>> zope.component.provideAdapter(BreadcrumbForOffice)\n\nAnd check the new breadcrumb name:\n\n >>> breadcrumb = zope.component.getMultiAdapter((office, request),\n ... interfaces.IBreadcrumb)\n >>> breadcrumb.name\n u'Zope Foundation'\n\n\nCustomNameBreadcrumb\n--------------------\n\nLet's define another interface and a content object.\n\n >>> class IOfficeContainer(zope.interface.Interface):\n ... \"\"\"Container of offices.\"\"\"\n\n >>> @zope.interface.implementer(IOfficeContainer)\n ... class OfficeContainer(contained.Contained):\n ... pass\n\n >>> offices = OfficeContainer()\n >>> offices.__name__ = u'offices'\n\nIf the custom name for this kind of object is always the same it would quickly\nget tedious to write a full IBreadcrumb implementation. As a shortcut you\ncan use CustomNameBreadcrumb to get an adapter that acts like\nGenericBreadcrumb, but returns the name you want.\n\n >>> adapter = browser.CustomNameBreadcrumb(u'Offices')\n >>> adapter\n \n >>> zope.component.provideAdapter(adapter,\n ... adapts=(IOfficeContainer, IHTTPRequest))\n\n >>> breadcrumb = zope.component.getMultiAdapter((offices, request),\n ... interfaces.IBreadcrumb)\n >>> breadcrumb.name\n u'Offices'\n\n\nIBreadcrumbs\n------------\n\nThere is also a IBreadcrumbs adapter which knows how to collect breadcrumb\ninformations for each item he traverses. We need to setup a little bit of\ninfrastructure:\n\n >>> root = rootFolder\n >>> root['office'] = office\n\nRegister the IBreadcrumbs adapter:\n\n >>> zope.component.provideAdapter(browser.Breadcrumbs,\n ... (zope.interface.Interface, zope.interface.Interface),\n ... interfaces.IBreadcrumbs)\n\n\nNow we can collect breadcrumbs for our items. You can see the url is correct\nand the label ``Zope Foundation`` is collected by the custom IBreadcrumb\nadapter:\n\n >>> breadcrumbs = zope.component.getMultiAdapter((office, request),\n ... interfaces.IBreadcrumbs)\n >>> from pprint import pprint\n >>> pprint(list(breadcrumbs.crumbs))\n [{'activeURL': True,\n 'name': 'top',\n 'url': 'http://127.0.0.1'},\n {'activeURL': True,\n 'name': 'Zope Foundation',\n 'url': 'http://127.0.0.1/office'}]\n\n >>> breadcrumbs.__parent__ is office\n True\n\nDefault breadcrumbs stops on virtual host root\n\n >>> request._vh_root = office\n >>> pprint(list(breadcrumbs.crumbs))\n [{'activeURL': True,\n 'name': 'Zope Foundation',\n 'url': 'http://127.0.0.1'}]\n\nIf the breadcrumb of an item is a Null-adapter, then the item is ignored.\n\n >>> from zope.traversing.interfaces import IContainmentRoot\n >>> zope.component.provideAdapter(\n ... lambda c, r: None,\n ... (IContainmentRoot, IHTTPRequest),\n ... interfaces.IBreadcrumb)\n\n >>> request = TestRequest()\n >>> breadcrumbs = zope.component.getMultiAdapter(\n ... (office, request), interfaces.IBreadcrumbs)\n >>> pprint(list(breadcrumbs.crumbs))\n [{'activeURL': True,\n 'name': 'Zope Foundation',\n 'url': 'http://127.0.0.1/office'}]\n\n\n=======\nCHANGES\n=======\n\n2.0.0 (2015-11-09)\n------------------\n\n- Standardize namespace __init__\n\n\n2.0.0a1 (2013-02-27)\n--------------------\n\n- Added support for Python 3.3.\n\n- Moved ``zope.app.testing`` dependency to ``zope.site.testing``.\n\n- Moved ``zope.app.container`` dependency to ``zope.container``.\n\n- Replaced deprecated ``zope.interface.implements`` usage with equivalent\n ``zope.interface.implementer`` decorator.\n\n- Dropped support for Python 2.4 and 2.5.\n\n\n1.1.1 (2010-12-12)\n------------------\n\n- Added needed but not declated test dependency on ``zope.app.container``.\n\n- Using Python's ``doctest`` module instead of depreacted\n ``zope.testing.doctest``.\n\n1.1.0 (2009-05-29)\n------------------\n\n- Feature: Added ability to register a Null-adapter as a breadcrumb. A\n null-breadcrumb will cause the item not to be displayed in the breadcrumbs.\n\n1.0.3 (2008-12-13)\n------------------\n\n- Bug: Fixed ``IBreadcrumbs`` to match implementation.\n- Clean up dependencies.\n\n\n1.0.2 (2008-01-23)\n------------------\n\n- Bug: Fixed the package's long description.\n\n- Feature: Use the correct ``DocFileSuite`` class that counts tests properly.\n\n\n1.0.1 (2007-01-21)\n------------------\n\n- Bug: Test coverage brought up to 100%.\n\n- Feature: Register default ``IBreadcrumbs`` adapter.\n\n- Bug: Default ``IBreadcrumbs`` stops only on virtual host root, not on\n ``ISite`` object\n\n\n1.0.0 (7/10/2007)\n-----------------\n\n- Initial Release", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.python.org/pypi/z3c.breadcrumb", "keywords": "zope3 breadcrumb adapter", "license": "ZPL 2.1", "maintainer": null, "maintainer_email": null, "name": "z3c.breadcrumb", "package_url": "https://pypi.org/project/z3c.breadcrumb/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/z3c.breadcrumb/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://pypi.python.org/pypi/z3c.breadcrumb" }, "release_url": "https://pypi.org/project/z3c.breadcrumb/2.0.0/", "requires_dist": null, "requires_python": null, "summary": "A pluggable breadcrumbs implementation based on adapters.", "version": "2.0.0" }, "last_serial": 1808127, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "5fc13f6bc9213e1e867adf7a572a3680", "sha256": "6f97f1460afa5abb9d2697253f329023ddb3ee8705d7bb200fa135ca6b78116c" }, "downloads": -1, "filename": "z3c.breadcrumb-1.0.0-py2.4.egg", "has_sig": false, "md5_digest": "5fc13f6bc9213e1e867adf7a572a3680", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 13189, "upload_time": "2007-07-10T19:46:35", "url": "https://files.pythonhosted.org/packages/3b/c8/c0b2b36da2764d094aa59e1b17c49aa67e7c5850b196f17739e4f0f1966f/z3c.breadcrumb-1.0.0-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "bf46587fded87ea317757f265a303016", "sha256": "23f927f1ee87c8a6f3939de3cfa26750626cfb9a378fa17bd22758b4746ce909" }, "downloads": -1, "filename": "z3c.breadcrumb-1.0.0.tar.gz", "has_sig": false, "md5_digest": "bf46587fded87ea317757f265a303016", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7159, "upload_time": "2007-07-10T19:46:26", "url": "https://files.pythonhosted.org/packages/d8/e9/9cb8e1c7da214300721152489f5345226caa379fec5ff34882ce9fc409e5/z3c.breadcrumb-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "cb37171abe63b528bfbf184c6e19d086", "sha256": "26f7c04980e3aa9d456e6347133916fa4c3d9faf3d37a72d5126d15d199fa8db" }, "downloads": -1, "filename": "z3c.breadcrumb-1.0.1.tar.gz", "has_sig": false, "md5_digest": "cb37171abe63b528bfbf184c6e19d086", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7413, "upload_time": "2008-01-23T18:28:48", "url": "https://files.pythonhosted.org/packages/4c/a3/30b75c1b07d3dde8e34cba8979d9d7af96d66f76a2a88321667d8a081ee4/z3c.breadcrumb-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "4b040e756263ef63f00cf143f93fb0f7", "sha256": "ed5638af9342f7cc4b92be4bbf4a9d60d4b6a966308d0240538d5b44548d550f" }, "downloads": -1, "filename": "z3c.breadcrumb-1.0.2.tar.gz", "has_sig": false, "md5_digest": "4b040e756263ef63f00cf143f93fb0f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7478, "upload_time": "2008-01-23T18:36:33", "url": "https://files.pythonhosted.org/packages/d2/0e/6445313bbfaa4eeb3661d1f4a97771de7664dfc898634e245ab1a805a760/z3c.breadcrumb-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "27cf4a2dc28b612d6e4cd301323fbc46", "sha256": "dd56a0d290a7af93cc5387fc81465ac14fd0af7674ec624e9470f4199a4a29f4" }, "downloads": -1, "filename": "z3c.breadcrumb-1.0.3.tar.gz", "has_sig": false, "md5_digest": "27cf4a2dc28b612d6e4cd301323fbc46", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7837, "upload_time": "2008-12-13T14:27:34", "url": "https://files.pythonhosted.org/packages/8e/e7/6838d82ca47032b552d83a3fc703815451cf33dc2fe0c30ec9245464c8a5/z3c.breadcrumb-1.0.3.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "0d09b7d1c76840e8237a3941c5ca8e68", "sha256": "63a49cff676f10ea02e1be62577a6f0c1234325ecfd1bc56d29c6df181d3b6d9" }, "downloads": -1, "filename": "z3c.breadcrumb-1.1.0.tar.gz", "has_sig": false, "md5_digest": "0d09b7d1c76840e8237a3941c5ca8e68", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8093, "upload_time": "2009-05-29T07:57:56", "url": "https://files.pythonhosted.org/packages/6c/97/8e00d11502163fffc61daba2921c70780846fe01e3a3d351c1ce76c8ba68/z3c.breadcrumb-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "0104c23c8d173f53d105dffc6b31ecd9", "sha256": "c0da287bc4e2d3f3078060e2499d8d2ea4b427b6089cf84d9825faed1bbc2de8" }, "downloads": -1, "filename": "z3c.breadcrumb-1.1.1.tar.gz", "has_sig": false, "md5_digest": "0104c23c8d173f53d105dffc6b31ecd9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8078, "upload_time": "2010-12-12T17:11:50", "url": "https://files.pythonhosted.org/packages/f3/70/3522fc3ccf910654d28cd2bc3d4793f82c51b8d0e836845a192c0fdab7d9/z3c.breadcrumb-1.1.1.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "1a25586ec7b8ba5fa91556be7f97b553", "sha256": "b40935b4f54e36756cfb0329280f99d1c753b140016af151981836ae79a9a04b" }, "downloads": -1, "filename": "z3c.breadcrumb-2.0.0.tar.gz", "has_sig": false, "md5_digest": "1a25586ec7b8ba5fa91556be7f97b553", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11988, "upload_time": "2015-11-09T16:13:56", "url": "https://files.pythonhosted.org/packages/d2/33/a71d10d29f967a52c14764ff75b7942d505a37627924debf9e9931155202/z3c.breadcrumb-2.0.0.tar.gz" } ], "2.0.0a1": [ { "comment_text": "", "digests": { "md5": "58363c7ce29635b585733f01bc555b78", "sha256": "042ebeecd71c07d5da887a3938d291825bb7289e833373c949013f3a6a37ff74" }, "downloads": -1, "filename": "z3c.breadcrumb-2.0.0a1.zip", "has_sig": false, "md5_digest": "58363c7ce29635b585733f01bc555b78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20798, "upload_time": "2013-02-27T14:39:30", "url": "https://files.pythonhosted.org/packages/e9/40/078ae75d4d7e590dbe61f0961bfa625d083a0ddc25d3c683baba93025a1b/z3c.breadcrumb-2.0.0a1.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1a25586ec7b8ba5fa91556be7f97b553", "sha256": "b40935b4f54e36756cfb0329280f99d1c753b140016af151981836ae79a9a04b" }, "downloads": -1, "filename": "z3c.breadcrumb-2.0.0.tar.gz", "has_sig": false, "md5_digest": "1a25586ec7b8ba5fa91556be7f97b553", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11988, "upload_time": "2015-11-09T16:13:56", "url": "https://files.pythonhosted.org/packages/d2/33/a71d10d29f967a52c14764ff75b7942d505a37627924debf9e9931155202/z3c.breadcrumb-2.0.0.tar.gz" } ] }