[Checkins] SVN: megrok.genshi/trunk/ Inline template support.

Lennart Regebro regebro at gmail.com
Fri Oct 5 05:47:24 EDT 2007


Log message for revision 80628:
  Inline template support.
  

Changed:
  U   megrok.genshi/trunk/buildout.cfg
  U   megrok.genshi/trunk/src/megrok/genshi/__init__.py
  U   megrok.genshi/trunk/src/megrok/genshi/components.py
  U   megrok.genshi/trunk/src/megrok/genshi/ftesting.zcml
  U   megrok.genshi/trunk/src/megrok/genshi/tests/test_genshitemplate.py

-=-
Modified: megrok.genshi/trunk/buildout.cfg
===================================================================
--- megrok.genshi/trunk/buildout.cfg	2007-10-05 09:42:48 UTC (rev 80627)
+++ megrok.genshi/trunk/buildout.cfg	2007-10-05 09:47:23 UTC (rev 80628)
@@ -1,6 +1,6 @@
 [buildout]
 develop = . grok
-parts = app data zopectl test
+parts = app data zopectl test test_grok
 find-links = http://download.zope.org/distribution/
 newest = false
 
@@ -54,3 +54,8 @@
 recipe = zc.recipe.testrunner
 eggs = megrok.genshi
 defaults = ['--tests-pattern', '^f?tests$', '-v']
+
+[test_grok]
+recipe = zc.recipe.testrunner
+eggs = grok
+defaults = ['--tests-pattern', '^f?tests$', '-v']

Modified: megrok.genshi/trunk/src/megrok/genshi/__init__.py
===================================================================
--- megrok.genshi/trunk/src/megrok/genshi/__init__.py	2007-10-05 09:42:48 UTC (rev 80627)
+++ megrok.genshi/trunk/src/megrok/genshi/__init__.py	2007-10-05 09:47:23 UTC (rev 80628)
@@ -0,0 +1 @@
+

Modified: megrok.genshi/trunk/src/megrok/genshi/components.py
===================================================================
--- megrok.genshi/trunk/src/megrok/genshi/components.py	2007-10-05 09:42:48 UTC (rev 80627)
+++ megrok.genshi/trunk/src/megrok/genshi/components.py	2007-10-05 09:47:23 UTC (rev 80628)
@@ -16,19 +16,15 @@
 import grok.components
 import grok.interfaces
 import genshi.template
+import grok
+import martian
 
-class GenshiMarkupTemplateFile(grok.components.GrokPageTemplate):
+class GenshiTemplateBase(object):
 
-    zope.interface.implements(grok.interfaces.ITemplateFile)
-    
-    def __init__(self, filename, _prefix=None):
-        loader = genshi.template.TemplateLoader(_prefix)
-        self._template = loader.load(filename)
-            
     def __call__(self, namespace):
         stream = self._template.generate(**namespace)
-        return stream.render('xhtml')
-    
+        return stream.render(self.result_type)
+
     def _factory_init(self, factory):
         pass
     
@@ -40,25 +36,34 @@
         namespace.update(view.getTemplateVariables())
         return self(namespace)
 
-class GenshiTextTemplateFile(grok.components.GrokPageTemplate):
 
+class GenshiMarkupTemplate(GenshiTemplateBase, grok.components.PageTemplate):
+    
+    result_type = 'xhtml'
+    
+    def __init__(self, html):
+        self._template = genshi.template.MarkupTemplate(html)
+        self.__grok_module__ = martian.util.caller_module()
+
+        
+class GenshiMarkupTemplateFile(GenshiTemplateBase, grok.components.GrokPageTemplate):
+
     zope.interface.implements(grok.interfaces.ITemplateFile)
+
+    result_type = 'xhtml'
+
+    def __init__(self, filename, _prefix=None):
+        loader = genshi.template.TemplateLoader(_prefix)
+        self._template = loader.load(filename)
+            
+
+class GenshiTextTemplateFile(GenshiTemplateBase, grok.components.GrokPageTemplate):
+
+    result_type = 'xhtml'
     
+    zope.interface.implements(grok.interfaces.ITemplateFile)
+    
     def __init__(self, filename, _prefix=None):        
         loader = genshi.template.TemplateLoader(_prefix)
         self._template = loader.load(filename, cls=genshi.template.TextTemplate)
             
-    def __call__(self, namespace):
-        stream = self._template.generate(**namespace)
-        return stream.render('text')
-    
-    def _factory_init(self, factory):
-        pass
-    
-    def getDefaultVariables(self):
-        return {}
-    
-    def render_template(self, view):
-        namespace = view.getDefaultVariables()
-        namespace.update(view.getTemplateVariables())
-        return self(namespace)

Modified: megrok.genshi/trunk/src/megrok/genshi/ftesting.zcml
===================================================================
--- megrok.genshi/trunk/src/megrok/genshi/ftesting.zcml	2007-10-05 09:42:48 UTC (rev 80627)
+++ megrok.genshi/trunk/src/megrok/genshi/ftesting.zcml	2007-10-05 09:47:23 UTC (rev 80628)
@@ -6,6 +6,7 @@
    >
 
   <include package="grok" />
+  <grok:grok package=".grokkers" />
   <grok:grok package="." />
 
   <!-- Typical functional testing security setup -->

Modified: megrok.genshi/trunk/src/megrok/genshi/tests/test_genshitemplate.py
===================================================================
--- megrok.genshi/trunk/src/megrok/genshi/tests/test_genshitemplate.py	2007-10-05 09:42:48 UTC (rev 80627)
+++ megrok.genshi/trunk/src/megrok/genshi/tests/test_genshitemplate.py	2007-10-05 09:47:23 UTC (rev 80628)
@@ -6,8 +6,8 @@
 import zope.component.eventtesting
 from zope.publisher.browser import TestRequest
 from zope import component
+from megrok.genshi import components
 
-
 class Mammoth(grok.Model):
     pass
 
@@ -31,7 +31,12 @@
     
     game = "MAMMOTH!"
 
+class Inline(grok.View):
+    pass
 
+inline = components.GenshiMarkupTemplate("<html><body>ME GROK HAS INLINES!</body></html>")
+
+
 class GenshiTemplateTests(unittest.TestCase):
     
     def test_templatedir(self):
@@ -88,6 +93,13 @@
         text = view()
         self.assertEquals(text, 'ME GROK HUNT MAMMOTH!!')
 
+    def test_inlinetemplate(self):
+        manfred = Mammoth()
+        request = TestRequest()
+        view = component.getMultiAdapter((manfred, request), name='inline')
+        html = view()
+        self.assert_('ME GROK HAS INLINES!' in html)
+        
 
 def test_suite():
     from megrok.genshi.tests import FunctionalLayer



More information about the Checkins mailing list