[z3-checkins] r5700 - in z3/Five/branch/dc-experiments: . demo/FiveViewsDemo tests

dreamcatcher at codespeak.net dreamcatcher at codespeak.net
Tue Jul 27 02:04:00 MEST 2004


Author: dreamcatcher
Date: Tue Jul 27 02:03:59 2004
New Revision: 5700

Modified:
   z3/Five/branch/dc-experiments/browser.py
   z3/Five/branch/dc-experiments/demo/FiveViewsDemo/simplecontent.py
   z3/Five/branch/dc-experiments/fiveconfigure.py
   z3/Five/branch/dc-experiments/resource.py
   z3/Five/branch/dc-experiments/tests/test_five.py
   z3/Five/branch/dc-experiments/traversable.py
Log:
Fix publishing of resources. Add functional tests for file and image resources.

Modified: z3/Five/branch/dc-experiments/browser.py
==============================================================================
--- z3/Five/branch/dc-experiments/browser.py	(original)
+++ z3/Five/branch/dc-experiments/browser.py	Tue Jul 27 02:03:59 2004
@@ -35,15 +35,18 @@
 
 InitializeClass(BrowserView)
 
-class AbsoluteURL(BrowserView):
+class AbsoluteURL:
     """An adapter for Zope3-style absolute_url
     view using Zope2 methods
     """
 
+    def __init__(self, context, request):
+        self.context, self.request = context, request
+
     implements(IAbsoluteURL)
 
     def __str__(self):
-        context = self.context
+        context = aq_inner(self.context)
         return context.absolute_url()
 
     __call__ = __str__

Modified: z3/Five/branch/dc-experiments/demo/FiveViewsDemo/simplecontent.py
==============================================================================
--- z3/Five/branch/dc-experiments/demo/FiveViewsDemo/simplecontent.py	(original)
+++ z3/Five/branch/dc-experiments/demo/FiveViewsDemo/simplecontent.py	Tue Jul 27 02:03:59 2004
@@ -2,12 +2,12 @@
 
 from OFS.SimpleItem import SimpleItem
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
-from Products.Five.api import Viewable
+from Products.Five.api import Traversable
 
 from interfaces import ISimpleContent
 from helpers import add_and_edit
 
-class SimpleContent(SimpleItem, Viewable):
+class SimpleContent(SimpleItem, Traversable):
     """A Simple Content"""
 
     implements(ISimpleContent)

Modified: z3/Five/branch/dc-experiments/fiveconfigure.py
==============================================================================
--- z3/Five/branch/dc-experiments/fiveconfigure.py	(original)
+++ z3/Five/branch/dc-experiments/fiveconfigure.py	Tue Jul 27 02:03:59 2004
@@ -75,6 +75,7 @@
     # didn't bother with the base classes __bobo_traverse__ anyway and
     # we step __fallback_traverse__.
     if (hasattr(class_, '__five_traversable__') and
+        hasattr(class_, '__dict__') and
         not class_.__dict__.has_key('__bobo_traverse__')):
         return
 

Modified: z3/Five/branch/dc-experiments/resource.py
==============================================================================
--- z3/Five/branch/dc-experiments/resource.py	(original)
+++ z3/Five/branch/dc-experiments/resource.py	Tue Jul 27 02:03:59 2004
@@ -14,6 +14,7 @@
 import os
 
 from Acquisition import Explicit, aq_inner, aq_parent
+from ComputedAttribute import ComputedAttribute
 from browser import BrowserView
 from OFS.Traversable import Traversable as OFSTraversable
 from zope.exceptions import NotFoundError
@@ -40,13 +41,12 @@
 
     def __call__(self):
         name = self.__name__
-        if name.startswith('++resource++'):
-            name = name[12:]
         container = aq_parent(self)
 
         url = str(getViewProviding(container, IAbsoluteURL, self.request))
-        return "%s/++resource++%s" % (url, name)
-
+        if not '++resource++' in url:
+            name = '++resource++%s' % name
+        return "%s/%s" % (url, name)
 
 class PageTemplateResource(BrowserView, Resource):
 
@@ -65,7 +65,7 @@
     #implements(IBrowserPublisher)
 
     def __browser_default__(self, request):
-        return self, (request.method,)
+        return self, (request.REQUEST_METHOD,)
 
     def GET(self):
         """Default content"""
@@ -77,7 +77,7 @@
         # HTTP If-Modified-Since header handling. This is duplicated
         # from OFS.Image.Image - it really should be consolidated
         # somewhere...
-        header = request.getHeader('If-Modified-Since', None)
+        header = request.environ.get('If-Modified-Since', None)
         if header is not None:
             header = header.split(';')[0]
             # Some proxies seem to send invalid date strings for this
@@ -175,7 +175,10 @@
     default_factory = FileResourceFactory
 
     def getId(self):
-        return self.__name__
+        name = self.__name__
+        if not name.startswith('++resource++'):
+            name = '++resource++%s' % self.__name__
+        return name
 
     def __browser_default__(self, request):
         '''See interface IBrowserPublisher'''
@@ -198,7 +201,6 @@
         ext = name.split('.')[-1]
         factory = self.resource_factories.get(ext, self.default_factory)
         resource = factory(name, filename)(self.request)
-        resource.__parent__ = self
         resource.__name__ = name
         # XXX __of__ wrapping is usually done on traversal.
         # However, we don't want to subclass Traversable (or do we?)

Modified: z3/Five/branch/dc-experiments/tests/test_five.py
==============================================================================
--- z3/Five/branch/dc-experiments/tests/test_five.py	(original)
+++ z3/Five/branch/dc-experiments/tests/test_five.py	Tue Jul 27 02:03:59 2004
@@ -13,10 +13,14 @@
 ZopeTestCase.installProduct('FiveTest')
 ZopeTestCase.installProduct('Five')
 
+from zope.component import getViewProviding
+from zope.app.traversing.browser.interfaces import IAbsoluteURL
+
 from Products.FiveTest.classes import Adaptable, Origin
 from Products.FiveTest.interfaces import IAdapted, IDestination
 from Products.FiveTest.browser import SimpleContentView
 from Products.Five.resource import Resource
+from Products.Five.traversable import FakeRequest
 
 from Products import FiveTest
 _prefix = os.path.dirname(FiveTest.__file__)
@@ -119,7 +123,7 @@
     def test_macro_access(self):
         view = self.folder.unrestrictedTraverse('testoid/seagull.html')
         self.assertEquals('<html><head><title>bird macro</title></head><body>Color: gray</body></html>\n', view())
- 
+
     # this doesn't work; it looks like Zope 3 security gets involved,
     # but I do not yet understand where this could be.
 ##     def test_repeat_iterator(self):
@@ -159,6 +163,9 @@
         for r in dir_resource_names:
             resource = self.folder.unrestrictedTraverse(base % r)
             self.assert_(isinstance(resource, Resource))
+        abs_url = self.folder.unrestrictedTraverse(base % '')()
+        expected = 'http://nohost/test_folder_1_/testoid/++resource++fivetest_resources'
+        self.assertEquals(abs_url, expected)
 
     def test_breadcrumbs(self):
         view = self.folder.unrestrictedTraverse('testoid/@@absolute_url')
@@ -208,7 +215,6 @@
         self.folder.manage_addProduct['FiveTest'].manage_addFancyContent(
             'fancy')
 
-
         # check if the old bobo_traverse method can still kick in
         response = self.publish('/test_folder_1_/fancy/something-else')
         self.assertEquals('something-else', response.getBody())
@@ -217,6 +223,15 @@
         response = self.publish('/test_folder_1_/fancy/fancy')
         self.assertEquals("Fancy, fancy", response.getBody())
 
+    def test_publish_image_resource(self):
+        url = '/test_folder_1_/testoid/++resource++pattern.png'
+        response = self.publish(url, basic='manager:r00t')
+        self.assertEquals(200, response.getStatus())
+
+    def test_publish_file_resource(self):
+        url = '/test_folder_1_/testoid/++resource++style.css'
+        response = self.publish(url, basic='manager:r00t')
+        self.assertEquals(200, response.getStatus())
 
 def test_suite():
     suite = unittest.TestSuite()

Modified: z3/Five/branch/dc-experiments/traversable.py
==============================================================================
--- z3/Five/branch/dc-experiments/traversable.py	(original)
+++ z3/Five/branch/dc-experiments/traversable.py	Tue Jul 27 02:03:59 2004
@@ -16,9 +16,12 @@
 from zope.publisher.interfaces.browser import IBrowserRequest
 from zope.app.traversing.interfaces import ITraverser, ITraversable
 from zope.app.traversing.adapters import DefaultTraversable
+from zope.app.traversing.adapters import traversePathElement
 from zope.app.traversing.namespace import queryResourceInContext
 from monkey import DebugFlags
 
+_marker = object
+
 class FakeRequest:
     implements(IBrowserRequest)
 
@@ -68,6 +71,7 @@
             pass
         return self.__fallback_traverse__(REQUEST, name)
 
+
 class FiveTraversable(DefaultTraversable):
 
     def traverse(self, name, furtherPath):
@@ -79,7 +83,7 @@
             REQUEST = FakeRequest()
         # Try to lookup a view first
         try:
-            return getView(context, name, REQUEST).__of__(context)
+            return getView(context, name, REQUEST)
         except ComponentLookupError:
             pass
         # If a view can't be found, then use default traversable


More information about the z3-checkins mailing list