[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