[Checkins] SVN: z3c.breadcrumb/trunk/ Try to create an egg.
Stephan Richter
srichter at cosmos.phy.tufts.edu
Tue Jul 10 15:41:16 EDT 2007
Log message for revision 77684:
Try to create an egg.
Changed:
A z3c.breadcrumb/trunk/AUTHOR.txt
A z3c.breadcrumb/trunk/CHANGES.txt
A z3c.breadcrumb/trunk/LICENSE.txt
A z3c.breadcrumb/trunk/README.txt
A z3c.breadcrumb/trunk/bootstrap.py
A z3c.breadcrumb/trunk/buildout.cfg
U z3c.breadcrumb/trunk/setup.py
U z3c.breadcrumb/trunk/src/z3c/breadcrumb/README.txt
U z3c.breadcrumb/trunk/src/z3c/breadcrumb/browser.py
-=-
Added: z3c.breadcrumb/trunk/AUTHOR.txt
===================================================================
--- z3c.breadcrumb/trunk/AUTHOR.txt (rev 0)
+++ z3c.breadcrumb/trunk/AUTHOR.txt 2007-07-10 19:41:15 UTC (rev 77684)
@@ -0,0 +1,3 @@
+Roger Ineichen (roger <at> projekt01.ch)
+Stephan Richter (stephan.richter <at> gmail.com)
+
Property changes on: z3c.breadcrumb/trunk/AUTHOR.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: z3c.breadcrumb/trunk/CHANGES.txt
===================================================================
--- z3c.breadcrumb/trunk/CHANGES.txt (rev 0)
+++ z3c.breadcrumb/trunk/CHANGES.txt 2007-07-10 19:41:15 UTC (rev 77684)
@@ -0,0 +1,8 @@
+=======
+CHANGES
+=======
+
+Version 1.0.0 (7/10/2007)
+-------------------------
+
+- Initial Release
Property changes on: z3c.breadcrumb/trunk/CHANGES.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: z3c.breadcrumb/trunk/LICENSE.txt
===================================================================
--- z3c.breadcrumb/trunk/LICENSE.txt (rev 0)
+++ z3c.breadcrumb/trunk/LICENSE.txt 2007-07-10 19:41:15 UTC (rev 77684)
@@ -0,0 +1,54 @@
+Zope Public License (ZPL) Version 2.1
+-------------------------------------
+
+A copyright notice accompanies this license document that
+identifies the copyright holders.
+
+This license has been certified as open source. It has also
+been designated as GPL compatible by the Free Software
+Foundation (FSF).
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the
+following conditions are met:
+
+1. Redistributions in source code must retain the
+ accompanying copyright notice, this list of conditions,
+ and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the accompanying
+ copyright notice, this list of conditions, and the
+ following disclaimer in the documentation and/or other
+ materials provided with the distribution.
+
+3. Names of the copyright holders must not be used to
+ endorse or promote products derived from this software
+ without prior written permission from the copyright
+ holders.
+
+4. The right to distribute this software or to use it for
+ any purpose does not give you the right to use
+ Servicemarks (sm) or Trademarks (tm) of the copyright
+ holders. Use of them is covered by separate agreement
+ with the copyright holders.
+
+5. If any files are modified, you must cause the modified
+ files to carry prominent notices stating that you changed
+ the files and the date of any change.
+
+Disclaimer
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS''
+ AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
+ NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ NO EVENT SHALL THE COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.
Property changes on: z3c.breadcrumb/trunk/LICENSE.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: z3c.breadcrumb/trunk/README.txt
===================================================================
--- z3c.breadcrumb/trunk/README.txt (rev 0)
+++ z3c.breadcrumb/trunk/README.txt 2007-07-10 19:41:15 UTC (rev 77684)
@@ -0,0 +1,3 @@
+The ``z3c.breadcrumb`` package provides base classes for breadcrumb
+implementations. It allows you to write adapters for each content object which
+provides it's own rules for providing the breadcrumb name, url and selection.
Property changes on: z3c.breadcrumb/trunk/README.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: z3c.breadcrumb/trunk/bootstrap.py
===================================================================
--- z3c.breadcrumb/trunk/bootstrap.py (rev 0)
+++ z3c.breadcrumb/trunk/bootstrap.py 2007-07-10 19:41:15 UTC (rev 77684)
@@ -0,0 +1,52 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+
+$Id$
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+ez = {}
+exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+ ).read() in ez
+ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+
+import pkg_resources
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+if sys.platform == 'win32':
+ cmd = '"%s"' % cmd # work around spawn lamosity on windows
+
+ws = pkg_resources.working_set
+assert os.spawnle(
+ os.P_WAIT, sys.executable, sys.executable,
+ '-c', cmd, '-mqNxd', tmpeggs, 'zc.buildout',
+ dict(os.environ,
+ PYTHONPATH=
+ ws.find(pkg_resources.Requirement.parse('setuptools')).location
+ ),
+ ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout')
+import zc.buildout.buildout
+zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+shutil.rmtree(tmpeggs)
Property changes on: z3c.breadcrumb/trunk/bootstrap.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: z3c.breadcrumb/trunk/buildout.cfg
===================================================================
--- z3c.breadcrumb/trunk/buildout.cfg (rev 0)
+++ z3c.breadcrumb/trunk/buildout.cfg 2007-07-10 19:41:15 UTC (rev 77684)
@@ -0,0 +1,8 @@
+[buildout]
+develop = .
+parts = test
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = z3c.breadcrumb [test]
+
Modified: z3c.breadcrumb/trunk/setup.py
===================================================================
--- z3c.breadcrumb/trunk/setup.py 2007-07-10 16:30:48 UTC (rev 77683)
+++ z3c.breadcrumb/trunk/setup.py 2007-07-10 19:41:15 UTC (rev 77684)
@@ -1,21 +1,74 @@
-#!python
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Setup
+
+$Id$
+"""
+import os
+import xml.sax.saxutils
from setuptools import setup, find_packages
-setup(name='z3c.breadcrumb',
- version='0.1.0',
- author = "Zope Community",
- author_email = "zope3-dev at zope.org",
- license = "ZPL 2.1",
- keywords = "breadcrumb zope zope3",
- url='http://svn.zope.org/z3c.breadcrumb',
+def read(*rnames):
+ text = open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+ return xml.sax.saxutils.escape(text)
- zip_safe=False,
- packages=find_packages('src'),
- include_package_data=True,
- package_dir = {'':'src'},
- namespace_packages=['z3c',],
- install_requires=[
- 'setuptools',
- ],
- )
-
+setup (
+ name='z3c.breadcrumb',
+ version='1.0.0',
+ author = "Roger Ineichen,Stephan Richter and the Zope Community",
+ author_email = "zope3-dev at zope.org",
+ description = "A pluggable breadcrumbs implementation based on adapters.",
+ long_description=(
+ read('README.txt')
+ + '\n\n' +
+ 'Detailed Documentation\n'
+ '**********************\n'
+ + '\n' +
+ read('src', 'z3c', 'breadcrumb', 'README.txt')
+ + '\n\n' +
+ read('CHANGES.txt')
+ ),
+ license = "ZPL 2.1",
+ keywords = "zope3 breadcrumb adapter",
+ classifiers = [
+ 'Development Status :: 4 - Beta',
+ 'Environment :: Web Environment',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: Zope Public License',
+ 'Programming Language :: Python',
+ 'Natural Language :: English',
+ 'Operating System :: OS Independent',
+ 'Topic :: Internet :: WWW/HTTP',
+ 'Framework :: Zope3'],
+ url = 'http://svn.zope.org/z3c.breadcrumb',
+ packages = find_packages('src'),
+ include_package_data = True,
+ package_dir = {'':'src'},
+ namespace_packages = ['z3c'],
+ extras_require = dict(
+ test = ['zope.testing'],
+ ),
+ install_requires = [
+ 'setuptools',
+ 'zope.app.component',
+ 'zope.component',
+ 'zope.interface',
+ 'zope.location',
+ 'zope.publisher',
+ 'zope.schema',
+ 'zope.traversing',
+ ],
+ dependency_links = ['http://download.zope.org/distribution'],
+ zip_safe = False,
+ )
Modified: z3c.breadcrumb/trunk/src/z3c/breadcrumb/README.txt
===================================================================
--- z3c.breadcrumb/trunk/src/z3c/breadcrumb/README.txt 2007-07-10 16:30:48 UTC (rev 77683)
+++ z3c.breadcrumb/trunk/src/z3c/breadcrumb/README.txt 2007-07-10 19:41:15 UTC (rev 77684)
@@ -1,117 +1,117 @@
-======
-README
-======
-
-The z3c.breadcrumb package provides base classes for breadcrumb
-implementations. It allows you to write adapters for each content object which
-provides it's own rule for providing the breadcrumb name, url and selection.
-
-Let's do some imports we will use later.
-
- >>> import zope.interface
- >>> import zope.component
- >>> from zope.publisher.interfaces.http import IHTTPRequest
- >>> from zope.publisher.browser import TestRequest
- >>> from zope.traversing.browser import absoluteURL
- >>> from zope.app.container import contained
- >>> from z3c.breadcrumb import interfaces
- >>> from z3c.breadcrumb import browser
-
-
-IBreadcrumb
------------
-
-Let's define a interface and a content object.
-
- >>> class IOffice(zope.interface.Interface):
- ... """Office interface."""
-
- >>> class Office(contained.Contained):
- ... zope.interface.implements(IOffice)
- ... def __init__(self, label):
- ... self.label = label
- ... self.activeURL = True
-
- >>> office = Office(u'Zope Foundation')
- >>> office.__name__ = u'ZF'
-
-There is a generic breadcrumb implementation which is registered by
-default. If we do not implement a custom IBreadcrumb the generic adapter will
-return the title or __name__ of the item. Let's register the default adapter,
-this is normaly done in configure.zcml:
-
- >>> zope.component.provideAdapter(browser.GenericBreadcrumb)
-
-And see what we get:
-
- >>> request = TestRequest()
- >>> breadcrumb = zope.component.getMultiAdapter((office, request),
- ... interfaces.IBreadcrumb)
- >>> breadcrumb.name
- u'ZF'
-
-We can also implement a custom IBreadcrumb adapter and provide another name
-for the breadcrumb name:
-
- >>> class BreadcrumbForOffice(object):
- ... zope.interface.implements(interfaces.IBreadcrumb)
- ... zope.component.adapts(IOffice, IHTTPRequest)
- ...
- ... def __init__(self, context, request):
- ... self.context = context
- ... self.request = request
- ...
- ... @property
- ... def name(self):
- ... return self.context.label
- ...
- ... @property
- ... def url(self):
- ... return absoluteURL(self.context, self.request)
- ...
- ... @property
- ... def activeURL(self):
- ... return self.context.activeURL
-
-Let's register the custom IBreadcrumb adapter for IOffice:
-
- >>> zope.component.provideAdapter(BreadcrumbForOffice)
-
-And check the new breadcrumb name:
-
- >>> breadcrumb = zope.component.getMultiAdapter((office, request),
- ... interfaces.IBreadcrumb)
- >>> breadcrumb.name
- u'Zope Foundation'
-
-
-IBreadcrumbs
-------------
-
-There is also a IBreadcrumbs adapter which knows how to collect breadcrumb
-informations for each item he traverses. We need to setup a little bit
-infrastucture:
-
- >>> root = rootFolder
- >>> root['office'] = office
-
-Register the IBreadcrumbs adapter:
-
- >>> zope.component.provideAdapter(browser.Breadcrumbs,
- ... (zope.interface.Interface, zope.interface.Interface),
- ... interfaces.IBreadcrumbs)
-
-
-Now we can collect breadcrumbs for our items. You can see the url is correct
-and the label ``Zope Foundation`` is collected by the custom IBreadcrumb
-adapter:
-
- >>> breadcrumb = zope.component.getMultiAdapter((office, request),
- ... interfaces.IBreadcrumbs)
- >>> list(breadcrumb.crumbs)
- [{'url': 'http://127.0.0.1',
- 'activeURL': True,
- 'name': 'top'},
- {'url': 'http://127.0.0.1/office',
- 'activeURL': True,
- 'name': u'Zope Foundation'}]
+======
+README
+======
+
+The z3c.breadcrumb package provides base classes for breadcrumb
+implementations. It allows you to write adapters for each content object which
+provides it's own rule for providing the breadcrumb name, url and selection.
+
+Let's do some imports we will use later.
+
+ >>> import zope.interface
+ >>> import zope.component
+ >>> from zope.publisher.interfaces.http import IHTTPRequest
+ >>> from zope.publisher.browser import TestRequest
+ >>> from zope.traversing.browser import absoluteURL
+ >>> from zope.app.container import contained
+ >>> from z3c.breadcrumb import interfaces
+ >>> from z3c.breadcrumb import browser
+
+
+IBreadcrumb
+-----------
+
+Let's define a interface and a content object.
+
+ >>> class IOffice(zope.interface.Interface):
+ ... """Office interface."""
+
+ >>> class Office(contained.Contained):
+ ... zope.interface.implements(IOffice)
+ ... def __init__(self, label):
+ ... self.label = label
+ ... self.activeURL = True
+
+ >>> office = Office(u'Zope Foundation')
+ >>> office.__name__ = u'ZF'
+
+There is a generic breadcrumb implementation which is registered by
+default. If we do not implement a custom IBreadcrumb the generic adapter will
+return the ``title`` or ``__name__`` of the item. Let's register the default
+adapter, this is normaly done in ``configure.zcml``:
+
+ >>> zope.component.provideAdapter(browser.GenericBreadcrumb)
+
+And see what we get:
+
+ >>> request = TestRequest()
+ >>> breadcrumb = zope.component.getMultiAdapter((office, request),
+ ... interfaces.IBreadcrumb)
+ >>> breadcrumb.name
+ u'ZF'
+
+We can also implement a custom ``IBreadcrumb`` adapter and provide another
+name for the breadcrumb name:
+
+ >>> class BreadcrumbForOffice(object):
+ ... zope.interface.implements(interfaces.IBreadcrumb)
+ ... zope.component.adapts(IOffice, IHTTPRequest)
+ ...
+ ... def __init__(self, context, request):
+ ... self.context = context
+ ... self.request = request
+ ...
+ ... @property
+ ... def name(self):
+ ... return self.context.label
+ ...
+ ... @property
+ ... def url(self):
+ ... return absoluteURL(self.context, self.request)
+ ...
+ ... @property
+ ... def activeURL(self):
+ ... return self.context.activeURL
+
+Let's register the custom ``IBreadcrumb`` adapter for IOffice:
+
+ >>> zope.component.provideAdapter(BreadcrumbForOffice)
+
+And check the new breadcrumb name:
+
+ >>> breadcrumb = zope.component.getMultiAdapter((office, request),
+ ... interfaces.IBreadcrumb)
+ >>> breadcrumb.name
+ u'Zope Foundation'
+
+
+IBreadcrumbs
+------------
+
+There is also a IBreadcrumbs adapter which knows how to collect breadcrumb
+informations for each item he traverses. We need to setup a little bit
+infrastucture:
+
+ >>> root = rootFolder
+ >>> root['office'] = office
+
+Register the IBreadcrumbs adapter:
+
+ >>> zope.component.provideAdapter(browser.Breadcrumbs,
+ ... (zope.interface.Interface, zope.interface.Interface),
+ ... interfaces.IBreadcrumbs)
+
+
+Now we can collect breadcrumbs for our items. You can see the url is correct
+and the label ``Zope Foundation`` is collected by the custom IBreadcrumb
+adapter:
+
+ >>> breadcrumb = zope.component.getMultiAdapter((office, request),
+ ... interfaces.IBreadcrumbs)
+ >>> list(breadcrumb.crumbs)
+ [{'url': 'http://127.0.0.1',
+ 'activeURL': True,
+ 'name': 'top'},
+ {'url': 'http://127.0.0.1/office',
+ 'activeURL': True,
+ 'name': u'Zope Foundation'}]
Modified: z3c.breadcrumb/trunk/src/z3c/breadcrumb/browser.py
===================================================================
--- z3c.breadcrumb/trunk/src/z3c/breadcrumb/browser.py 2007-07-10 16:30:48 UTC (rev 77683)
+++ z3c.breadcrumb/trunk/src/z3c/breadcrumb/browser.py 2007-07-10 19:41:15 UTC (rev 77684)
@@ -1,94 +1,96 @@
-##############################################################################
-#
-# Copyright (c) 2007 Zope Foundation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-"""
-$Id: __init__.py 70825 2006-10-20 01:34:05Z rogerineichen $
-"""
-__docformat__ = 'reStructuredText'
-
-import zope.component
-import zope.interface
-import zope.location
-from zope.publisher.interfaces import NotFound
-from zope.publisher import browser
-from zope.publisher.interfaces.http import IHTTPRequest
-from zope.traversing.interfaces import IContainmentRoot
-from zope.app import zapi
-from zope.app.component.interfaces import ISite
-
-from z3c.breadcrumb import interfaces
-
-
-class Breadcrumbs(zope.location.Location):
- """Breadcrumbs implementation using IBreadcrum adapters."""
-
- zope.interface.implements(interfaces.IBreadcrumbs)
- zope.component.adapts(zope.interface.Interface, IHTTPRequest)
-
- def __init__(self, context, request):
- self.context = context
- self.request = request
-
- def __getParent(self):
- return getattr(self, '_parent', self.context)
-
- def __setParent(self, parent):
- self._parent = parent
-
- __parent__ = property(__getParent, __setParent)
-
- @property
- def crumbs(self):
- objects = []
- for obj in [self.context] + list(zapi.getParents(self.context)):
- objects.append(obj)
- if ISite.providedBy(obj):
- break
- objects.reverse()
- for object in objects:
- info = zapi.getMultiAdapter((object, self.request),
- interfaces.IBreadcrumb)
- yield {'name': info.name, 'url': info.url, 'activeURL': info.activeURL}
-
-
-class GenericBreadcrumb(object):
- """A generic breadcrumb adapter."""
- zope.interface.implements(interfaces.IBreadcrumb)
- zope.component.adapts(zope.interface.Interface, IHTTPRequest)
-
- # See interfaces.IBreadcrumb
- activeURL = True
-
- def __init__(self, context, request):
- self.context = context
- self.request = request
-
- @property
- def name(self):
- """See interfaces.IBreadcrumb"""
- name = getattr(self.context, 'title', None)
- if name is None:
- name = getattr(self.context, '__name__', None)
- if name is None and IContainmentRoot.providedBy(self.context):
- name = 'top'
- return name
-
- @property
- def url(self):
- """See interfaces.IBreadcrumb"""
- return zapi.absoluteURL(self.context, self.request)
-
-
-def CustomNameBreadcrumb(name):
- return type('CustomNameBreadcrumb(%r)' %name,
- (GenericBreadcrumb,), {'name': name})
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 70825 2006-10-20 01:34:05Z rogerineichen $
+"""
+__docformat__ = 'reStructuredText'
+
+import zope.component
+import zope.interface
+import zope.location
+import zope.traversing.browser
+from zope.publisher.interfaces import NotFound
+from zope.publisher import browser
+from zope.publisher.interfaces.http import IHTTPRequest
+from zope.traversing.interfaces import IContainmentRoot
+from zope.app.component.interfaces import ISite
+
+from z3c.breadcrumb import interfaces
+
+
+class Breadcrumbs(zope.location.Location):
+ """Breadcrumbs implementation using IBreadcrum adapters."""
+
+ zope.interface.implements(interfaces.IBreadcrumbs)
+ zope.component.adapts(zope.interface.Interface, IHTTPRequest)
+
+ def __init__(self, context, request):
+ self.context = context
+ self.request = request
+
+ def __getParent(self):
+ return getattr(self, '_parent', self.context)
+
+ def __setParent(self, parent):
+ self._parent = parent
+
+ __parent__ = property(__getParent, __setParent)
+
+ @property
+ def crumbs(self):
+ objects = []
+ for obj in [self.context]+list(zope.component.getParents(self.context)):
+ objects.append(obj)
+ if ISite.providedBy(obj):
+ break
+ objects.reverse()
+ for object in objects:
+ info = zope.component.getMultiAdapter((object, self.request),
+ interfaces.IBreadcrumb)
+ yield {'name': info.name,
+ 'url': info.url,
+ 'activeURL': info.activeURL}
+
+
+class GenericBreadcrumb(object):
+ """A generic breadcrumb adapter."""
+ zope.interface.implements(interfaces.IBreadcrumb)
+ zope.component.adapts(zope.interface.Interface, IHTTPRequest)
+
+ # See interfaces.IBreadcrumb
+ activeURL = True
+
+ def __init__(self, context, request):
+ self.context = context
+ self.request = request
+
+ @property
+ def name(self):
+ """See interfaces.IBreadcrumb"""
+ name = getattr(self.context, 'title', None)
+ if name is None:
+ name = getattr(self.context, '__name__', None)
+ if name is None and IContainmentRoot.providedBy(self.context):
+ name = 'top'
+ return name
+
+ @property
+ def url(self):
+ """See interfaces.IBreadcrumb"""
+ return zope.traversing.browser.absoluteURL(self.context, self.request)
+
+
+def CustomNameBreadcrumb(name):
+ return type('CustomNameBreadcrumb(%r)' %name,
+ (GenericBreadcrumb,), {'name': name})
More information about the Checkins
mailing list