[Zope-Checkins] CVS: Zope/lib/python/App - ZopeComponents.py:1.1.2.3
Shane Hathaway
shane@digicool.com
Fri, 28 Sep 2001 13:59:44 -0400
Update of /cvs-repository/Zope/lib/python/App
In directory cvs.zope.org:/tmp/cvs-serv7065
Modified Files:
Tag: ComponentArchitecture-branch
ZopeComponents.py
Log Message:
Added feature-based adders and refined the Adder and AdderEntry interfaces.
=== Zope/lib/python/App/ZopeComponents.py 1.1.2.2 => 1.1.2.3 ===
+from urllib import quote
import Interface
+import ComponentArchitecture
class Adder (Interface.Base):
+ def getContainerURL():
+ """
+ """
+
+ def getName():
+ """
+ """
+
def addToContainer(ob):
"""
"""
@@ -15,11 +25,19 @@
class AdderEntry (Interface.Base):
+ def getId():
+ """
+ """
+
def getName():
"""
"""
- def getAction():
+ def getProduct():
+ """
+ """
+
+ def getDescription():
"""
"""
@@ -35,6 +53,10 @@
"""
"""
+ def _invoke(adder, id, request):
+ """
+ """
+
class PresentationAdderEntry:
@@ -42,18 +64,28 @@
__implements__ = AdderEntry
- def __init__(self, name, description, pres_name, interfaces=None,
+ def __init__(self, name, product, description, pres_name, interfaces=None,
global_visibility=1, permission=None):
self.name = name
+ self.product = product
self.description = description
self.pres_name = pres_name
self.interfaces = interfaces
self.global_visibility = global_visibility
self.permission = permission
+ def getId(self):
+ return '(p)%s' % self.pres_name
+
def getName(self):
return self.name
+ def getProduct(self):
+ return self.product
+
+ def getDescription(self):
+ return self.description
+
def isGloballyVisible(self):
return self.global_visibility
@@ -63,12 +95,70 @@
def getPermission(self):
return self.permission
- def getAction(self):
- return '(p)add/(p)%s' % self.pres_name
+ def _invoke(self, adder, id, request):
+ if not id:
+ raise 'An id is required.'
+ c_url = adder.getContainerURL()
+ add_name = adder.getName()
+ request.response.redirect(
+ '%s/%s/(id)%s/(p)%s' % (c_url, add_name,
+ quote(id), quote(self.pres_name)))
+ return ''
+
+
+class FeatureAdderEntry:
+
+ __allow_access_to_unprotected_subobjects__ = 1
+
+ __implements__ = AdderEntry
+
+ def __init__(self, name, product, description, feature_name, method,
+ interfaces=None, global_visibility=1, permission=None):
+ self.name = name
+ self.product = product
+ self.description = description
+ self.feature_name = feature_name
+ self.method = method
+ self.interfaces = interfaces
+ self.global_visibility = global_visibility
+ self.permission = permission
+
+ def getId(self):
+ return '(f)%s/%s' % (self.feature_name, self.method)
+
+ def getName(self):
+ return self.name
+
+ def getProduct(self):
+ return self.product
+
+ def getDescription(self):
+ return self.description
+
+ def isGloballyVisible(self):
+ return self.global_visibility
+
+ def getInterfaces(self):
+ return self.interfaces
+
+ def getPermission(self):
+ return self.permission
+
+ def _invoke(self, adder, id, request):
+ if not id:
+ raise 'An id is required.'
+ f = ComponentArchitecture.getFeature(adder, self.feature_name)
+ m = getattr(f, self.method)
+ ob = m()
+ adder.addToContainer(ob)
+ return adder.resultAfterAdd()
+
class ClassicAdderEntry:
+ __allow_access_to_unprotected_subobjects__ = 1
+
__implements__ = AdderEntry
visibility = None
@@ -76,13 +166,23 @@
permission = None
action = None
product = None
+ description = ''
def __init__(self, mt):
self.__dict__.update(mt)
+ def getId(self):
+ return self.action
+
def getName(self):
return self.name
+ def getProduct(self):
+ return self.product
+
+ def getDescription(self):
+ return self.description
+
def isGloballyVisible(self):
return (self.visibility == 'Global')
@@ -92,8 +192,11 @@
def getPermission(self):
return self.permission
- def getAction(self):
- return self.action
+ def _invoke(self, adder, id, request):
+ c_url = adder.getContainerURL()
+ request.response.redirect(
+ '%s/%s?id=%s' % (c_url, quote(self.action), quote(id)))
+ return ''
def convertMetaTypeList(mts):