[z3-checkins] r17864 - in z3/Five/branch/castle-marker-utility: .
browser browser/tests utilities/browser
gotcha at codespeak.net
gotcha at codespeak.net
Sun Sep 25 19:33:53 CEST 2005
Author: gotcha
Date: Sun Sep 25 19:33:47 2005
New Revision: 17864
Modified:
z3/Five/branch/castle-marker-utility/CHANGES.txt
z3/Five/branch/castle-marker-utility/browser/__init__.py
z3/Five/branch/castle-marker-utility/browser/absoluteurl.py
z3/Five/branch/castle-marker-utility/browser/adding.py
z3/Five/branch/castle-marker-utility/browser/configure.zcml
z3/Five/branch/castle-marker-utility/browser/resource.py
z3/Five/branch/castle-marker-utility/browser/tests/test_absoluteurl.py
z3/Five/branch/castle-marker-utility/traversable.py
z3/Five/branch/castle-marker-utility/utilities/browser/edit_marker.pt
z3/Five/branch/castle-marker-utility/utilities/browser/markerview.py
Log:
* Views on views were added
* MarkerUtility provides access to IIntrospector
Modified: z3/Five/branch/castle-marker-utility/CHANGES.txt
==============================================================================
--- z3/Five/branch/castle-marker-utility/CHANGES.txt (original)
+++ z3/Five/branch/castle-marker-utility/CHANGES.txt Sun Sep 25 19:33:47 2005
@@ -7,6 +7,9 @@
Others
------
+* Views on views were added
+
+* MarkerUtility provides access to IIntrospector
* Removed backwards compatibility for some moved classes (AddForm, EditForm,
ContentAdding)
Modified: z3/Five/branch/castle-marker-utility/browser/__init__.py
==============================================================================
--- z3/Five/branch/castle-marker-utility/browser/__init__.py (original)
+++ z3/Five/branch/castle-marker-utility/browser/__init__.py Sun Sep 25 19:33:47 2005
@@ -19,7 +19,15 @@
from AccessControl import ClassSecurityInfo
from Globals import InitializeClass
-class BrowserView(Acquisition.Explicit):
+from zope.interface import implements
+
+from zope.app.publisher.interfaces.browser import IBrowserView
+
+from Products.Five.traversable import Traversable
+
+class BrowserView(Acquisition.Explicit, Traversable):
+ implements(IBrowserView)
+
security = ClassSecurityInfo()
def __init__(self, context, request):
Modified: z3/Five/branch/castle-marker-utility/browser/absoluteurl.py
==============================================================================
--- z3/Five/branch/castle-marker-utility/browser/absoluteurl.py (original)
+++ z3/Five/branch/castle-marker-utility/browser/absoluteurl.py Sun Sep 25 19:33:47 2005
@@ -19,6 +19,7 @@
from OFS.interfaces import ITraversable
from zope.interface import implements
+from zope.component import getView
from zope.app import zapi
from zope.app.traversing.browser.interfaces import IAbsoluteURL
@@ -35,9 +36,12 @@
self.context, self.request = context, request
def __str__(self):
+ return self._getContextAbsoluteUrl()
+
+ def _getContextAbsoluteUrl(self):
context = aq_inner(self.context)
return context.absolute_url()
-
+
__call__ = __str__
def breadcrumbs(self):
@@ -50,7 +54,7 @@
if container is None or self._isVirtualHostRoot() \
or not ITraversable.providedBy(container):
return (
- {'name': name, 'url': context.absolute_url()},)
+ {'name': name, 'url': self._getContextAbsoluteUrl()},)
view = zapi.getViewProviding(container, IAbsoluteURL, request)
base = tuple(view.breadcrumbs())
@@ -75,10 +79,25 @@
(original: zope.app.traversing.browser.absoluteurl)
"""
+ def _getContextAbsoluteUrl(self):
+ return self.context.absolute_url()
+
def breadcrumbs(self):
context = self.context
request = self.request
return ({'name': context.getId(),
- 'url': context.absolute_url()
+ 'url': self._getContextAbsoluteUrl()
},)
+
+class BrowserViewAbsoluteURL(AbsoluteURL):
+ """
+ views need to access inside the wrapper
+ """
+ def _getContextAbsoluteUrl(self):
+ viewed = self.context.aq_inner.aq_parent
+ #import pdb; pdb.set_trace()
+ viewed_url = getView(viewed, 'absolute_url', self.request)()
+ return viewed_url + '/' + self.context.__name__
+
+
Modified: z3/Five/branch/castle-marker-utility/browser/adding.py
==============================================================================
--- z3/Five/branch/castle-marker-utility/browser/adding.py (original)
+++ z3/Five/branch/castle-marker-utility/browser/adding.py Sun Sep 25 19:33:47 2005
@@ -35,7 +35,6 @@
from zExceptions import BadRequest
from Products.Five import BrowserView
-from Products.Five.traversable import Traversable
from Products.Five.browser.pagetemplatefile import ZopeTwoPageTemplateFile
from Acquisition import Implicit
@@ -201,7 +200,7 @@
return True
return False
-class ContentAdding(Adding, Traversable, SimpleItem):
+class ContentAdding(Adding, SimpleItem):
menu_id = "add_content"
Modified: z3/Five/branch/castle-marker-utility/browser/configure.zcml
==============================================================================
--- z3/Five/branch/castle-marker-utility/browser/configure.zcml (original)
+++ z3/Five/branch/castle-marker-utility/browser/configure.zcml Sun Sep 25 19:33:47 2005
@@ -1,5 +1,6 @@
<configure xmlns="http://namespaces.zope.org/zope"
- xmlns:browser="http://namespaces.zope.org/browser">
+ xmlns:browser="http://namespaces.zope.org/browser"
+ xmlns:five="http://namespaces.zope.org/five">
<serviceType
id="BrowserMenu"
@@ -30,6 +31,10 @@
provides="zope.app.traversing.browser.interfaces.IAbsoluteURL"
/>
+ <!-- register views as traversable in order to be able to traverse to
+ views on views (like absolute_url) -->
+
+
<browser:page
for="zope.app.traversing.interfaces.IContainmentRoot"
name="absolute_url"
@@ -46,6 +51,22 @@
provides="zope.app.traversing.browser.interfaces.IAbsoluteURL"
/>
+ <browser:page
+ for="zope.app.publisher.interfaces.browser.IBrowserView"
+ name="absolute_url"
+ class=".absoluteurl.BrowserViewAbsoluteURL"
+ permission="zope.Public"
+ allowed_interface="zope.app.traversing.browser.interfaces.IAbsoluteURL"
+ />
+
+ <view
+ for="zope.app.publisher.interfaces.browser.IBrowserView"
+ factory=".absoluteurl.BrowserViewAbsoluteURL"
+ type="zope.publisher.interfaces.http.IHTTPRequest"
+ permission="zope.Public"
+ provides="zope.app.traversing.browser.interfaces.IAbsoluteURL"
+ />
+
<browser:view
for="OFS.interfaces.IObjectManager"
name="+"
Modified: z3/Five/branch/castle-marker-utility/browser/resource.py
==============================================================================
--- z3/Five/branch/castle-marker-utility/browser/resource.py (original)
+++ z3/Five/branch/castle-marker-utility/browser/resource.py Sun Sep 25 19:33:47 2005
@@ -37,6 +37,11 @@
_marker = []
+def addResourceNamespace(name):
+ if not name.startswith('++resource++'):
+ name = '++resource++' + name
+ return name
+
class Resource(Explicit):
"""A publishable resource
"""
@@ -52,7 +57,7 @@
url = str(getViewProviding(container, IAbsoluteURL, self.request))
url = urllib.unquote(url)
if not isinstance(container, DirectoryResource):
- name = '++resource++%s' % name
+ name = addResourceNamespace(name)
return "%s/%s" % (url, name)
class PageTemplateResource(BrowserView, Resource):
@@ -129,7 +134,7 @@
resource = None
def __init__(self, name, path, resource_factory=None):
- self.__name = name
+ self.__name__ = name
self.__rsrc = self.factory(path, name)
if resource_factory is not None:
self.resource = resource_factory
@@ -193,10 +198,7 @@
self.REQUEST = request
def getId(self):
- name = self.__name__
- if not name.startswith('++resource++'):
- name = '++resource++%s' % self.__name__
- return name
+ return addResourceNamespace(self.__name__)
def __browser_default__(self, request):
'''See interface IBrowserPublisher'''
Modified: z3/Five/branch/castle-marker-utility/browser/tests/test_absoluteurl.py
==============================================================================
--- z3/Five/branch/castle-marker-utility/browser/tests/test_absoluteurl.py (original)
+++ z3/Five/branch/castle-marker-utility/browser/tests/test_absoluteurl.py Sun Sep 25 19:33:47 2005
@@ -38,6 +38,16 @@
>>> view()
'http://nohost/test_folder_1_/testoid'
+ Traversal to @@absolute_url of a view should work as well
+
+ >>> import Products.Five.browser.tests
+ >>> zcml.load_config('pages.zcml', package=Products.Five.browser.tests)
+ >>> from Products.Five.testing.simplecontent import manage_addSimpleContent
+ >>> manage_addSimpleContent(self.folder, 'testsc', 'Testsc')
+ >>> view_on_view = self.folder.unrestrictedTraverse('testsc/@@eagle.txt/@@absolute_url')
+ >>> view_on_view()
+ 'http://nohost/test_folder_1_/testsc/@@eagle.txt'
+
IAbsoluteURL also defines a breadcrumbs() method that returns a
simple Python structure:
Modified: z3/Five/branch/castle-marker-utility/traversable.py
==============================================================================
--- z3/Five/branch/castle-marker-utility/traversable.py (original)
+++ z3/Five/branch/castle-marker-utility/traversable.py Sun Sep 25 19:33:47 2005
@@ -72,8 +72,10 @@
# con Zope 3 into using Zope 2's checkPermission
newInteraction()
try:
- return ITraverser(self).traverse(
+ traversed = ITraverser(self).traverse(
path=[name], request=REQUEST).__of__(self)
+ traversed.__name__ = name
+ return traversed
except (ComponentLookupError, NotFoundError,
AttributeError, KeyError, NotFound):
pass
@@ -100,7 +102,9 @@
REQUEST = FakeRequest()
# Try to lookup a view first
try:
- return getView(context, name, REQUEST)
+ view = getView(context, name, REQUEST)
+ view.__name__ = name
+ return view
except ComponentLookupError:
pass
# If a view can't be found, then use default traversable
Modified: z3/Five/branch/castle-marker-utility/utilities/browser/edit_marker.pt
==============================================================================
--- z3/Five/branch/castle-marker-utility/utilities/browser/edit_marker.pt (original)
+++ z3/Five/branch/castle-marker-utility/utilities/browser/edit_marker.pt Sun Sep 25 19:33:47 2005
@@ -4,8 +4,7 @@
<head><title></title></head>
<body metal:define-macro='marker_edit'>
- <div metal:fill-slot="main"
- tal:define="errors view/state/getErrors">
+ <div tal:define="errors python:{}">
<h1 i18n:translate="heading_edit_marker">
Edit Marker Interfaces
@@ -21,7 +20,7 @@
action="."
method="post"
enctype="multipart/form-data"
- tal:attributes="action string:${context/getId}/${view/name}"
+ tal:attributes="action view/@@absolute_url"
tal:define="provided view/getDirectlyProvidedNames;
impl view/getProvidedNames"
>
Modified: z3/Five/branch/castle-marker-utility/utilities/browser/markerview.py
==============================================================================
--- z3/Five/branch/castle-marker-utility/utilities/browser/markerview.py (original)
+++ z3/Five/branch/castle-marker-utility/utilities/browser/markerview.py Sun Sep 25 19:33:47 2005
@@ -12,11 +12,11 @@
self.context_url = self.context.absolute_url()
- def _getLinkToInterfaceDetailsView(interfaceName):
+ def _getLinkToInterfaceDetailsView(self, interfaceName):
return (self.context_url +
'/view_details?iface=%s&type=zope.publisher.interfaces.browser.IBrowserRequest' % interfaceName)
- def _getNameLinkDicts(interfaceNames):
+ def _getNameLinkDicts(self, interfaceNames):
return [dict(name=name,
link=self._getLinkToInterfaceDetailsView(name))
for name in interfaceNames]
More information about the z3-checkins
mailing list