def DisplayViewFactory(name, schema, label, permission, layer, template, default_template, bases, for_, fields, fulledit_path=None, fulledit_label=None): class_ = SimpleViewClass(template, used_for=schema, bases=bases, name=name) class_.schema = schema class_.label = label class_.fieldNames = fields class_.fulledit_path = fulledit_path if fulledit_path and (fulledit_label is None): fulledit_label = "Full display" class_.fulledit_label = fulledit_label class_.generated_form = ViewPageTemplateFile(default_template) defineChecker( class_, NamesChecker(("__call__", "__getitem__", "browserDefault"), permission)) if layer is None: layer = IDefaultBrowserLayer sm = zope.component.getGlobalSiteManager() sm.registerAdapter(class_, (for_, layer), Interface, name)
def EditViewFactory(name, schema, label, permission, layer, template, default_template, bases, for_, fields, fulledit_path=None, fulledit_label=None): class_ = SimpleViewClass(template, used_for=schema, bases=bases, name=name) class_.schema = schema class_.label = label class_.fieldNames = fields class_.fulledit_path = fulledit_path if fulledit_path and (fulledit_label is None): fulledit_label = "Full edit" class_.fulledit_label = fulledit_label class_.generated_form = ViewPageTemplateFile(default_template) defineChecker(class_, NamesChecker(("__call__", "__getitem__", "browserDefault", "publishTraverse"), permission)) if layer is None: layer = IDefaultBrowserLayer s = zope.component.getGlobalSiteManager() s.registerAdapter(class_, (for_, layer), Interface, name)
def _provide_templates_from_directory(self, directory): directory = self.__fixup_directory(directory) seen_macros = defaultdict(set) # Register macros for each macro found in each .macro.pt # file. This doesn't deal with naming conflicts. gsm = component.getGlobalSiteManager() for macro_file in sorted( glob.glob(os.path.join(directory, "*.macro.pt"))): template = NikolaPageFileTemplate(macro_file) for name in template.macros.names: factory = MacroFactory(macro_file, name, 'text/html') if name in seen_macros: # pragma: no cover logger.warning("Duplicate macro '%s' in %s and %s", name, seen_macros[name], macro_file) seen_macros[name].add(macro_file) gsm.registerAdapter(factory, provided=(IMacroTemplate), required=(interface.Interface, interface.Interface, interface.Interface), name=name) for template_file in sorted( glob.glob(os.path.join(directory, "*.tmpl.pt"))): name = os.path.basename(template_file) name = name[:-len(".pt")] factory = TemplateFactory(template_file, 'text/html') # Register them as template adapters for us. # required = (view, request, context) gsm.registerAdapter(factory, provided=(IContentTemplate), required=(interface.Interface, interface.Interface, interface.Interface), name=name) # Register them as views for traversing gsm.registerAdapter(SimpleViewClass(template_file, offering='', name=name), provided=interface.Interface, required=(interface.Interface, interface.Interface), name=name) theme_zcml = os.path.join(directory, 'theme.zcml') if os.path.exists(theme_zcml): # Let any explicit directions take precedence. xmlconfig.file(theme_zcml, context=self._conf_context)
def AddViewFactory(name, schema, label, permission, layer, template, default_template, bases, for_, fields, content_factory, arguments, keyword_arguments, set_before_add, set_after_add): class_ = SimpleViewClass( template, used_for=schema, bases=bases, name=name) class_.schema = schema class_.label = label class_.fieldNames = fields class_._factory_or_id = content_factory class_._factory = property(_getFactory, _setFactory) class_._arguments = arguments class_._keyword_arguments = keyword_arguments class_._set_before_add = set_before_add class_._set_after_add = set_after_add class_.generated_form = ViewPageTemplateFile(default_template) defineChecker(class_, NamesChecker( ("__call__", "__getitem__", "browserDefault", "publishTraverse"), permission, ) ) if layer is None: layer = IDefaultBrowserLayer s = zope.component.getGlobalSiteManager() s.registerAdapter(class_, (for_, layer), Interface, name)
############################################################################## # # Copyright (c) 2001, 2002 Zope Foundation and Contributors. # All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE. # ############################################################################## """Simple Test View $Id: simpletestview.py 111996 2010-05-05 17:34:04Z tseaver $ """ from zope.browserpage.simpleviewclass import SimpleViewClass SimpleTestView = SimpleViewClass('testsimpleviewclass.pt')
def page( _context, name, permission, for_=Interface, layer=IDefaultBrowserLayer, template=None, class_=None, allowed_interface=None, allowed_attributes=None, attribute='__call__', menu=None, title=None, ): _handle_menu(_context, menu, title, [for_], name, permission, layer) required = {} permission = _handle_permission(_context, permission) if not (class_ or template): raise ConfigurationError("Must specify a class or template") if attribute != '__call__': if template: raise ConfigurationError( "Attribute and template cannot be used together.") if not class_: raise ConfigurationError( "A class must be provided if attribute is used") if template: template = os.path.abspath(str(_context.path(template))) if not os.path.isfile(template): raise ConfigurationError("No such file", template) required['__getitem__'] = permission # TODO: new __name__ attribute must be tested if class_: if attribute != '__call__': if not hasattr(class_, attribute): raise ConfigurationError( "The provided class doesn't have the specified attribute ") if template: # class and template new_class = SimpleViewClass(template, bases=(class_, ), name=name) else: if not hasattr(class_, 'browserDefault'): cdict = { 'browserDefault': lambda self, request: (getattr(self, attribute), ()) } else: cdict = {} cdict['__name__'] = name cdict['__page_attribute__'] = attribute new_class = type(class_.__name__, ( class_, simple, ), cdict) if hasattr(class_, '__implements__'): classImplements(new_class, IBrowserPublisher) else: # template new_class = SimpleViewClass(template, name=name) for n in (attribute, 'browserDefault', '__call__', 'publishTraverse'): required[n] = permission _handle_allowed_interface(_context, allowed_interface, permission, required) _handle_allowed_attributes(_context, allowed_attributes, permission, required) _handle_for(_context, for_) defineChecker(new_class, Checker(required)) _context.action( discriminator=('view', for_, name, IBrowserRequest, layer), callable=handler, args=('registerAdapter', new_class, (for_, layer), Interface, name, _context.info), )
def setUp(test=None): """Set up the test fixture for schooltool.app.browser doctests. Performs what is called a "placeless setup" in the Zope 3 world, then sets up annotations, relationships, and registers widgets as views for some schema fields. In effect, duplicates a subset of ZCML configuration -- just enough to actually render our page templates in unit tests. """ setup.placefulSetUp() setup.setUpAnnotations() setup.setUpTraversal() # relationships setUpRelationships() # widgets ztapi.browserViewProviding(IPassword, PasswordWidget, IInputWidget) ztapi.browserViewProviding(ITextLine, TextWidget, IInputWidget) ztapi.browserViewProviding(IText, TextAreaWidget, IInputWidget) ztapi.browserViewProviding(IBytes, BytesWidget, IInputWidget) ztapi.browserViewProviding(IBool, CheckBoxWidget, IInputWidget) ztapi.browserViewProviding(IDate, DateWidget, IInputWidget) ztapi.browserViewProviding(IInt, IntWidget, IInputWidget) ztapi.browserViewProviding(IChoice, ChoiceInputWidget, IInputWidget) ztapi.browserViewProviding(ICollection, CollectionInputWidget, IInputWidget) ztapi.provideMultiView((IChoice, IIterableVocabulary), IBrowserRequest, IInputWidget, '', DropdownWidget) ztapi.provideMultiView((ISet, IChoice), IBrowserRequest, IInputWidget, '', ChoiceCollectionInputWidget) ztapi.provideMultiView((IList, IChoice), IBrowserRequest, IInputWidget, '', ChoiceCollectionInputWidget) ztapi.provideMultiView((IList, IVocabularyTokenized), IBrowserRequest, IInputWidget, '', OrderedMultiSelectWidget) # XXX MultiSelectWidget doesn't work with sets :/ # http://www.zope.org/Collectors/Zope3-dev/360 ztapi.provideMultiView((ISet, IIterableVocabulary), IBrowserRequest, IInputWidget, '', MultiSelectWidget) # errors in forms ztapi.browserViewProviding(IWidgetInputError, WidgetInputErrorView, IWidgetInputErrorView) # Now, the question is: does the speed of the tests run with the # setup below justify this complex setup that duplicates the ZCML? # For now, I say yes. -- not mg, perhaps alga or gintas # ++view++ ztapi.provideView(None, None, ITraversable, 'view', view) ztapi.provideView(None, None, ITraversable, 'resource', resource) # schooltool: namespace in tal provideAdapter(SchoolToolAPI, (None,), IPathAdapter, 'schooltool') # sortby: namespace in tal provideAdapter(SortBy, (None,), IPathAdapter, 'sortby') # standard_macros, schooltool_macros and schooltool_navigation ztapi.browserView(None, 'standard_macros', StandardMacros) ztapi.browserView(None, 'view_macros', SimpleViewClass("../../skin/templates/view_macros.pt")) ztapi.browserView(None, 'schooltool_macros', SchoolToolMacros) ztapi.browserView(None, 'calendar_macros', SimpleViewClass("./templates/calendar_macros.pt")) ztapi.browserView(None, 'generic_macros', SimpleViewClass("../../skin/templates/generic_macros.pt")) # form macros ztapi.browserView(None, 'form_macros', FormMacros) import zope.formlib base = zope.formlib.__path__[0] ztapi.browserView(None, 'widget_macros', SimpleViewClass(os.path.join(base, 'widget_macros.pt'))) # resources class ResourceStub: def __init__(self, request): self.request = request def __getitem__(self, key): return ResourceStub(self.request) def __call__(self): return "a dummy resource" for name in ['layout.css', 'schooltool.css', 'schooltool.js', 'next.png', 'prev.png', 'favicon.ico', 'print.css', 'jquery.js', 'zonki-regular.png']: ztapi.browserResource(name, ResourceStub) # menus ztapi.browserView(None, 'view_get_menu', MenuAccessView) provideUtility(BrowserMenuStub('schooltool_actions'), IBrowserMenu, 'schooltool_actions') # `provider` TALES namespaces from zope.browserpage import metaconfigure from zope.contentprovider import tales metaconfigure.registerType('provider', tales.TALESProviderExpression) # viewlet manager registrations from zope.viewlet import manager from schooltool import skin name = 'schooltool.Header' provideAdapter( manager.ViewletManager(name, skin.IHeaderManager), (Interface, IDefaultBrowserLayer, IBrowserView), skin.IHeaderManager, name=name) name = 'schooltool.JavaScript' provideAdapter( manager.ViewletManager(name, skin.IJavaScriptManager), (Interface, IDefaultBrowserLayer, IBrowserView), skin.IJavaScriptManager, name=name) name = 'schooltool.CSS' provideAdapter( manager.ViewletManager(name, skin.ICSSManager), (Interface, IDefaultBrowserLayer, IBrowserView), skin.ICSSManager, name=name) name = 'schooltool.MenuBar' provideAdapter( manager.ViewletManager(name, skin.skin.IMenuBarMenuManager), (Interface, IDefaultBrowserLayer, IBrowserView), skin.skin.IMenuBarMenuManager, name=name) name = 'schooltool.NavigationMenu' provideAdapter( manager.ViewletManager(name, skin.skin.INavigationManager), (Interface, IDefaultBrowserLayer, IBrowserView), skin.skin.INavigationManager, name=name) name = 'schooltool.ActionsMenu' provideAdapter( manager.ViewletManager(name, skin.skin.IActionMenuManager), (Interface, IDefaultBrowserLayer, IBrowserView), skin.skin.IActionMenuManager, name=name)