[Checkins] SVN: z3c.traverser/trunk/ Get rid of zope.app.zapi. Fix tests, improve test coverage.

Dan Korostelev nadako at gmail.com
Mon Feb 2 10:11:35 EST 2009


Log message for revision 95978:
  Get rid of zope.app.zapi. Fix tests, improve test coverage.

Changed:
  _U  z3c.traverser/trunk/
  U   z3c.traverser/trunk/CHANGES.txt
  U   z3c.traverser/trunk/buildout.cfg
  U   z3c.traverser/trunk/setup.py
  D   z3c.traverser/trunk/src/z3c/traverser/DEPENDENCIES.cfg
  U   z3c.traverser/trunk/src/z3c/traverser/README.txt
  U   z3c.traverser/trunk/src/z3c/traverser/browser.py
  U   z3c.traverser/trunk/src/z3c/traverser/stackinfo/README.txt
  D   z3c.traverser/trunk/src/z3c/traverser/stackinfo/SETUP.cfg
  U   z3c.traverser/trunk/src/z3c/traverser/stackinfo/ftesting.zcml
  U   z3c.traverser/trunk/src/z3c/traverser/stackinfo/testing/configure.zcml
  U   z3c.traverser/trunk/src/z3c/traverser/stackinfo/testing/consumer.py
  U   z3c.traverser/trunk/src/z3c/traverser/stackinfo/tests.py
  U   z3c.traverser/trunk/src/z3c/traverser/stackinfo/traversing.py
  D   z3c.traverser/trunk/src/z3c/traverser/stackinfo/z3c.traverser.stackinfo-configure.zcml
  U   z3c.traverser/trunk/src/z3c/traverser/viewlet/ftesting.zcml
  D   z3c.traverser/trunk/src/z3c/traverser/viewlet/z3c.traverser.viewlet-configure.zcml

-=-

Property changes on: z3c.traverser/trunk
___________________________________________________________________
Modified: svn:ignore
   - bin
develop-eggs
dist
parts
.installed.cfg

   + bin
develop-eggs
dist
parts
.installed.cfg
coverage


Modified: z3c.traverser/trunk/CHANGES.txt
===================================================================
--- z3c.traverser/trunk/CHANGES.txt	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/CHANGES.txt	2009-02-02 15:11:34 UTC (rev 95978)
@@ -2,6 +2,19 @@
 CHANGES
 =======
 
+0.2.4 (unreleased)
+------------------
+
+- Make ``PluggableBrowserTraverser`` implement ``IBrowserPublisher``
+  interface.
+- Fix tests and deprecation warnings.
+- Improve test coverage.
+- Get rid of zope.app.zapi dependency by replacing its uses with direct
+  calls.
+- Change package's mailing list address to zope-dev at zope.org,
+  because zope3-dev at zope.org is now retired.
+- Change "cheeseshop" to "pypi" in the package's url.
+
 0.2.3 (2008-07-14)
 ------------------
 

Modified: z3c.traverser/trunk/buildout.cfg
===================================================================
--- z3c.traverser/trunk/buildout.cfg	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/buildout.cfg	2009-02-02 15:11:34 UTC (rev 95978)
@@ -1,8 +1,19 @@
 [buildout]
 develop = .
-parts = test
+parts = test coverage-test coverage-report
 
 [test]
 recipe = zc.recipe.testrunner
 defaults = ['--tests-pattern', '^f?tests$']
 eggs = z3c.traverser [test]
+
+[coverage-test]
+recipe = zc.recipe.testrunner
+eggs = z3c.traverser [test]
+defaults = ['--coverage', '../../coverage', '--tests-pattern', '^f?tests$']
+
+[coverage-report]
+recipe = zc.recipe.egg
+eggs = z3c.coverage
+scripts = coverage=coverage-report
+arguments = ('coverage', 'coverage/report')

Modified: z3c.traverser/trunk/setup.py
===================================================================
--- z3c.traverser/trunk/setup.py	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/setup.py	2009-02-02 15:11:34 UTC (rev 95978)
@@ -22,14 +22,14 @@
     return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
 
 setup(name='z3c.traverser',
-      version = '0.2.3',
+      version = '0.2.4dev',
       author='Zope Corporation and Contributors',
-      author_email='zope3-dev at zope.org',
+      author_email='zope-dev at zope.org',
       description='Pluggable Traverser API',
       long_description=(
           read('README.txt')
           + '\n\n' +
-          'Detailed Dcoumentation\n' +
+          'Detailed Documentation\n' +
           '======================\n'
           + '\n\n' +
           read('src', 'z3c', 'traverser', 'README.txt')
@@ -57,7 +57,7 @@
           'Operating System :: OS Independent',
           'Topic :: Internet :: WWW/HTTP',
           'Framework :: Zope3'],
-      url='http://cheeseshop.python.org/pypi/z3c.traverser',
+      url='http://pypi.python.org/pypi/z3c.traverser',
       license='ZPL 2.1',
       packages=find_packages('src'),
       package_dir = {'': 'src'},

Deleted: z3c.traverser/trunk/src/z3c/traverser/DEPENDENCIES.cfg
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/DEPENDENCIES.cfg	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/src/z3c/traverser/DEPENDENCIES.cfg	2009-02-02 15:11:34 UTC (rev 95978)
@@ -1 +0,0 @@
-zope.app

Modified: z3c.traverser/trunk/src/z3c/traverser/README.txt
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/README.txt	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/src/z3c/traverser/README.txt	2009-02-02 15:11:34 UTC (rev 95978)
@@ -181,7 +181,19 @@
     >>> traverser.publishTraverse(request, 'some')
     <SomeAdapter object at ...>
 
+If the object is not adaptable, we'll get NotFound. Let's register a
+plugin that tries to query a named adapter for ISomeAdapter. The third
+argument for AdapterTraverserPlugin is used to specify the adapter name.
 
+    >>> provideSubscriptionAdapter(
+    ...     AdapterTraverserPlugin('badadapter', ISomeAdapter, 'other'),
+    ...     (IMyContainer, IPublisherRequest))
+
+    >>> traverser.publishTraverse(request, 'badadapter')
+    Traceback (most recent call last):
+    ...
+    NotFound: Object: <MyContainer object at ...>, name: 'badadapter'
+
 Traverser Plugins
 -----------------
 
@@ -203,7 +215,7 @@
     NotFound: Object: <Content object at ...>, name: 'something else'
 
 All of the above traversers with exception of the `ContainerTraverserPlugin`
-are realizations of the abstract `NameTraverserPlugin` class. Name traversers
+are implementation of the abstract `NameTraverserPlugin` class. Name traversers
 are traversers that can resolve one particular name. By using the abstract
 `NameTraverserPlugin` class, all of the traverser boilerplate can be
 avoided. Here is a simple example that always returns a specific value for a
@@ -249,3 +261,22 @@
     ...
     NotFound: Object: <MyContainer object at ...>, name: 'some'
 
+
+Browser traverser
+-----------------
+
+There's also a special subclass of the PluggableTraverser that 
+implements the ``IBrowserPublisher`` interface, thus providing the
+``browserDefault`` method that returns a default object and a view
+name to traverse and use if there's no more steps to traverse.
+
+Let's provide a view name registered as an IDefaultView adapter. This
+is usually done by zope.app.publisher's browser:defaultView directive. 
+
+    >>> from zope.component.interfaces import IDefaultViewName
+    >>> provideAdapter('view.html', (IContent, Interface), IDefaultViewName)
+
+    >>> from z3c.traverser.browser import PluggableBrowserTraverser
+    >>> traverser = PluggableBrowserTraverser(content, request)
+    >>> traverser.browserDefault(request)
+    (<Content object at 0x...>, ('@@view.html',))

Modified: z3c.traverser/trunk/src/z3c/traverser/browser.py
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/browser.py	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/src/z3c/traverser/browser.py	2009-02-02 15:11:34 UTC (rev 95978)
@@ -16,14 +16,28 @@
 $Id$
 """
 __docformat__ = "reStructuredText"
-from zope.app import zapi
+from zope.component import getSiteManager
+from zope.component.interfaces import ComponentLookupError, IDefaultViewName
+from zope.interface import implements, providedBy
+from zope.publisher.interfaces.browser import IBrowserPublisher
+
 from z3c.traverser.traverser import PluggableTraverser
 
+# copy the function from zope.app.publisher not to depend on it
+def getDefaultViewName(object, request):
+    name = getSiteManager().adapters.lookup(
+        (providedBy(object), providedBy(request)), IDefaultViewName)
+    if name is not None:
+        return name
+    raise ComponentLookupError("Couldn't find default view name",
+                               object, request)
 
 class PluggableBrowserTraverser(PluggableTraverser):
 
+    implements(IBrowserPublisher)
+
     def browserDefault(self, request):
         """See zope.publisher.browser.interfaces.IBrowserPublisher"""
-        view_name = zapi.getDefaultViewName(self.context, request)
-        view_uri = "@@%s" %view_name
+        view_name = getDefaultViewName(self.context, request)
+        view_uri = "@@%s" % view_name
         return self.context, (view_uri,)

Modified: z3c.traverser/trunk/src/z3c/traverser/stackinfo/README.txt
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/stackinfo/README.txt	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/src/z3c/traverser/stackinfo/README.txt	2009-02-02 15:11:34 UTC (rev 95978)
@@ -253,3 +253,18 @@
   'http://127.0.0.1/content'
   >>> traversing.unconsumedURL(under, request)
   'http://127.0.0.1/content/under/kv/key2/value2'
+
+The unconsumedURL function is also available as a view, named
+``unconsumed_url``, similar to ``absolute_url`` one.
+
+  >>> from zope.component import getMultiAdapter
+  >>> url = getMultiAdapter((under, request), name='unconsumed_url')
+
+  >>> str(url)
+  'http://127.0.0.1/content/under/kv/key2/value2'
+
+  >>> unicode(url)
+  u'http://127.0.0.1/content/under/kv/key2/value2'
+
+  >>> url()
+  'http://127.0.0.1/content/under/kv/key2/value2'

Deleted: z3c.traverser/trunk/src/z3c/traverser/stackinfo/SETUP.cfg
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/stackinfo/SETUP.cfg	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/src/z3c/traverser/stackinfo/SETUP.cfg	2009-02-02 15:11:34 UTC (rev 95978)
@@ -1,3 +0,0 @@
-<data-files zopeskel/etc/package-includes>
-    z3c.traverser.stackinfo-*.zcml
-</data-files>
\ No newline at end of file

Modified: z3c.traverser/trunk/src/z3c/traverser/stackinfo/ftesting.zcml
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/stackinfo/ftesting.zcml	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/src/z3c/traverser/stackinfo/ftesting.zcml	2009-02-02 15:11:34 UTC (rev 95978)
@@ -20,7 +20,7 @@
     component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy" />
 
   <include package="zope.app.securitypolicy" />
-  <include package="zope.app.session" />
+  <include package="zope.session" />
 
   <include package="z3c.traverser.stackinfo"/>
   <include package="z3c.traverser.stackinfo.testing"/>

Modified: z3c.traverser/trunk/src/z3c/traverser/stackinfo/testing/configure.zcml
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/stackinfo/testing/configure.zcml	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/src/z3c/traverser/stackinfo/testing/configure.zcml	2009-02-02 15:11:34 UTC (rev 95978)
@@ -4,13 +4,13 @@
            i18n_domain="zope">
 
  <browser:page
-  for="zope.app.component.interfaces.ISite"
+  for="zope.location.interfaces.ISite"
   name="stackinfo.html"
   permission="zope.Public"
   class=".views.StackInfoView"/>
 
  <subscriber
-  for="zope.app.component.interfaces.ISite
+  for="zope.location.interfaces.ISite
        zope.app.publication.interfaces.IBeforeTraverseEvent"
   handler="z3c.traverser.stackinfo.applyStackConsumersHandler"
   />

Modified: z3c.traverser/trunk/src/z3c/traverser/stackinfo/testing/consumer.py
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/stackinfo/testing/consumer.py	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/src/z3c/traverser/stackinfo/testing/consumer.py	2009-02-02 15:11:34 UTC (rev 95978)
@@ -1,7 +1,7 @@
 from z3c.traverser.stackinfo.consumer import BaseConsumer
 from z3c.traverser.stackinfo import interfaces
 from zope import interface, component
-from zope.app.component.interfaces import ISite
+from zope.location.interfaces import ISite
 from zope.publisher.interfaces.browser import IBrowserRequest
 
 class KeyValueConsumer(BaseConsumer):

Modified: z3c.traverser/trunk/src/z3c/traverser/stackinfo/tests.py
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/stackinfo/tests.py	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/src/z3c/traverser/stackinfo/tests.py	2009-02-02 15:11:34 UTC (rev 95978)
@@ -2,12 +2,19 @@
 import unittest
 from zope.testing.doctestunit import DocFileSuite, DocFileSuite
 from zope.app.testing import setup
+from zope.component import provideAdapter
+from zope.interface import Interface
+from zope.publisher.interfaces.http import IHTTPRequest
 import zope.traversing.testing
 
+from z3c.traverser.stackinfo.traversing import UnconsumedURL
+
 def setUp(test):
     root = setup.placefulSetUp(True)
     zope.traversing.testing.setUp()
     test.globs['root'] = root
+    provideAdapter(UnconsumedURL, (Interface, IHTTPRequest), Interface,
+                   name='unconsumed_url')
 
 def tearDown(test):
     setup.placefulTearDown()

Modified: z3c.traverser/trunk/src/z3c/traverser/stackinfo/traversing.py
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/stackinfo/traversing.py	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/src/z3c/traverser/stackinfo/traversing.py	2009-02-02 15:11:34 UTC (rev 95978)
@@ -1,10 +1,13 @@
+import urllib
+
 from zope import component
-import interfaces
+from zope.proxy import sameProxiedObjects
+from zope.publisher.browser import BrowserView
 from zope.publisher.interfaces import NotFound
 from zope.traversing.browser.absoluteurl import absoluteURL
-import urllib
-from zope.publisher.browser import BrowserView
 
+import interfaces
+
 CONSUMERS_ANNOTATION_KEY='z3c.traverser.consumers'
 CONSUMED_ANNOTATION_KEY='z3c.traverser.consumed'
 
@@ -38,7 +41,7 @@
         request.annotations[CONSUMERS_ANNOTATION_KEY] = []
     else:
         for obj, consumed in request.annotations[CONSUMED_ANNOTATION_KEY]:
-            if obj == context:
+            if sameProxiedObjects(obj, context):
                 return
     orgStack = request.getTraversalStack()
     cons = [cons for name, cons in getStackConsumers(
@@ -89,7 +92,7 @@
     return url
 
 class UnconsumedURL(BrowserView):
-    # XXX test this
+
     def __unicode__(self):
         return urllib.unquote(self.__str__()).decode('utf-8')
 
@@ -98,7 +101,6 @@
 
     __call__ = __str__
 
-
 class VHStack:
     """Helper class to work around the special case with virtual hosts"""
 

Deleted: z3c.traverser/trunk/src/z3c/traverser/stackinfo/z3c.traverser.stackinfo-configure.zcml
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/stackinfo/z3c.traverser.stackinfo-configure.zcml	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/src/z3c/traverser/stackinfo/z3c.traverser.stackinfo-configure.zcml	2009-02-02 15:11:34 UTC (rev 95978)
@@ -1 +0,0 @@
-<include package="z3c.traverser.stackinfo"/>
\ No newline at end of file

Modified: z3c.traverser/trunk/src/z3c/traverser/viewlet/ftesting.zcml
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/viewlet/ftesting.zcml	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/src/z3c/traverser/viewlet/ftesting.zcml	2009-02-02 15:11:34 UTC (rev 95978)
@@ -104,7 +104,7 @@
       />
 
   <browser:viewlet
-      for="zope.app.component.interfaces.ISite"
+      for="zope.location.interfaces.ISite"
       name="OuterViewlet"
       manager=".app.IOuterManager"
       class=".app.OuterViewlet"
@@ -117,7 +117,7 @@
       />
 
   <browser:viewlet
-      for="zope.app.component.interfaces.ISite"
+      for="zope.location.interfaces.ISite"
       name="InnerViewlet"
       manager=".app.IInnerManager"
       class=".app.InnerViewlet"
@@ -130,7 +130,7 @@
       />
 
   <browser:viewlet
-      for="zope.app.component.interfaces.ISite"
+      for="zope.location.interfaces.ISite"
       name="MostInnerViewlet"
       manager=".app.IMostInnerManager"
       class=".app.MostInnerViewlet"

Deleted: z3c.traverser/trunk/src/z3c/traverser/viewlet/z3c.traverser.viewlet-configure.zcml
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/viewlet/z3c.traverser.viewlet-configure.zcml	2009-02-02 14:31:08 UTC (rev 95977)
+++ z3c.traverser/trunk/src/z3c/traverser/viewlet/z3c.traverser.viewlet-configure.zcml	2009-02-02 15:11:34 UTC (rev 95978)
@@ -1 +0,0 @@
-<include package="z3c.traverser.viewlet"/>
\ No newline at end of file



More information about the Checkins mailing list