[Checkins] SVN: Sandbox/darrylcousins/mars.template/src/mars/template/ Added WidgetTemplateFactory

Darryl Cousins darryl at darrylcousins.net.nz
Wed Jul 11 20:28:07 EDT 2007


Log message for revision 77707:
  Added WidgetTemplateFactory

Changed:
  U   Sandbox/darrylcousins/mars.template/src/mars/template/__init__.py
  U   Sandbox/darrylcousins/mars.template/src/mars/template/components.py
  U   Sandbox/darrylcousins/mars.template/src/mars/template/directive.py
  U   Sandbox/darrylcousins/mars.template/src/mars/template/meta.py

-=-
Modified: Sandbox/darrylcousins/mars.template/src/mars/template/__init__.py
===================================================================
--- Sandbox/darrylcousins/mars.template/src/mars/template/__init__.py	2007-07-11 21:03:24 UTC (rev 77706)
+++ Sandbox/darrylcousins/mars.template/src/mars/template/__init__.py	2007-07-12 00:28:03 UTC (rev 77707)
@@ -1,2 +1,2 @@
-from directive import macro, content_type
-from components import TemplateFactory, LayoutFactory
+from directive import macro, content_type, mode, view, field, widget
+from components import TemplateFactory, LayoutFactory, WidgetTemplateFactory

Modified: Sandbox/darrylcousins/mars.template/src/mars/template/components.py
===================================================================
--- Sandbox/darrylcousins/mars.template/src/mars/template/components.py	2007-07-11 21:03:24 UTC (rev 77706)
+++ Sandbox/darrylcousins/mars.template/src/mars/template/components.py	2007-07-12 00:28:03 UTC (rev 77707)
@@ -6,3 +6,7 @@
     pass
 
 
+class WidgetTemplateFactory(object):
+    pass
+
+

Modified: Sandbox/darrylcousins/mars.template/src/mars/template/directive.py
===================================================================
--- Sandbox/darrylcousins/mars.template/src/mars/template/directive.py	2007-07-11 21:03:24 UTC (rev 77706)
+++ Sandbox/darrylcousins/mars.template/src/mars/template/directive.py	2007-07-12 00:28:03 UTC (rev 77707)
@@ -1,8 +1,17 @@
-from martian.directive import (SingleTextDirective,
+from martian.directive import (InterfaceOrClassDirective,
+                               SingleTextDirective,
                                ClassDirectiveContext)
 
 macro = SingleTextDirective('mars.template.macro',
                            ClassDirectiveContext())
 content_type = SingleTextDirective('mars.template.content_type',
                            ClassDirectiveContext())
+mode = SingleTextDirective('mars.template.mode',
+                           ClassDirectiveContext())
+view = InterfaceOrClassDirective('mars.template.view',
+                           ClassDirectiveContext())
+field = InterfaceOrClassDirective('mars.template.field',
+                           ClassDirectiveContext())
+widget = InterfaceOrClassDirective('mars.template.widget',
+                           ClassDirectiveContext())
 

Modified: Sandbox/darrylcousins/mars.template/src/mars/template/meta.py
===================================================================
--- Sandbox/darrylcousins/mars.template/src/mars/template/meta.py	2007-07-11 21:03:24 UTC (rev 77706)
+++ Sandbox/darrylcousins/mars.template/src/mars/template/meta.py	2007-07-12 00:28:03 UTC (rev 77707)
@@ -6,6 +6,8 @@
 from zope.publisher.interfaces.browser import IDefaultBrowserLayer
 from zope.pagetemplate.interfaces import IPageTemplate
 
+from z3c.form.interfaces import INPUT_MODE
+from z3c.form.widget import WidgetTemplateFactory
 from z3c.template.template import TemplateFactory
 from z3c.template.interfaces import ILayoutTemplate
 
@@ -72,3 +74,49 @@
     provides = ILayoutTemplate
 
 
+class WidgetTemplateFactoryGrokker(martian.ClassGrokker):
+    component_class = mars.template.WidgetTemplateFactory
+    provides = IPageTemplate
+
+    def grok(self, name, factory, context, module_info, templates):
+        view_context = util.determine_class_context(factory, context)
+        factory.module_info = module_info
+        factory_name = factory.__name__.lower()
+
+        # we need a path to the file containing the template
+        template_name = util.class_annotation(factory, 'grok.template',
+                                              factory_name)
+        filepath = os.path.join(os.path.dirname(module_info.path), template_name)
+        if not os.path.exists(filepath):
+            filepath = None
+            if os.path.exists(template_name):
+                filepath = template_name
+        if filepath is None:
+            raise GrokError("No template found for %s."
+                            " Please use grok.template to define path to the"
+                            " file containing the template"
+                            % (factory.__name__),
+                            factory)
+
+        provides = util.class_annotation(factory, 'grok.provides', self.provides)
+        contentType = util.class_annotation(factory,
+                                    'mars.template.content_type', 'text/html')
+        view_layer = util.class_annotation(factory, 'mars.layer.layer',
+                                       None) or module_info.getAnnotation('mars.layer.layer',
+                                       None) or IDefaultBrowserLayer
+        mode = util.class_annotation(factory, 'mars.template.mode', INPUT_MODE)
+        view = util.class_annotation(factory, 'mars.template.view', None)
+        field = util.class_annotation(factory, 'mars.template.field', None)
+        widget = util.class_annotation(factory, 'mars.template.widget', None)
+
+        factory = WidgetTemplateFactory(filepath, contentType)
+        zope.interface.directlyProvides(factory, provides)
+        #print '\nname:', mode,'context:', view_context,'factory:',\
+        #      factory, 'provides', provides, 'view:', view, 'field:', field, \
+        #      'widget:', widget, '\n'
+        zope.component.provideAdapter(factory,
+                                 adapts=(view_context, view_layer, view, field, widget),
+                                 provides=provides,
+                                 name=mode)
+        return True
+



More information about the Checkins mailing list