def test_secure(self): soup = '<foo></bar>' template = self._makeOne("secure.pt") from zExceptions import Unauthorized try: result = template(soup=soup) except Unauthorized: pass else: self.fail("Expected unauthorized.") from AccessControl.SecurityInfo import allow_module allow_module("cgi") result = template(soup=soup) self.failUnless('<foo></bar>' in result)
def test_secure(self): soup = '<foo></bar>' template = self._makeOne("secure.pt") from zExceptions import Unauthorized try: result = template(soup=soup) except Unauthorized: pass else: self.fail("Expected unauthorized.") from AccessControl.SecurityInfo import allow_module allow_module('html') result = template(soup=soup) self.assertTrue('<foo></bar>' in result)
# And local interactors from Products.ERP5Type.Utils import initializeLocalInteractorRegistry if DISPLAY_BOOT_PROCESS: LOG('ERP5Type.__init__', INFO, 'initializeLocalInteractorRegistry') initializeLocalInteractorRegistry() # We can now install all interactors from Products.ERP5Type.InitGenerator import installInteractorClassRegistry if DISPLAY_BOOT_PROCESS: LOG('ERP5Type.__init__', INFO, 'installInteractorClassRegistry') installInteractorClassRegistry() from AccessControl.SecurityInfo import allow_module from AccessControl.SecurityInfo import ModuleSecurityInfo allow_module('Products.ERP5Type.Cache') ModuleSecurityInfo('Products.ERP5Type.Utils').declarePublic( 'sortValueList', 'convertToUpperCase', 'UpperCase', 'convertToMixedCase', 'cartesianProduct', 'sleep', 'getCommonTimeZoneList', 'int2letter', 'getMessageIdWithContext', 'getTranslationStringWithContext', 'Email_parseAddressHeader', 'guessEncodingFromText', 'isValidTALESExpression') allow_module('Products.ERP5Type.Message') ModuleSecurityInfo('Products.ERP5Type.Message').declarePublic( 'translateString') allow_module('Products.ERP5Type.Error') allow_module('Products.ERP5Type.Errors') allow_module('Products.ERP5Type.JSONEncoder') allow_module('Products.ERP5Type.Log')
""" implements(IVocabularyFactory) def __call__(self, context, raw=False): # print context esd = getDocumentPoolSite(context) path = "/".join(esd.getPhysicalPath()) + "/contentconfig" cat = getToolByName(esd, 'portal_catalog', None) if cat is None: if not raw: return SimpleVocabulary([]) else: return [] types = cat({"portal_type":"DashboardCollection", "sort_on": "sortable_title", "path": path}) if not raw: types = [ (brain.getObject(), brain.Title) for brain in types ] else: types = [ (brain.getId, brain.Title) for brain in types ] if not raw: items = [SimpleTerm(i[0], i[0], i[1]) for i in types] return SimpleVocabulary(items) else: return types DashboardCollectionsVocabularyFactory = DashboardCollectionsVocabulary() allow_module("docpool.dashboard.vocabularies")
# -*- coding: utf-8 -*- from AccessControl.SecurityInfo import allow_class from AccessControl.SecurityInfo import allow_module from Products.MimetypesRegistry import MimeTypesRegistry from Products.MimetypesRegistry.interfaces import MimeTypeException # noqa # remove when Archetypes are removed: allow_module('Products.MimetypesRegistry.common') allow_class(MimeTypeException) # end remove def initialize(context): from Products.CMFCore import utils utils.ToolInit( 'MimetypesRegistry Tool', tools=(MimeTypesRegistry.MimeTypesRegistry, ), icon='tool.gif', ).initialize(context)
import GadgetField FieldRegistry.registerField(GadgetField.GadgetField, 'www/StringField.gif') # register help for the product context.registerHelp() # register field help for all fields FieldRegistry.registerFieldHelp(context) # make Dummy Fields into real fields FieldRegistry.initializeFields() # do initialization of Form class to make fields addable Form.initializeForm(FieldRegistry) Form.initializeForm(FieldRegistry, form_class=Report.ERP5Report) # Register FSPDFTemplate icon registerIcon(PDFTemplate.FSPDFTemplate, 'www/PDF.png', globals()) # Register ProxyField icon registerIcon(ProxyField.ProxyField, 'www/ProxyField.png', globals()) ## Initialize security ## ModuleSecurityInfo('Products.ERP5Form.Report').declarePublic('ReportSection', ) ModuleSecurityInfo('Products.ERP5Form.MultiRelationField').declarePublic( 'SUB_FIELD_ID', ) allow_module('Products.ERP5Form.Selection') import Selection allow_class(Selection) __module_aliases__ = ('Products.ERP5Form.SelectionTool', SelectionTool),
from plone.app.layout.viewlets.common import ViewletBase from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile from AccessControl.SecurityInfo import allow_module, allow_class allow_module("elan.esd.browser"); allow_module("elan.esd.browser.viewlets"); allow_module("elan.esd.browser.viewlets.common"); class TimeViewlet(ViewletBase): index = ViewPageTemplateFile('time.pt') allow_class(TimeViewlet)
# Allow access to OOoParser from scripts from AccessControl import ModuleSecurityInfo ModuleSecurityInfo('Products.ERP5OOo.OOoUtils').declarePublic('OOoParser',) ModuleSecurityInfo('Products.ERP5OOo.OOoUtils').declarePublic('newOOoParser',) # Define object classes and tools from OOoTemplate import OOoTemplate from FormPrintout import FormPrintout object_classes = (OOoTemplate, FormPrintout) portal_tools = () content_classes = () content_constructors = () # Finish installation def initialize( context ): import Document initializeProduct(context, this_module, globals(), document_module = Document, document_classes = document_classes, object_classes = object_classes, portal_tools = portal_tools, content_constructors = content_constructors, content_classes = content_classes) # allow import of various exceptions in restricted environment # so we can catch them in ZODB scripts and inform user nicely allow_module('Products.ERP5.Document.Document.ConversionError') allow_module('xmlrpclib.Fault') allow_module('socket.error')
def __call__(self, context): items = [ VocabItem(u'ISAR', _(u'ISAR')), VocabItem(u'GUNDREMMINGEN', _(u'GUNDREMMINGEN')), VocabItem(u'PHILIPSBURG', _(u'PHILIPPSBURG')), VocabItem(u'NECKARWESTHEIM', _(u'NECKARWESTHEIM')), VocabItem(u'EMSLAND', _(u'EMSLAND')), VocabItem(u'GROHNDE', _(u'GROHNDE')), VocabItem(u'BROKDORF', _(u'BROKDORF')), VocabItem(u'FR-MUENCHEN', _(u'FR-MUENCHEN')), VocabItem(u'FR-BERLIN', _(u'FR-BERLIN')), VocabItem(u'LEIBSTADT', _(u'LEIBSTADT')), VocabItem(u'GOESGEN', _(u'GOESGEN')), VocabItem(u'BEZNAU', _(u'BEZNAU')), VocabItem(u'MUEHLEBERG', _(u'MUEHLEBERG')), VocabItem(u'CATTENOM', _(u'CATTENOM')), VocabItem(u'FESSENHEIM', _(u'FESSENHEIM')), VocabItem(u'CHOOZ', _(u'CHOOZ')), VocabItem(u'TIHANGE', _(u'TIHANGE')), VocabItem(u'TEMELIN', _(u'TEMELIN')), VocabItem(u'mobiler Standort', _(u'mobiler Standort')), ] return SimpleVocabulary(items) ReleaseSitesVocabularyFactory = ReleaseSitesVocabulary() allow_module("docpool.rodos.vocabularies")
# register help for the product context.registerHelp() # register field help for all fields FieldRegistry.registerFieldHelp(context) # make Dummy Fields into real fields FieldRegistry.initializeFields() # do initialization of Form class to make fields addable Form.initializeForm(FieldRegistry) Form.initializeForm(FieldRegistry, form_class=Report.ERP5Report) # Register FSPDFTemplate icon registerIcon(PDFTemplate.FSPDFTemplate, 'www/PDF.png', globals()) # Register ProxyField icon registerIcon(ProxyField.ProxyField, 'www/ProxyField.png', globals()) ## Initialize security ## ModuleSecurityInfo('Products.ERP5Form.Report').declarePublic('ReportSection',) ModuleSecurityInfo('Products.ERP5Form.MultiRelationField').declarePublic('SUB_FIELD_ID',) allow_module('Products.ERP5Form.Selection') import Selection allow_class(Selection) __module_aliases__ = ('Products.ERP5Form.SelectionTool', SelectionTool),
from AccessControl.SecurityInfo import allow_module allow_module('Products.ERP5.Tool.NotificationTool')
from plone.app.layout.viewlets.common import ViewletBase from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile from docpool.event.utils import getOpenScenarios, getScenariosForCurrentUser from AccessControl.SecurityInfo import allow_module allow_module("docpool.event.browser"); allow_module("docpool.event.browser.viewlets"); allow_module("docpool.event.browser.viewlets.common"); class EventViewlet(ViewletBase): index = ViewPageTemplateFile('events.pt') def isSupported(self): return True @property def available(self): return self.context.isSituationDisplay() and self.isSupported() def update(self): scs = getOpenScenarios(self.context) self.scenarios = [ s.getObject() for s in scs if s.review_state == 'published' ] self.open_scenarios = [ s.getObject() for s in scs ] scs = getScenariosForCurrentUser(self.context) self.selected_scenarios = scs
def __call__(self, context): esd = getDocumentPoolSite(context) path = "/".join(esd.getPhysicalPath()) + "/contentconfig" cat = getToolByName(esd, 'portal_catalog', None) if cat is None: return SimpleVocabulary([]) items = [ (t.Title, t.getObject() ) for t in cat({"portal_type": "DPNuclearPowerStation", "path":path})] items.sort() items = [SimpleTerm(i[1], i[1].UID(), i[0]) for i in items] return SimpleVocabulary(items) grok.global_utility(PowerStationsVocabulary, name=u"docpool.event.vocabularies.PowerStations") class SampleTypesVocabulary(object): grok.implements(IVocabularyFactory) def __call__(self, context): registry = queryUtility(IRegistry) terms = [] if registry is not None: for sType in registry.get('docpool.event.sampleTypes', ()): # create a term - the arguments are the value, the token, and # the title (optional) terms.append(SimpleVocabulary.createTerm(sType, sType, sType)) return SimpleVocabulary(terms) grok.global_utility(SampleTypesVocabulary, name=u"docpool.event.vocabularies.SampleTypes") allow_module("docpool.event.vocabularies") # allow_class(ELANESDVocabulary)
ModuleSecurityInfo('Products.ERP5OOo.OOoUtils').declarePublic('newOOoParser', ) # Define object classes and tools from OOoTemplate import OOoTemplate from FormPrintout import FormPrintout object_classes = (OOoTemplate, FormPrintout) portal_tools = () content_classes = () content_constructors = () # Finish installation def initialize(context): import Document initializeProduct(context, this_module, globals(), document_module=Document, document_classes=document_classes, object_classes=object_classes, portal_tools=portal_tools, content_constructors=content_constructors, content_classes=content_classes) # allow import of various exceptions in restricted environment # so we can catch them in ZODB scripts and inform user nicely allow_module('xmlrpclib.Fault') allow_module('socket.error')
ModuleSecurityInfo('Products.ERP5OOo.OOoUtils').declarePublic('newOOoParser', ) # Define object classes and tools from OOoTemplate import OOoTemplate from FormPrintout import FormPrintout object_classes = (OOoTemplate, FormPrintout) portal_tools = () content_classes = () content_constructors = () # Finish installation def initialize(context): import Document initializeProduct(context, this_module, globals(), document_module=Document, document_classes=document_classes, object_classes=object_classes, portal_tools=portal_tools, content_constructors=content_constructors, content_classes=content_classes) # allow import of various exceptions in restricted environment # so we can catch them in ZODB scripts and inform user nicely allow_module('Products.ERP5.Document.Document.ConversionError') allow_module('xmlrpclib.Fault') allow_module('socket.error')
# class ELANESDVocabulary(object): # """ # """ # implements(IVocabularyFactory) # # def __call__(self, context, raw=False): # my_uid = None # if shasattr(context, "myDocumentPool", True): # my_uid = context.myDocumentPool().UID() # # site = getSite() # cat = getToolByName(site, 'portal_catalog', None) # if cat is None: # if not raw: # return SimpleVocabulary([]) # else: # return [] # esds = cat.unrestrictedSearchResults({"portal_type":"DocumentPool", "sort_on": "sortable_title"}) # # print len(types) # esds = [ (brain.UID, brain.Title) for brain in esds if brain.UID != my_uid] # # print types # if not raw: # items = [SimpleTerm(i[0], i[0], i[1]) for i in esds] # return SimpleVocabulary(items) # else: # return esds # # ELANESDVocabularyFactory = ELANESDVocabulary() allow_module("elan.esd.vocabularies") # allow_class(ELANESDVocabulary)
) portal_tools = (ActivityTool.ActivityTool, ) content_classes = () content_constructors = () initializeProduct(context, this_module, globals(), object_classes=object_classes, portal_tools=portal_tools, content_constructors=content_constructors, content_classes=content_classes) # register manually instead of using object_classes above so we can reuse # the ZMySQLDA icon without having to carry the gif around in our own product context.registerClass( ActivityConnection.ActivityConnection, permission='Add Z MySQL Database Connections', # reuse the permission constructors=(ActivityConnection.manage_addActivityConnectionForm, ActivityConnection.manage_addActivityConnection), ) # This is used by a script (external method) that can be run # to set up CMFActivity in an existing CMF Site instance. cmfactivity_globals = globals() from AccessControl.SecurityInfo import allow_module allow_module('Products.CMFActivity.ActiveResult') allow_module('Products.CMFActivity.Errors')
def __call__(self, context, raw=False): # print context return _createVocab(context, raw, "SRModuleType", "/config", sort_on="id", identifier="id") ModuleTypesVocabularyFactory = ModuleTypesVocabulary() class CollectionsVocabulary(object): """ """ implements(IVocabularyFactory) def __call__(self, context, raw=False): # print context return _createVocab(context, raw, "SRCollection", "/contentconfig") CollectionsVocabularyFactory = CollectionsVocabulary() class TextBlocksVocabulary(object): """ """ implements(IVocabularyFactory) def __call__(self, context, raw=False): # print context return _createVocab(context, raw, "SRTextBlock", "/contentconfig") TextBlocksVocabularyFactory = TextBlocksVocabulary() allow_module("elan.sitrep.vocabularies")
globals(), permissions_module=Permissions) from Tool import SMSTool # Define object classes and tools object_classes = () portal_tools = (SMSTool.SMSTool, ) content_classes = () content_constructors = () # Finish installation def initialize(context): import Document initializeProduct(context, this_module, globals(), document_module=Document, document_classes=document_classes, object_classes=object_classes, portal_tools=portal_tools, content_constructors=content_constructors, content_classes=content_classes) from AccessControl.SecurityInfo import allow_module allow_module('Products.ERP5ShortMessage.Errors')
if DISPLAY_BOOT_PROCESS: LOG('ERP5Type.__init__', INFO, 'installInteractorClassRegistry') installInteractorClassRegistry() from Products.ERP5Type import Timeout erp5_conf = getattr(getConfiguration(), 'product_config', {}).get('erp5') # Note: erp5_conf attributes are missing in unit tests, fallback to no timeout # in that case. Timeout.publisher_timeout = getattr(erp5_conf, 'publisher_timeout', None) Timeout.activity_timeout = getattr(erp5_conf, 'activity_timeout', None) from AccessControl.SecurityInfo import allow_module from AccessControl.SecurityInfo import ModuleSecurityInfo allow_module('Products.ERP5Type.Cache') ModuleSecurityInfo('Products.ERP5Type.Utils').declarePublic( 'sortValueList', 'convertToUpperCase', 'UpperCase', 'convertToMixedCase', 'cartesianProduct', 'sleep', 'getCommonTimeZoneList', 'int2letter', 'getMessageIdWithContext', 'getTranslationStringWithContext', 'Email_parseAddressHeader', 'guessEncodingFromText', 'isValidTALESExpression') allow_module('Products.ERP5Type.Message') ModuleSecurityInfo('Products.ERP5Type.Message').declarePublic( 'translateString') allow_module('Products.ERP5Type.Error') allow_module('Products.ERP5Type.Errors') allow_module('Products.ERP5Type.JSONEncoder') allow_module('Products.ERP5Type.Log')
from Products.ERP5Type.Utils import initializeProduct, updateGlobals import sys, Permissions this_module = sys.modules[ __name__ ] document_classes = updateGlobals(this_module, globals(), permissions_module=Permissions) from Tool import SMSTool # Define object classes and tools object_classes = () portal_tools = (SMSTool.SMSTool, ) content_classes = () content_constructors = () # Finish installation def initialize(context): import Document initializeProduct(context, this_module, globals(), document_module=Document, document_classes=document_classes, object_classes=object_classes, portal_tools=portal_tools, content_constructors=content_constructors, content_classes=content_classes) from AccessControl.SecurityInfo import allow_module allow_module('Products.ERP5ShortMessage.Errors')
bad_property_list = ['id', 'uid', 'categories_list', 'last_id',] document_dict = document.__dict__ property_dict = {} getPropertyList = document.getPropertyList getProperty = document.getProperty for x in property_map: property_id = x['id'] if property_id in bad_property_list: continue # we care already stored property only elif (x.get('storage_id') or property_id) not in document_dict: continue # we don't want acquired properties without acquisition_mask_value elif 'acquisition_base_category' in x and not x.get('acquisition_mask_value', 0): continue elif x['type'] in list_types and not property_id.endswith('_list'): property_dict[property_id] = getPropertyList(property_id) else: property_dict[property_id] = getProperty(property_id) return property_dict def _getCategoryList(document, acquire=True): # we care already stored category only document_category_set = {x.split('/',1)[0] for x in document.getCategoryList()} getPropertyList = document.getPropertyList return {x: getPropertyList(x) for x in document_category_set if x != 'solver'} from AccessControl.SecurityInfo import allow_module allow_module(__name__)
# -*- coding: utf-8 -*- from AccessControl.SecurityInfo import allow_class from AccessControl.SecurityInfo import allow_module from Products.MimetypesRegistry import MimeTypesRegistry from Products.MimetypesRegistry.interfaces import MimeTypeException # remove when Archetypes are removed: allow_module('Products.MimetypesRegistry.common') allow_class(MimeTypeException) # end remove def initialize(context): from Products.CMFCore import utils utils.ToolInit( 'MimetypesRegistry Tool', tools=(MimeTypesRegistry.MimeTypesRegistry, ), icon='tool.gif', ).initialize(context)
initializeProduct( context, this_module, globals(), object_classes=object_classes, portal_tools=portal_tools, content_constructors=content_constructors, content_classes=content_classes, ) # register manually instead of using object_classes above so we can reuse # the ZMySQLDA icon without having to carry the gif around in our own product context.registerClass( ActivityConnection.ActivityConnection, permission="Add Z MySQL Database Connections", # reuse the permission constructors=( ActivityConnection.manage_addActivityConnectionForm, ActivityConnection.manage_addActivityConnection, ), ) # This is used by a script (external method) that can be run # to set up CMFActivity in an existing CMF Site instance. cmfactivity_globals = globals() from AccessControl.SecurityInfo import allow_module allow_module("Products.CMFActivity.ActiveResult") allow_module("Products.CMFActivity.Errors")
VocabItem(u'U09A KKW Isar 1+2 ', _(u'U09A KKW Isar 1+2 '),u'U09A KKW Isar 1+2 '), VocabItem(u'U09B KKW Isar1 ', _(u'U09B KKW Isar1 '),u'U09B KKW Isar1 '), VocabItem(u'U09C KKW Isar2 ', _(u'U09C KKW Isar2 '),u'U09C KKW Isar2 '), VocabItem(u'U09D KKW Grafenrheinfeld ', _(u'U09D KKW Grafenrheinfeld '),u'U09D KKW Grafenrheinfeld '), VocabItem(u'U09E KKW Gundremmingen Block B/C ', _(u'U09E KKW Gundremmingen Block B/C '),u'U09E KKW Gundremmingen Block B/C '), VocabItem(u'U09F Versuchs-AKW Kahl a.M. ', _(u'U09F Versuchs-AKW Kahl a.M. '),u'U09F Versuchs-AKW Kahl a.M. '), VocabItem(u'U09G Forschungsreaktor München ', _(u'U09G Forschungsreaktor München '),u'U09G Forschungsreaktor München '), VocabItem(u'U09H Siemens Brennelementewerk Hanau, Standort Karlstein ', _(u'U09H Siemens Brennelementewerk Hanau, Standort Karlstein '),u'U09H Siemens Brennelementewerk Hanau, Standort Karlstein '), VocabItem(u'U09I Siemens AG, Karlstein ', _(u'U09I Siemens AG, Karlstein '),u'U09I Siemens AG, Karlstein '), VocabItem(u'U09J Framatome GmbH, Forschungszentrum Erlangen-Süd (FZE) ', _(u'U09J Framatome GmbH, Forschungszentrum Erlangen-Süd (FZE) '),u'U09J Framatome GmbH, Forschungszentrum Erlangen-Süd (FZE) '), VocabItem(u'U09K Forschungsneutronenquelle Heinz Maier-Leibnitz ', _(u'U09K Forschungsneutronenquelle Heinz Maier-Leibnitz '),u'U09K Forschungsneutronenquelle Heinz Maier-Leibnitz '), VocabItem(u'U11B Experimentierreakt. II Berlin ', _(u'U11B Experimentierreakt. II Berlin '),u'U09K Forschungsneutronenquelle Heinz Maier-Leibnitz '), VocabItem(u'U12R KKW Rheinsberg ', _(u'U12R KKW Rheinsberg '),u'U12R KKW Rheinsberg '), VocabItem(u'U13A KKW Lubmin/Greifswald ', _(u'U13A KKW Lubmin/Greifswald '),u'U13A KKW Lubmin/Greifswald '), VocabItem(u'U13B Zwischenlager Nord ', _(u'U13B Zwischenlager Nord '),u'U13B Zwischenlager Nord '), VocabItem(u'U14R Forschungszentrum Rossendorf ', _(u'U14R Forschungszentrum Rossendorf '),u'U14R Forschungszentrum Rossendorf '), VocabItem(u'U15M nicht benutzen, jetzt UELM, Endlager für radioaktive Abfälle Morsleben (ERAM) ', _(u'U15M nicht benutzen, jetzt UELM, Endlager für radioaktive Abfälle Morsleben (ERAM) '),u'U15M nicht benutzen, jetzt UELM, Endlager für radioaktive Abfälle Morsleben (ERAM) '), ] return SimpleVocabulary(items) NuclearInstallationVocabularyFactory = NuclearInstallationVocabulary() allow_module("docpool.rei.vocabularies")
# And local interactors from Products.ERP5Type.Utils import initializeLocalInteractorRegistry if DISPLAY_BOOT_PROCESS: LOG('ERP5Type.__init__', INFO, 'initializeLocalInteractorRegistry') initializeLocalInteractorRegistry() # We can now install all interactors from Products.ERP5Type.InitGenerator import installInteractorClassRegistry if DISPLAY_BOOT_PROCESS: LOG('ERP5Type.__init__', INFO, 'installInteractorClassRegistry') installInteractorClassRegistry() from AccessControl.SecurityInfo import allow_module from AccessControl.SecurityInfo import ModuleSecurityInfo allow_module('Products.ERP5Type.Cache') ModuleSecurityInfo('Products.ERP5Type.Utils').declarePublic( 'sortValueList', 'convertToUpperCase', 'UpperCase', 'convertToMixedCase', 'cartesianProduct', 'sleep', 'getCommonTimeZoneList', 'int2letter', 'getMessageIdWithContext', 'getTranslationStringWithContext', 'Email_parseAddressHeader', 'guessEncodingFromText', 'isValidTALESExpression') allow_module('Products.ERP5Type.Message') ModuleSecurityInfo('Products.ERP5Type.Message').declarePublic('translateString') allow_module('Products.ERP5Type.Error') allow_module('Products.ERP5Type.Errors') allow_module('Products.ERP5Type.JSONEncoder') allow_module('Products.ERP5Type.Log') ModuleSecurityInfo('Products.ERP5Type.JSON').declarePublic('dumps', 'loads')
for c in clist: if c not in [over, rec] and c.encode('utf') not in [over, rec]: cats = cats + c + ', ' cats = '(' + cats + ')' cats = string.replace(cats,', )',')') return cats # return codecs.decode(codecs.decode(z,'hex'),'ascii') @memoize def _data(self): try: return self.collection.results(batch=True, b_start=0, b_size=5, sort_on=None, brains=True) except: return [] ##/code-section renderer-methods ##code-section forms class AddForm(base.NullAddForm): # This method must be implemented to actually construct the object. def create(self): return Assignment() ##/code-section forms ##code-section bottom allow_module("docpool.base.portlets"); allow_module("docpool.base.portlets.recent"); allow_class(Renderer); ##/code-section bottom