{ "info": { "author": "Zope Project", "author_email": "zope3-dev@zope.org", "bugtrack_url": null, "classifiers": [], "description": "Adapters\n========\n\nDefault Display Name Generator\n------------------------------\n\nThe default display name generator simply takes a Dublin Core title or a\n__name__ and returns it, truncated if desired. It uses a helper function\nintended to make writing other display name generators easier, convertName.\n\nNo help is offered yet for using HTML with the IBrowserDisplayNameGenerator\ninterface.\n\nGiven an ILocation that can be adapted to \nzope.dublincore.interfaces.IDCDescriptiveProperties, and that actually has\na value for it, it returns the DC title; otherwise, it uses __name__.\n\n >>> import zope.dublincore.interfaces\n >>> import zope.location.interfaces\n >>> from zc.displayname import interfaces, adapters\n >>> from zope.interface import verify\n >>> from zope import interface\n >>> class Dummy(object):\n ... interface.implements(zope.location.interfaces.ILocation)\n ... def __init__(self, parent, name):\n ... self.__parent__ = parent\n ... self.__name__ = name\n ...\n >>> d = Dummy('parent', 'a name')\n >>> from zope.publisher.browser import TestRequest\n >>> g = adapters.DefaultDisplayNameGenerator(d, TestRequest())\n >>> verify.verifyObject(interfaces.IDisplayNameGenerator, g)\n True\n >>> g()\n 'a name'\n >>> g('foo')\n Traceback (most recent call last):\n ...\n TypeError: ('maxlength must be int', 'foo')\n >>> g(-1)\n Traceback (most recent call last):\n ...\n ValueError: ('maxlength must be 0 or greater', -1)\n >>> g(4)\n 'a...'\n >>> g(6)\n 'a name'\n >>> g(2)\n '??'\n >>> interface.directlyProvides(\n ... d, zope.dublincore.interfaces.IDCDescriptiveProperties)\n >>> d.title = 'My Special Dummy'\n >>> d.description = 'My interface said I had to have this'\n >>> verify.verifyObject(\n ... zope.dublincore.interfaces.IDCDescriptiveProperties, d)\n True\n >>> g()\n 'My Special Dummy'\n >>> g(0)\n ''\n >>> g(100)\n 'My Special Dummy'\n >>> g(16)\n 'My Special Dummy'\n >>> g(15)\n 'My Special D...'\n\nBreadcrumbs\n===========\n\nzc.displayname also provides an interface and some basic adapters that provide\nbreadcrumb functionality. This breadcrumb functionality is notably different\nfrom the standard Zope 3 breadcrumbs in two ways: the breadcrumbs are not \nconnected to the IAbsoluteURL interface, and the breadcrumbs take advantage\nof the display name generator.\n\nTo use the breadcrumbs, register the appropriate adapters, and get breadcrumbs\nfor an ILocation within a hierarchy with an IContainmentRoot as a root node.\n\n\n >>> from zope.traversing.interfaces import IContainmentRoot\n >>> class DummyContainmentRoot(object):\n ... zope.interface.implements(IContainmentRoot)\n ...\n >>> root = DummyContainmentRoot()\n >>> child = Dummy(root, 'foo')\n >>> grandchild = Dummy(child, 'bar baz bing')\n >>> d.__parent__ = grandchild\n >>> from zope import component\n >>> component.provideAdapter(adapters.Breadcrumbs)\n >>> component.provideAdapter(adapters.TerminalBreadcrumbs)\n >>> component.provideAdapter(adapters.DefaultDisplayNameGenerator)\n >>> component.provideAdapter(adapters.SiteDisplayNameGenerator)\n >>> from zope.publisher.interfaces.http import IHTTPRequest\n >>> from zope.traversing.browser.interfaces import IAbsoluteURL\n >>> from zope.traversing import browser\n >>> component.provideAdapter(\n ... browser.AbsoluteURL, adapts=(None, IHTTPRequest), \n ... provides=IAbsoluteURL)\n >>> component.provideAdapter(\n ... browser.SiteAbsoluteURL, adapts=(IContainmentRoot, IHTTPRequest), \n ... provides=IAbsoluteURL)\n >>> component.provideAdapter(\n ... browser.AbsoluteURL, adapts=(None, IHTTPRequest),\n ... provides=interface.Interface, name='absolute_url')\n >>> component.provideAdapter(\n ... browser.SiteAbsoluteURL, adapts=(IContainmentRoot, IHTTPRequest), \n ... provides=interface.Interface, name='absolute_url')\n >>> from zope.publisher.browser import TestRequest\n >>> request = TestRequest()\n >>> bc = component.getMultiAdapter((d, request), interfaces.IBreadcrumbs)\n >>> import pprint\n >>> pprint.pprint(bc()) # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE\n ({'name': u'[root]',\n 'name_gen': <...SiteDisplayNameGenerator...>,\n 'object': ,\n 'url': 'http://127.0.0.1'},\n {'name': 'foo',\n 'name_gen': <...DefaultDisplayNameGenerator...>,\n 'object': ,\n 'object': ,\n 'url': 'http://127.0.0.1/foo/bar%20baz%20bing'},\n {'name': 'My Special Dummy',\n 'name_gen': <...DefaultDisplayNameGenerator...>,\n 'object': ,\n 'url': 'http://127.0.0.1/foo/bar%20baz%20bing/a%20name'})\n >>> pprint.pprint(bc(6)) # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE\n ({'name': u'[root]',\n 'name_gen': <...SiteDisplayNameGenerator...>,\n 'object': ,\n 'url': 'http://127.0.0.1'},\n {'name': 'foo',\n 'name_gen': <...DefaultDisplayNameGenerator...>,\n 'object': ,\n 'object': ,\n 'url': 'http://127.0.0.1/foo/bar%20baz%20bing'},\n {'name': 'My ...',\n 'name_gen': <...DefaultDisplayNameGenerator...>,\n 'object': ,\n 'url': 'http://127.0.0.1/foo/bar%20baz%20bing/a%20name'})\n\nThe package also offers a hidden breadcrumb implementation. This enables\nusecases that involve objects that are in the traversal path but are for which\nno breadcrumbs are desired. For some sites, an IAdding is such an object. \nHere is an example of hiding the IAdding from the breadcrumbs.\n\n >>> import zope.app.container.interfaces\n >>> component.provideAdapter(\n ... adapters.HiddenBreadcrumbs, \n ... adapts=(zope.app.container.interfaces.IAdding, IHTTPRequest))\n >>> from zope.app.container.browser.adding import Adding\n >>> adding = Adding(d, request)\n >>> bc = component.getMultiAdapter(\n ... (adding, request), interfaces.IBreadcrumbs)\n >>> pprint.pprint(bc()) # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE\n ({'name': u'[root]',\n 'name_gen': <...SiteDisplayNameGenerator...>,\n 'object': ,\n 'url': 'http://127.0.0.1'},\n {'name': 'foo',\n 'name_gen': <...DefaultDisplayNameGenerator...>,\n 'object': ,\n 'object': ,\n 'url': 'http://127.0.0.1/foo/bar%20baz%20bing'},\n {'name': 'My Special Dummy',\n 'name_gen': <...DefaultDisplayNameGenerator...>,\n 'object': ,\n 'url': 'http://127.0.0.1/foo/bar%20baz%20bing/a%20name'})\n\nFor ease of use within page templates, the adapters module also offers two\nviews that can be used to get breadcrumbs directly. They simply get the \nadapter and call it, either with no argument, or with the maxlength argument of\n20. Register one of these, or another one with a similar pattern, for\nyour application's `breadcrumbs` view.\n\n >>> pprint.pprint(adapters.breadcrumbs(adding, request))\n ... # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE\n ({'name': u'[root]',\n 'name_gen': <...SiteDisplayNameGenerator...>,\n 'object': ,\n 'url': 'http://127.0.0.1'},\n {'name': 'foo',\n 'name_gen': <...DefaultDisplayNameGenerator...>,\n 'object': ,\n 'object': ,\n 'url': 'http://127.0.0.1/foo/bar%20baz%20bing'},\n {'name': 'My Special Dummy',\n 'name_gen': <...DefaultDisplayNameGenerator...>,\n 'object': ,\n 'url': 'http://127.0.0.1/foo/bar%20baz%20bing/a%20name'})\n >>> d.title = \"My Special Dummy With a Really Long Title\"\n >>> pprint.pprint(adapters.breadcrumbs20char(adding, request))\n ... # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE\n ({'name': u'[root]',\n 'name_gen': <...SiteDisplayNameGenerator...>,\n 'object': ,\n 'url': 'http://127.0.0.1'},\n {'name': 'foo',\n 'name_gen': <...DefaultDisplayNameGenerator...>,\n 'object': ,\n 'object': ,\n 'url': 'http://127.0.0.1/foo/bar%20baz%20bing'},\n {'name': 'My Special Dummy ...',\n 'name_gen': <...DefaultDisplayNameGenerator...>,\n 'object': ,\n 'url': 'http://127.0.0.1/foo/bar%20baz%20bing/a%20name'})", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "UNKNOWN", "keywords": "zope zope3", "license": "ZPL 2.1", "maintainer": null, "maintainer_email": null, "name": "zc.displayname", "package_url": "https://pypi.org/project/zc.displayname/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/zc.displayname/", "project_urls": { "Download": "UNKNOWN", "Homepage": "UNKNOWN" }, "release_url": "https://pypi.org/project/zc.displayname/1.1/", "requires_dist": null, "requires_python": null, "summary": "A Zope 3 extension for pluggable display names.", "version": "1.1" }, "last_serial": 802172, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "e4d1ffecf6158cce9ac70e8742f65379", "sha256": "ca4f83e12b42025ae65316817128475fd647e2e86c4065f41fa149cb4afa769d" }, "downloads": -1, "filename": "zc.displayname-1.0-py2.4.egg", "has_sig": false, "md5_digest": "e4d1ffecf6158cce9ac70e8742f65379", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 15841, "upload_time": "2006-12-07T18:37:49", "url": "https://files.pythonhosted.org/packages/dc/3f/70293a270285bfb6e574b7a3e4d82ea60bc93008ce3faa381be579f330ad/zc.displayname-1.0-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "e11af332d2f942e6c20d4b3c5d1eb092", "sha256": "dc2271782c7aac242b4ca4fa2a1460316ef12f2b23156570a52437cd3fe77317" }, "downloads": -1, "filename": "zc.displayname-1.0.tar.gz", "has_sig": false, "md5_digest": "e11af332d2f942e6c20d4b3c5d1eb092", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8890, "upload_time": "2006-12-07T18:37:48", "url": "https://files.pythonhosted.org/packages/ea/f7/b37e7d45dedbd40972e29c13bd604c392e28103dd5082f344489524c14c3/zc.displayname-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "68bf950b0c2e7e8d4bd890b57e034f62", "sha256": "146cd8bacd9215d6c27a78ccfe4eef1df3b9c66e456c1e458afed83a805c33c3" }, "downloads": -1, "filename": "zc.displayname-1.1.tar.gz", "has_sig": false, "md5_digest": "68bf950b0c2e7e8d4bd890b57e034f62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8366, "upload_time": "2010-02-25T22:59:01", "url": "https://files.pythonhosted.org/packages/cf/3f/d70c09ded3ffa3019a0d82aa3ba2bd98b77605e6e8fbce70631542f3e0a4/zc.displayname-1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "68bf950b0c2e7e8d4bd890b57e034f62", "sha256": "146cd8bacd9215d6c27a78ccfe4eef1df3b9c66e456c1e458afed83a805c33c3" }, "downloads": -1, "filename": "zc.displayname-1.1.tar.gz", "has_sig": false, "md5_digest": "68bf950b0c2e7e8d4bd890b57e034f62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8366, "upload_time": "2010-02-25T22:59:01", "url": "https://files.pythonhosted.org/packages/cf/3f/d70c09ded3ffa3019a0d82aa3ba2bd98b77605e6e8fbce70631542f3e0a4/zc.displayname-1.1.tar.gz" } ] }