[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/OFS - FolderAdder.py:1.1.2.2 FolderContents.py:1.1.2.2

Tres Seaver tseaver@zope.com
Mon, 26 Nov 2001 16:10:25 -0500


Update of /cvs-repository/Zope3/lib/python/Zope/App/OFS
In directory cvs.zope.org:/tmp/cvs-serv22138

Modified Files:
      Tag: Zope-3x-branch
	FolderAdder.py FolderContents.py 
Log Message:


 - Make adding objects testable (use confirmation page).

 - Add tests for adding, and for duplicate IDs.

 - Add removal.

 - Add test for removal.


=== Zope3/lib/python/Zope/App/OFS/FolderAdder.py 1.1.2.1 => 1.1.2.2 ===
 from Zope.ComponentArchitecture import createObject, getPresentation
 
+class FolderAdderError( Exception ):
+    pass
+
+class DuplicateIDError( FolderAdderError ):
+    pass
+
 class FolderAdder( AttributePublisher ):
 
     __implements__ = AttributePublisher.__implements__
@@ -46,11 +52,12 @@
         """
             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.
-        return getPresentation( self._folder.getObject( id ),
-                 '', IBrowserPublisher ).index()
+        return self.confirmed( type_name=type_name, id=id )
 
     #
     #   Make it possible for 'index' to find the folder.
@@ -59,5 +66,9 @@
         return self._folder
 
     index = PageTemplateFile( 'folder_add.pt'
+                            , '%s/www' % os.path.dirname(__file__)
+                            )
+
+    confirmed = PageTemplateFile( 'folder_add_confirmed.pt'
                             , '%s/www' % os.path.dirname(__file__)
                             )


=== Zope3/lib/python/Zope/App/OFS/FolderContents.py 1.1.2.1 => 1.1.2.2 ===
         return info
 
+    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() )
@@ -44,5 +57,9 @@
         return self._folder
 
     index = PageTemplateFile( 'folder_main.pt'
+                            , '%s/www' % os.path.dirname(__file__)
+                            )
+
+    confirmRemoved = PageTemplateFile( 'folder_remove_confirmed.pt'
                             , '%s/www' % os.path.dirname(__file__)
                             )