[Zope-Checkins] CVS: Zope/lib/python/OFS - Folder.py:1.94.60.1 ObjectManager.py:1.141.6.2 SimpleItem.py:1.91.4.2 SimpleItemInterfaces.py:1.1.2.2 Traversable.py:1.8.20.2
Shane Hathaway
shane@digicool.com
Thu, 27 Sep 2001 17:17:55 -0400
Update of /cvs-repository/Zope/lib/python/OFS
In directory cvs.zope.org:/tmp/cvs-serv5757
Modified Files:
Tag: ComponentArchitecture-branch
Folder.py ObjectManager.py SimpleItem.py
SimpleItemInterfaces.py Traversable.py
Log Message:
Got component factories to work.
=== Zope/lib/python/OFS/Folder.py 1.94 => 1.94.60.1 ===
a management interface and can have arbitrary properties.
"""
- __implements__ = (WriteLockInterface,)
+ __implements__ = (ObjectManager.ObjectManager.__implements__,
+ WriteLockInterface)
meta_type='Folder'
_properties=({'id':'title', 'type': 'string'},)
=== Zope/lib/python/OFS/ObjectManager.py 1.141.6.1 => 1.141.6.2 ===
import App.Management, Acquisition, Globals, CopySupport, Products
import os, App.FactoryDispatcher, re, Products
-from OFS.Traversable import Traversable
+from OFS.Traversable import Traversable, getURLOf
from Globals import DTMLFile, Persistent
from Globals import MessageDialog, default__class_init__
from webdav.NullResource import NullResource
@@ -104,9 +104,11 @@
from zLOG import LOG, ERROR
import sys,string,fnmatch,copy
from App.ZopeComponents import listAddableTypes, AdderEntry, \
- convertMetaTypeList
+ convertMetaTypeList, Adder
from ZPublisher.Browser import BrowserPublish
import ComponentArchitecture
+from SimpleItemInterfaces import ObjectManagerInterface
+
import XMLExportImport
customImporters={
@@ -180,6 +182,8 @@
This class provides core behavior for collections of heterogeneous objects.
"""
+ __implements__ = ObjectManagerInterface
+
__ac_permissions__=(
('View management screens', ('manage_main','manage_menu')),
('Access contents information',
@@ -321,7 +325,8 @@
object=self._getOb(id)
if set_owner:
- object.manage_fixupOwnershipAfterAdd()
+ if hasattr(object, 'manage_fixupOwnershipAfterAdd'):
+ object.manage_fixupOwnershipAfterAdd()
# Try to give user the local role "Owner", but only if
# no local roles have been set on the object yet.
@@ -332,7 +337,8 @@
if name != 'Anonymous User':
object.manage_setLocalRoles(name, ['Owner'])
- object.manage_afterAdd(object, self)
+ if hasattr(object, 'manage_afterAdd'):
+ object.manage_afterAdd(object, self)
return id
def manage_afterAdd(self, item, container):
@@ -732,6 +738,43 @@
return (self, ())
else:
return p.__browser_default__(request)
+
+
+class ObjectManagerAdder (Acquisition.Explicit):
+ """
+ """
+ id = None
+
+ __implements__ = Adder, BrowserPublish
+
+ def addToContainer(self, ob, id=None):
+ if id is None:
+ id = self.id
+ self.aq_parent._setObject(id, ob)
+
+ def resultAfterAdd(self):
+ request = Acquisition.aq_get(self, 'REQUEST', None, 1)
+ request.response.redirect(getURLOf(self.aq_parent) + '/manage_main')
+ return ''
+## return self.aq_parent.manage_workspace(request)
+
+ def __bobo_traverse__(self, request, name):
+ if name[:3] == '(p)':
+ return ComponentArchitecture.getPresentation(
+ self, name[3:], BrowserPublish)
+ elif name[:4] == '(id)':
+ self.id = name[4:]
+ return self
+ else:
+ raise 'NotFound'
+
+ def __browser_default__(self, request):
+ raise 'NotFound'
+
+
+ComponentArchitecture.providePresentation(
+ ObjectManagerInterface, 'add', BrowserPublish,
+ ObjectManagerAdder().__of__)
def findChilds(obj,dirname=''):
=== Zope/lib/python/OFS/SimpleItem.py 1.91.4.1 => 1.91.4.2 ===
from Acquisition import aq_base
import time
-from SimpleItemInterfaces import SimpleItemInterfaces
+from SimpleItemInterfaces import SimpleItemInterface
import marshal
import ZDOM
@@ -119,7 +119,7 @@
):
"""A common base class for simple, non-container objects."""
- __implements__ = SimpleItemInterfaces
+ __implements__ = SimpleItemInterface
isPrincipiaFolderish=0
isTopLevelPrincipiaApplicationObject=0
=== Zope/lib/python/OFS/SimpleItemInterfaces.py 1.1.2.1 => 1.1.2.2 ===
-class SimpleItemInterfaces (Content):
+class SimpleItemInterface (Content):
+ """
+ """
+
+
+class ObjectManagerInterface (SimpleItemInterface):
"""
"""
=== Zope/lib/python/OFS/Traversable.py 1.8.20.1 => 1.8.20.2 ===
return ob
+
def getPhysicalPathOf(ob):
r = []
while ob is not None:
@@ -123,13 +124,35 @@
elif hasattr(base, '__name__'):
r.append(ob.__name__)
if hasattr(base, 'im_self'):
- # SECURITY HOLE: im_self can be impersonated.
+ # XXX SECURITY HOLE: im_self can be impersonated.
ob = ob.im_self
else:
ob = aq_parent(aq_inner(ob))
r.append('')
r.reverse()
- return tuple(r)
+ return tuple(r)
+
+
+def getURLOf(ob, relative=0):
+ try:
+ req = aq_get(ob, 'REQUEST', None, 1)
+ if req is None:
+ req = {}
+ except AttributeError:
+ req = {}
+ rpp = req.get('VirtualRootPhysicalPath', ('',))
+ spp = getPhysicalPathOf(ob)
+ i = 0
+ for name in rpp[:len(spp)]:
+ if spp[i] == name:
+ i = i + 1
+ else:
+ break
+ path = map(quote, spp[i:])
+ if relative:
+ # This is useful for physical path relative to a VirtualRoot
+ return join(path, '/')
+ return join([req['SERVER_URL']] + req._script + path, '/')
class Traversable: