[Zope-Checkins] CVS: Zope/lib/python/OFS - PropertySheets.py:1.90

Andreas Jung andreas at andreas-jung.com
Mon Sep 29 08:17:07 EDT 2003


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

Modified Files:
	PropertySheets.py 
Log Message:
     - Collector #1058: Several fixes for PropertySheets when used
       outside ZClasses


=== Zope/lib/python/OFS/PropertySheets.py 1.89 => 1.90 ===
--- Zope/lib/python/OFS/PropertySheets.py:1.89	Fri Apr 11 19:38:08 2003
+++ Zope/lib/python/OFS/PropertySheets.py	Mon Sep 29 08:16:36 2003
@@ -30,6 +30,11 @@
 from webdav.common import isDavCollection
 from cgi import escape
 
+
+# DM: we would like to import this from somewhere
+BadRequestException= 'Bad Request'
+
+
 class View(App.Management.Tabs, Base):
     """A view of an object, typically used for management purposes
 
@@ -600,6 +605,9 @@
         )
 
 
+    # optionally to be overridden by derived classes
+    PropertySheetClass= PropertySheet
+
     webdav =DAVProperties()
     def _get_defaults(self):
         return (self.webdav,)
@@ -639,12 +647,14 @@
                 return propset.__of__(self)
         return default
 
-    def manage_addPropertySheet(self, id, ns):
+    def manage_addPropertySheet(self, id, ns, REQUEST=None):
         """ """
         md={'xmlns':ns}
-        ps=PropertySheet(id, md)
+        ps= self.PropertySheetClass(id, md)
         self.addPropertySheet(ps)
-        return 'OK'
+        if REQUEST is None: return ps
+        ps= self.get(id)
+        REQUEST.RESPONSE.redirect('%s/manage' % ps.absolute_url())
 
     def addPropertySheet(self, propset):
         propsets=self.aq_parent.__propsets__
@@ -658,6 +668,25 @@
                 result.append(propset)
         self.aq_parent.__propsets__=tuple(result)
 
+    ## DM: deletion support
+    def isDeletable(self,name):
+        '''currently, we say that *name* is deletable when it is not a
+        default sheet. Later, we may further restrict deletability
+        based on an instance attribute.'''
+        ps= self.get(name)
+        if ps is None: return 0
+        if ps in self._get_defaults(): return 0
+        return 1
+
+    def manage_delPropertySheets(self, ids=(), REQUEST=None):
+        '''delete all sheets identified by *ids*.'''
+        for id in ids:
+            if not self.isDeletable(id):
+                raise BadRequestException, 'attempt to delete undeletable property sheet: ' + id
+            self.delPropertySheet(id)
+        if REQUEST is not None: 
+            REQUEST.RESPONSE.redirect('%s/manage' % self.absolute_url())
+
     def __len__(self):
         return len(self.__propsets__())
 
@@ -677,7 +706,7 @@
         if r is None:
             pre='../'
         else:
-            pre=r['URL']
+            pre=r['URLPATH0']
             for i in (1,2):
                 l=pre.rfind('/')
                 if l >= 0:




More information about the Zope-Checkins mailing list