[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