[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