[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/OFS/Folder - FolderAdder.py:1.1.2.5 FolderContents.py:1.1.2.3 folder.zcml:1.1.2.5 remove_confirmed.pt:NONE
Jim Fulton
jim@zope.com
Mon, 4 Mar 2002 11:55:35 -0500
Update of /cvs-repository/Zope3/lib/python/Zope/App/OFS/Folder
In directory cvs.zope.org:/tmp/cvs-serv14494
Modified Files:
Tag: Zope-3x-branch
FolderAdder.py FolderContents.py folder.zcml
Removed Files:
Tag: Zope-3x-branch
remove_confirmed.pt
Log Message:
Refactored Folder (partially) to use Container framework.
Note that we are not reusing the Container content implementation (at
least for now), but we *are* reusing it's test.
=== Zope3/lib/python/Zope/App/OFS/Folder/FolderAdder.py 1.1.2.4 => 1.1.2.5 ===
"""
-import os
-
-from Zope.Publisher.Browser.AttributePublisher import AttributePublisher
-from Zope.Publisher.Browser.IBrowserPublisher import IBrowserPublisher
-from Zope.PageTemplate.PageTemplateFile import PageTemplateFile
+from Zope.App.OFS.Container.Views.Browser.Adder import ContainerAdder
from Zope.App.ZMI.Addable import ContentAddables
-from Zope.ComponentArchitecture import createObject
-
-class FolderAdderError( Exception ):
- pass
-
-class DuplicateIDError( FolderAdderError ):
- pass
-
-class FolderAdder( AttributePublisher ):
-
- __implements__ = AttributePublisher.__implements__
-
- def __init__( self, folder ):
- self._folder = folder
-
-
- def _listAddables( self ):
- """
- Derived classes override this to change the registry
- in which factories are looked up.
- """
- return ContentAddables.getAddables( self._folder )
-
- def listAddableInfo( self ):
- """
- Return a sequence of mappings for the addables for our
- folder.
- """
- return self._listAddables()
-
- def action( self, id, type_name, REQUEST=None):
- """
- Instantiate an object and put it in our folder.
- """
- if id in self._folder.objectIds():
- raise DuplicateIDError, "ID '%s' already in use." % id
- self._folder.setObject( id, createObject( self._folder, type_name ) )
-
- # XXX: This is horribly broken, but I can't do better until
- # we have a way to compute absolute URLs.
- if REQUEST is not None:
- # for unit tests
- REQUEST['RESPONSE'].redirect(REQUEST['URL2'])
- return self.confirmed( type_name=type_name, id=id )
-
- #
- # Make it possible for 'index' to find the folder.
- #
- def getContext( self ):
- return self._folder
+class FolderAdder(ContainerAdder):
+ """Specialize addable list for service implemenations.
+ """
+ def _listAddables(self):
+ # Override to look up from the service class registry.
+ return ContentAddables.getAddables( self.getContext() )
- index = PageTemplateFile('add.pt')
- confirmed = PageTemplateFile('add_confirmed.pt')
=== Zope3/lib/python/Zope/App/OFS/Folder/FolderContents.py 1.1.2.2 => 1.1.2.3 ===
+#
+# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
+#
# This software is subject to the provisions of the Zope Public License,
-# Version 1.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# Version 2.0 (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.
-
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE
+#
+##############################################################################
"""
- Define view component for folder contents.
+
+Revision information: $Id$
"""
+
import os
-from Zope.Publisher.Browser.AttributePublisher import AttributePublisher
-from Zope.Publisher.Browser.IBrowserPublisher import IBrowserPublisher
from Zope.PageTemplate.PageTemplateFile import PageTemplateFile
-from Zope.App.Service.ServiceManager import ServiceManager
-
-class FolderContents( AttributePublisher ):
-
- __implements__ = AttributePublisher.__implements__
-
- def __init__( self, folder ):
- self._folder = folder
-
-
- def _extractContentInfo( self, item ):
- info = {}
- info['id'] = item[0]
- info['object'] = item[1]
+from Zope.App.OFS.ServiceManager.ServiceManager import ServiceManager
+from Zope.App.OFS.Container.Views.Browser.Contents import Contents
- # XXX: We will fake this stuff out for now
- info[ 'title' ] = info[ 'url' ] = item[0]
- info['icon'] = None
-
- return info
-
-
- def removeObjects(self, ids, REQUEST=None):
- """ """
- for id in ids:
- self.remove(id)
-
- # XXX: This is horribly broken, but I can't do better until
- # we have a way to compute absolute URLs.
- if REQUEST is not None:
- # for unit tests
- REQUEST['RESPONSE'].redirect(REQUEST['URL1'])
- return self.confirmRemoved()
-
-
- def remove( self, name, silent=0 ):
- """
- Remove the object stored under 'name', or raise a KeyError
- if no such object (pass non-zero 'silent' to suppress the
- exception).
- """
- try:
- self.getContext().delObject( name )
- except KeyError:
- if not silent:
- raise
- return self.confirmRemoved( name=name )
-
- def listContentInfo( self ):
-
- return map( self._extractContentInfo, self._folder.objectItems() )
+class FolderContents(Contents):
def addServiceManager(self, REQUEST=None):
"""Create a service manager then add it to the folder."""
@@ -77,11 +35,4 @@
if REQUEST is not None:
return self.index(REQUEST)
- #
- # Make it possible for 'index' to find the folder.
- #
- def getContext( self ):
- return self._folder
-
index = PageTemplateFile('main.pt')
- confirmRemoved = PageTemplateFile('remove_confirmed.pt')
=== Zope3/lib/python/Zope/App/OFS/Folder/folder.zcml 1.1.2.4 => 1.1.2.5 ===
description="Minimal folder" />
-<security:protectClass name="Zope.App.OFS.Folder.FolderContents."
- permission_id="Zope.View" methods="index" />
-
-<browser:defaultView name="contents"
- for="Zope.App.OFS.Folder.Folder.IFolder."
- factory="Zope.App.OFS.Folder.FolderContents." />
-
-<security:protectClass name="Zope.App.OFS.Folder.FolderAdder."
- permission_id="Zope.ManageContent"
- methods="index, confirmed, action, listAddableInfo" />
-
<security:protectClass name="Zope.App.OFS.Folder."
permission_id="Zope.View">
<security:instances permission_id="Zope.View" />
- <security:protect interface="Zope.ComponentArchitecture.IServiceManagerContainer."
- permission_id="Zope.ManageServices" />
+ <security:protect
+ interface="Zope.ComponentArchitecture.IServiceManagerContainer."
+ permission_id="Zope.ManageServices" />
</security:protectClass>
-
<security:protectClass name="Zope.App.OFS.Folder.FolderContents."
permission_id="Zope.ManageContent"
- methods="index, listContentInfo, remove, removeObjects, confirmRemoved, addServiceManager"/>
-
+ methods="index, listContentInfo, remove, removeObjects,
+ confirmRemoved, addServiceManager"/>
+
+<security:protectClass name="Zope.App.OFS.Folder.FolderAdder."
+ permission_id="Zope.ManageContent"
+ methods="index, confirmed, action, listAddableInfo" />
+
+<browser:defaultView name="contents"
+ for="Zope.App.OFS.Folder.Folder.IFolder."
+ factory="Zope.App.OFS.Folder.FolderContents." />
+
+<browser:defaultView name="contents"
+ for="Zope.App.OFS.Folder.Folder.IFolder."
+ factory="Zope.App.OFS.Folder.FolderContents." />
<browser:view name="adder"
=== Removed File Zope3/lib/python/Zope/App/OFS/Folder/remove_confirmed.pt ===