Re: [Zope-dev] [Checkins] SVN: zope.traversing/trunk/src/zope/traversing/ Moved the publicationtraverse module from zope.app.publication and added tests.

2009-06-22 Thread Jim Fulton

On Jun 21, 2009, at 3:38 PM, Laurence Rowe wrote:

 Jim Fulton wrote:
 I don't agree. The semantics are different. For example, you often
 want to traverse to things in a template that you don't want to  
 expose
 via URL.  We currently (or last time I checked) expose ++resource+
 +name in URLs and this is a bug.

 What use is a resource without being URL accessible? It's used fairly
 often in Plone products to expose static css / js / images.


The way to access a resource in a URL is site/@@/name, as Hanno  
mentioned.  The ++resource++name form is intended for use in ZPT  
paths.  It can be used anywhere in a path, which defeats effective  
caching of resources.

Jim


--
Jim Fulton
Zope Corporation


___
Zope-Dev maillist  -  Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )


Re: [Zope-dev] [Checkins] SVN: zope.traversing/trunk/src/zope/traversing/ Moved the publicationtraverse module from zope.app.publication and added tests.

2009-06-21 Thread Christian Theune
On Sat, 2009-06-20 at 13:04 -0600, Shane Hathaway wrote:
 Jim Fulton wrote:
  Why?  traverseName is part of zope.app.publication's implementation.   
  Now it's oddly split off in a very separate package.
 
 The publisher traversal code is very similar to the code in
 zope.traversing, so I thought the best thing to do is put it in the same
 package as zope.traversing, so that traversal would be maintained in one
 place.

I think there's a valid goal around here. Publisher traversal and
traversal as used in templates have two different implementations that
partly overlap at some points and its hard to explain why there are two
of them. 

I'm not sure whether we can get a single unified implementation, but for
me that would be nice.

Christian

-- 
Christian Theune · c...@gocept.com
gocept gmbh  co. kg · forsterstraße 29 · 06112 halle (saale) · germany
http://gocept.com · tel +49 345 1229889 7 · fax +49 345 1229889 1
Zope and Plone consulting and development


signature.asc
Description: This is a digitally signed message part
___
Zope-Dev maillist  -  Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )


Re: [Zope-dev] [Checkins] SVN: zope.traversing/trunk/src/zope/traversing/ Moved the publicationtraverse module from zope.app.publication and added tests.

2009-06-21 Thread Jim Fulton

On Jun 20, 2009, at 1:10 PM, Jim Fulton wrote:

 Why?  traverseName is part of zope.app.publication's  
 implementation.  Now it's oddly split off in a very separate  
 package. This makes customizing publication behavior more difficult.  
 I recently made proxying overridable and missed traverseName.

 This should be moved back to zope.app.publication. The only other  
 thing that uses this is zope.app.publsher.browser.menu. That can and  
 should get to these methods via request.publication.

 Or, better yet, traverseRelativeURL and traversePath should be moved  
 to the browser module and should get traverseName from  
 request.publication.

 I'll go ahead and do this.


Unless something other than zope.app.publication.ZopePublication is  
using PublicationTraverser (or PublicationTraverse) as a base class.  
I'm guessing that this isn't likely.

The tests for PublicationTraverser either need it to provide  
traverseName or they need the request to have a publication that has  
traverseName. But the tests don't want to depend on  
zope.app.publication.

Also, traverseRelativeURL really wants to use the publication  
getDefaultTraversal method.

I'm going to wager that the intent of  
zope.traverser.publicationtraverse is *not* to provide a publication  
base class.  I'm going to refactor the tests so that they have a test  
publication with minimal traverseName and getDefaultTraversal.

Jim

--
Jim Fulton
Zope Corporation


___
Zope-Dev maillist  -  Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )


Re: [Zope-dev] [Checkins] SVN: zope.traversing/trunk/src/zope/traversing/ Moved the publicationtraverse module from zope.app.publication and added tests.

2009-06-21 Thread Jim Fulton

On Jun 21, 2009, at 5:36 AM, Christian Theune wrote:

 On Sat, 2009-06-20 at 13:04 -0600, Shane Hathaway wrote:
 Jim Fulton wrote:
 Why?  traverseName is part of zope.app.publication's implementation.
 Now it's oddly split off in a very separate package.

 The publisher traversal code is very similar to the code in
 zope.traversing, so I thought the best thing to do is put it in the  
 same
 package as zope.traversing, so that traversal would be maintained  
 in one
 place.

 I think there's a valid goal around here. Publisher traversal and
 traversal as used in templates have two different implementations that
 partly overlap at some points and its hard to explain why there are  
 two
 of them.

 I'm not sure whether we can get a single unified implementation, but  
 for
 me that would be nice.


I don't agree. The semantics are different. For example, you often  
want to traverse to things in a template that you don't want to expose  
via URL.  We currently (or last time I checked) expose ++resource+ 
+name in URLs and this is a bug.

The only place this traversal code is used outside of publication is  
by the browser menu code that tries to traverse to a menu item to see  
if it is accessible to the user.  This was to avoid having to put  
security declarations on menu items (a worthy goal) but we've found  
that this entailed far too much expense and complexity.  I'm not sure  
anyone is even using this menu code any more and if they are, I bet  
they are or should be making explicit security declarations.

Jim

--
Jim Fulton
Zope Corporation


___
Zope-Dev maillist  -  Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )


Re: [Zope-dev] [Checkins] SVN: zope.traversing/trunk/src/zope/traversing/ Moved the publicationtraverse module from zope.app.publication and added tests.

2009-06-21 Thread Jim Fulton
Gaaa.  As I did deeper, it's even more muddled that I feared.  I'll  
start a separate thread.

Jim

On Jun 21, 2009, at 8:48 AM, Jim Fulton wrote:


 On Jun 21, 2009, at 5:36 AM, Christian Theune wrote:

 On Sat, 2009-06-20 at 13:04 -0600, Shane Hathaway wrote:
 Jim Fulton wrote:
 Why?  traverseName is part of zope.app.publication's  
 implementation.
 Now it's oddly split off in a very separate package.

 The publisher traversal code is very similar to the code in
 zope.traversing, so I thought the best thing to do is put it in the
 same
 package as zope.traversing, so that traversal would be maintained
 in one
 place.

 I think there's a valid goal around here. Publisher traversal and
 traversal as used in templates have two different implementations  
 that
 partly overlap at some points and its hard to explain why there are
 two
 of them.

 I'm not sure whether we can get a single unified implementation, but
 for
 me that would be nice.


 I don't agree. The semantics are different. For example, you often
 want to traverse to things in a template that you don't want to expose
 via URL.  We currently (or last time I checked) expose ++resource+
 +name in URLs and this is a bug.

 The only place this traversal code is used outside of publication is
 by the browser menu code that tries to traverse to a menu item to see
 if it is accessible to the user.  This was to avoid having to put
 security declarations on menu items (a worthy goal) but we've found
 that this entailed far too much expense and complexity.  I'm not sure
 anyone is even using this menu code any more and if they are, I bet
 they are or should be making explicit security declarations.

 Jim

 --
 Jim Fulton
 Zope Corporation


 ___
 Zope-Dev maillist  -  Zope-Dev@zope.org
 http://mail.zope.org/mailman/listinfo/zope-dev
 **  No cross posts or HTML encoding!  **
 (Related lists -
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )

--
Jim Fulton
Zope Corporation


___
Zope-Dev maillist  -  Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )


Re: [Zope-dev] [Checkins] SVN: zope.traversing/trunk/src/zope/traversing/ Moved the publicationtraverse module from zope.app.publication and added tests.

2009-06-21 Thread Laurence Rowe
Jim Fulton wrote:
 I don't agree. The semantics are different. For example, you often  
 want to traverse to things in a template that you don't want to expose  
 via URL.  We currently (or last time I checked) expose ++resource+ 
 +name in URLs and this is a bug.

What use is a resource without being URL accessible? It's used fairly 
often in Plone products to expose static css / js / images.

Laurence

___
Zope-Dev maillist  -  Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )


Re: [Zope-dev] [Checkins] SVN: zope.traversing/trunk/src/zope/traversing/ Moved the publicationtraverse module from zope.app.publication and added tests.

2009-06-21 Thread Hanno Schlichting
On Sun, Jun 21, 2009 at 9:38 PM, Laurence Rowel...@lrowe.co.uk wrote:
 Jim Fulton wrote:
 I don't agree. The semantics are different. For example, you often
 want to traverse to things in a template that you don't want to expose
 via URL.  We currently (or last time I checked) expose ++resource+
 +name in URLs and this is a bug.

 What use is a resource without being URL accessible? It's used fairly
 often in Plone products to expose static css / js / images.

You are a victim of Five here and the different semantics of it
compared to zope.app.publisher.

In zope.app.publisher the url for a resource is something like:

site url/@@/name

where site url is basically IAbsoluteURL for zope.site.getSite().

In Zope2 / Five we have:

context url/++resource++name

instead.

The expression used in page templates to access resources is the same, though.

The reason for this semantic difference is entirely historical. Five
didn't support local component registries / sites at the time when
support for resources have been added. This all happened before those
local registries where simplified in one of the early Zope 3.x
releases.

Hanno
___
Zope-Dev maillist  -  Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )


Re: [Zope-dev] [Checkins] SVN: zope.traversing/trunk/src/zope/traversing/ Moved the publicationtraverse module from zope.app.publication and added tests.

2009-06-20 Thread Jim Fulton
Why?  traverseName is part of zope.app.publication's implementation.   
Now it's oddly split off in a very separate package. This makes  
customizing publication behavior more difficult. I recently made  
proxying overridable and missed traverseName.

This should be moved back to zope.app.publication. The only other  
thing that uses this is zope.app.publsher.browser.menu. That can and  
should get to these methods via request.publication.

Or, better yet, traverseRelativeURL and traversePath should be moved  
to the browser module and should get traverseName from  
request.publication.

I'll go ahead and do this.

Jim


On May 22, 2009, at 8:35 PM, Shane Hathaway wrote:

 Log message for revision 100262:
  Moved the publicationtraverse module from zope.app.publication and  
 added tests.


 Changed:
  A   zope.traversing/trunk/src/zope/traversing/publicationtraverse.py
  A   zope.traversing/trunk/src/zope/traversing/tests/ 
 test_publicationtraverse.py

 -=-
 Added: zope.traversing/trunk/src/zope/traversing/ 
 publicationtraverse.py
 ===
 --- zope.traversing/trunk/src/zope/traversing/ 
 publicationtraverse.py(rev 0)
 +++ zope.traversing/trunk/src/zope/traversing/publicationtraverse.py   
 2009-05-23 00:35:46 UTC (rev 100262)
 @@ -0,0 +1,129 @@
 + 
 ##
 +#
 +# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
 +# All Rights Reserved.
 +#
 +# This software is subject to the provisions of the Zope Public  
 License,
 +# Version 2.1 (ZPL).  A copy of the ZPL should accompany this  
 distribution.
 +# THIS SOFTWARE IS PROVIDED AS IS AND ANY AND ALL EXPRESS OR  
 IMPLIED
 +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE  
 IMPLIED
 +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND  
 FITNESS
 +# FOR A PARTICULAR PURPOSE.
 +#
 + 
 ##
 +Publication Traverser
 +
 +$Id: publicationtraverse.py 67630 2006-04-27 00:54:03Z jim $
 +
 +__docformat__ = 'restructuredtext'
 +from types import StringTypes
 +
 +from zope.component import queryMultiAdapter
 +from zope.publisher.interfaces import NotFound
 +from zope.security.checker import ProxyFactory
 +from zope.traversing.namespace import namespaceLookup
 +from zope.traversing.namespace import nsParse
 +from zope.traversing.interfaces import TraversalError
 +from zope.publisher.interfaces import IPublishTraverse
 +from zope.publisher.interfaces.browser import IBrowserPublisher
 +
 +class DuplicateNamespaces(Exception):
 +More than one namespace was specified in a request
 +
 +class UnknownNamespace(Exception):
 +A parameter specified an unknown namespace
 +
 +class PublicationTraverser(object):
 +Traversal used for publication.
 +
 +The significant differences from
 +zope.traversing.adapters.traversePathElement() are:
 +
 +- Instead of adapting each traversed object to ITraversable, this
 +  version multi-adapts (ob, request) to IPublishTraverse.
 +
 +- This version wraps a security proxy around each traversed  
 object.
 +
 +- This version raises NotFound rather than LocationError.
 +
 +- This version has a method, traverseRelativeURL(), that
 +  supports browserDefault traversal.
 +
 +
 +def traverseName(self, request, ob, name):
 +nm = name # the name to look up the object with
 +
 +if name and name[:1] in '@+':
 +# Process URI segment parameters.
 +ns, nm = nsParse(name)
 +if ns:
 +try:
 +ob2 = namespaceLookup(ns, nm, ob, request)
 +except TraversalError:
 +raise NotFound(ob, name)
 +
 +return ProxyFactory(ob2)
 +
 +if nm == '.':
 +return ob
 +
 +if IPublishTraverse.providedBy(ob):
 +ob2 = ob.publishTraverse(request, nm)
 +else:
 +# self is marker
 +adapter = queryMultiAdapter((ob, request),  
 IPublishTraverse,
 +default=self)
 +if adapter is not self:
 +ob2 = adapter.publishTraverse(request, nm)
 +else:
 +raise NotFound(ob, name, request)
 +
 +return ProxyFactory(ob2)
 +
 +def traversePath(self, request, ob, path):
 +
 +if isinstance(path, StringTypes):
 +path = path.split('/')
 +if len(path)  1 and not path[-1]:
 +# Remove trailing slash
 +path.pop()
 +else:
 +path = list(path)
 +
 +# Remove single dots
 +path = [x for x in path if x != '.']
 +
 +path.reverse()
 +
 +# Remove double dots
 +while '..' in path:
 +l = path.index('..')
 +if l  0 or l+2  len(path):
 +  

Re: [Zope-dev] [Checkins] SVN: zope.traversing/trunk/src/zope/traversing/ Moved the publicationtraverse module from zope.app.publication and added tests.

2009-06-20 Thread Shane Hathaway
Jim Fulton wrote:
 Why?  traverseName is part of zope.app.publication's implementation.   
 Now it's oddly split off in a very separate package.

The publisher traversal code is very similar to the code in
zope.traversing, so I thought the best thing to do is put it in the same
package as zope.traversing, so that traversal would be maintained in one
place.

 Or, better yet, traverseRelativeURL and traversePath should be moved  
 to the browser module and should get traverseName from  
 request.publication.
 
 I'll go ahead and do this.

That's fine.

Shane
___
Zope-Dev maillist  -  Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )