[Erp5-report] r17604 - /erp5/trunk/products/ERP5Type/DocumentationHelper.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Nov 15 10:41:06 CET 2007
Author: jp
Date: Thu Nov 15 10:41:06 2007
New Revision: 17604
URL: http://svn.erp5.org?rev=17604&view=rev
Log:
Updated developer version.
Modified:
erp5/trunk/products/ERP5Type/DocumentationHelper.py
Modified: erp5/trunk/products/ERP5Type/DocumentationHelper.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/DocumentationHelper.py?rev=17604&r1=17603&r2=17604&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/DocumentationHelper.py (original)
+++ erp5/trunk/products/ERP5Type/DocumentationHelper.py Thu Nov 15 10:41:06 2007
@@ -1,25 +1,38 @@
from Acquisition import Implicit
-from Products.ERP5Type import Permissions
from AccessControl import ClassSecurityInfo
from Globals import InitializeClass
from Products.ERP5Type.Accessor.Accessor import Accessor
from Products.ERP5Type.Base import WorkflowMethod
+from Products.ERP5Type import Permissions
class DocumentationSection(Implicit):
- def __init__(self, id, title, class_name, uri):
+ security = ClassSecurityInfo()
+ security.declareObjectProtected(Permissions.AccessContentsInformation)
+
+ def __init__(self, id, title, class_name, uri_list):
self.id = id
self.title = title
self.class_name = class_name
- self.uri = uri
+ self.uri_list = uri_list
+
+ security.declareProtected(Permissions.AccessContentsInformation, 'getClassName')
+ def getClassName(self):
+ return self.class_name
+
+ security.declareProtected(Permissions.AccessContentsInformation, 'getURIList')
+ def getURIList(self):
+ return self.uri_list
# more API needed XXX
+InitializeClass(DocumentationSection)
+
class DocumentationHelper(Implicit):
"""
Example URIs
-
+
person_module/23
person_module/23#title
person_module/23#getTitle
@@ -31,9 +44,41 @@
portal_types/Person
portal_types/Person/actions#view
"""
+ security = ClassSecurityInfo()
+ security.declareObjectProtected(Permissions.AccessContentsInformation)
+
# Methods to override
def __init__(self, uri):
- raise NotImplemented
+ self.uri = uri
+
+ def getDocumentedObject(self):
+ from zLOG import LOG
+ if '/' in self.uri:
+ # URI refers to a portal object
+ # and is a relative URL
+ documented_object = self.getPortalObject().portal_categories.resolveCategory(uri)
+ else:
+ # URI refers to a python class / method
+ import imp
+ module_list = self.uri.split('.')
+ LOG('module_list', 0, repr(module_list))
+ LOG('uri', 0, repr(self.uri))
+ base_module = module_list[0]
+ if base_module == 'Products':
+ # For now, we do not even try to import
+ # or locate objects which are not in Products
+ import Products
+ documented_object = Products
+ for key in module_list[1:]:
+ LOG('loop in module_list', 0, repr(documented_object))
+ documented_object = getattr(documented_object, key)
+ else:
+ raise NotImplemented
+ # fp, pathname, description = imp.find_module(base_module)
+ # documented_object = imp.load_module(fp, pathname, description)
+
+ LOG('documented_object', 0, repr(documented_object))
+ return documented_object
def getTitle(self):
"""
@@ -49,33 +94,42 @@
"""
raise NotImplemented
+ security.declareProtected(Permissions.AccessContentsInformation, 'getSectionList')
def getSectionList(self):
"""
Returns a list of documentation sections
"""
raise NotImplemented
+ security.declareProtected(Permissions.AccessContentsInformation, 'getURI')
def getURI(self):
"""
Returns a URI to later access this documentation
from portal_classes
"""
- raise NotImplemented
+ return self.uri
# Generic methods which all subclasses should inherit
- def getClass(self):
+ security.declareProtected(Permissions.AccessContentsInformation, 'getClassName')
+ def getClassName(self):
"""
Returns our own class name
"""
- return self.__class__
-
+ return self.__class__.__name__
+
+ security.declareProtected(Permissions.AccessContentsInformation, 'view')
def view(self):
"""
Renders the documentation with a standard form
ex. PortalTypeInstanceDocumentationHelper_view
"""
- return getattr(self, '%s_view' % self.__class__)()
-
+ return getattr(self, '%s_view' % self.getClassName())()
+
+ security.declareProtected(Permissions.AccessContentsInformation, '__call__')
+ def __call__(self):
+ return self.view()
+
+InitializeClass(DocumentationHelper)
class PortalTypeInstanceDocumentationHelper(DocumentationHelper):
"""
@@ -87,49 +141,62 @@
security.declareObjectProtected(Permissions.AccessContentsInformation)
def __init__(self, uri):
- self.instance = self.getPortalObject().restrictedTraverse(uri)
+ self.instance_uri = uri
+
+ def getInstance(self):
+ return self.getPortalObject().restrictedTraverse(self.instance_uri)
# API Implementation
+ security.declareProtected( Permissions.AccessContentsInformation, 'getTitle' )
def getTitle(self):
"""
Returns the title of the documentation helper
"""
- return instance.getTitleOrId()
-
+ return self.getInstance().getTitleOrId()
+
+ security.declareProtected( Permissions.AccessContentsInformation, 'getType' )
def getType(self):
"""
Returns the type of the documentation helper
"""
- return instance.getPortalType()
-
+ return "Portal Type Instance"
+
+ security.declareProtected( Permissions.AccessContentsInformation, 'getSectionList' )
def getSectionList(self):
"""
Returns a list of documentation sections
"""
return [
+ #DocumentationSection(
+ #id='instance_property',
+ #title='Instance Properties',
+ #class_name='InstancePropertyDocumentationHelper',
+ #uri_list=self.getClassPropertyURIList(),
+ #),
+ #DocumentationSection(
+ #id='accessor',
+ #title='Accessors',
+ #class_name='AccessorDocumentationHelper',
+ #uri_list=self.getClassPropertyURIList(),
+ #),
DocumentationSection(
- id='instance_property',
- title='Instance Properties',
- class_name='InstancePropertyDocumentationHelper',
- uri=self.getClassPropertyURIList(),
- ),
- DocumentationSection(
- id='accessor',
- title='Accessors',
- class_name='AccessorDocumentationHelper',
- uri=self.getClassPropertyURIList(),
- ),
+ id='class_method',
+ title='Class Methods',
+ class_name='ClassMethodDocumentationHelper',
+ uri_list=self.getClassMethodURIList(inherited=0),
+ ).__of__(self.getInstance()),
]
# Specific methods
+ security.declareProtected( Permissions.AccessContentsInformation, 'getPortalType' )
def getPortalType(self):
"""
"""
- return self.instance.getPortalType()
+ return self.getInstance().getPortalType()
def _getPropertyHolder(self):
from Products.ERP5Type.Base import Base
- return Base.aq_portal_type[self.getPortalType()]
+ return Base.aq_portal_type[(self.getPortalType(), self.getInstance().__class__)]
security.declareProtected( Permissions.AccessContentsInformation, 'getAccessorMethodItemList' )
def getAccessorMethodItemList(self):
@@ -172,7 +239,7 @@
"""
Return a list of tuple (id, method) for every class method
"""
- klass = self.instance.__class__
+ klass = self.getInstance().__class__
return self._getPropertyHolder().getClassMethodItemList(klass, inherited=inherited, local=local)
security.declareProtected( Permissions.AccessContentsInformation, 'getClassMethodIdList' )
@@ -180,15 +247,27 @@
"""
Return a list of tuple (id, method) for every class method
"""
- klass = self.instance.__class__
+ klass = self.getInstance().__class__
return self._getPropertyHolder().getClassMethodIdList(klass, inherited=inherited, local=local)
+
+ security.declareProtected( Permissions.AccessContentsInformation, 'getClassMethodURIList' )
+ def getClassMethodURIList(self, inherited=1, local=1):
+ """
+ Returns a list of URIs to class methods
+ """
+ method_id_list = self.getClassMethodIdList(inherited=inherited, local=local)
+ klass = self.getInstance().__class__
+ class_name = klass.__name__
+ module = klass.__module__
+ uri_prefix = '%s.%s.' % (module, class_name)
+ return map(lambda x: '%s%s' % (uri_prefix, x), method_id_list)
security.declareProtected( Permissions.AccessContentsInformation, 'getClassPropertyItemList' )
def getClassPropertyItemList(self, inherited=1, local=1):
"""
Return a list of tuple (id, method) for every class method
"""
- klass = self.instance.__class__
+ klass = self.getInstance().__class__
return self._getPropertyHolder().getClassPropertyItemList(klass, inherited=inherited, local=local)
security.declareProtected( Permissions.AccessContentsInformation, 'getClassPropertyIdList' )
@@ -196,13 +275,15 @@
"""
Return a list of tuple (id, method) for every class method
"""
- klass = self.instance.__class__
+ klass = self.getInstance().__class__
return self._getPropertyHolder().getClassPropertyIdList(klass, inherited=inherited, local=local)
+ security.declareProtected( Permissions.AccessContentsInformation, 'getGeneratedPropertyIdList' )
def getGeneratedPropertyIdList(self):
"""
"""
+ security.declareProtected( Permissions.AccessContentsInformation, 'getGeneratedBaseCategoryIdList' )
def getGeneratedBaseCategoryIdList(self):
"""
"""
@@ -220,6 +301,34 @@
class ClassDocumentationHelper(DocumentationHelper):
"""
"""
+
+class ClassMethodDocumentationHelper(DocumentationHelper):
+ """
+ Provides documentation about a class method
+ """
+ security = ClassSecurityInfo()
+ security.declareObjectProtected(Permissions.AccessContentsInformation)
+
+ security.declareProtected(Permissions.AccessContentsInformation, 'getDescription')
+ def getDescription(self):
+ return self.getDocumentedObject().__doc__
+
+ security.declareProtected( Permissions.AccessContentsInformation, 'getType' )
+ def getType(self):
+ """
+ Returns the type of the documentation helper
+ """
+ return "Class Method"
+
+ security.declareProtected( Permissions.AccessContentsInformation, 'getTitle' )
+ def getTitle(self):
+ """
+ Returns the type of the documentation helper
+ """
+ return self.getDocumentedObject().__name__
+
+
+InitializeClass(ClassMethodDocumentationHelper)
class CallableDocumentationHelper(DocumentationHelper):
"""
More information about the Erp5-report
mailing list