[Checkins] SVN: grok/branches/grokcore.xxx/ grokcore.view test setup; move templates test from grok to grokcore.view

Godefroid Chapelle gotcha at bubblenet.be
Fri Jul 18 05:14:46 EDT 2008


Log message for revision 88478:
  grokcore.view test setup; move templates test from grok to grokcore.view

Changed:
  A   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/components.py
  A   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/meta.py
  A   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/template/
  D   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/template/pluggability.py
  A   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/template/pluggability.py
  U   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/template/zpt.py
  U   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/test_all.py
  D   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/view/
  D   grok/branches/grokcore.xxx/src/grok/tests/template/

-=-
Added: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/components.py
===================================================================
--- grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/components.py	                        (rev 0)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/components.py	2008-07-18 09:14:45 UTC (rev 88478)
@@ -0,0 +1,45 @@
+import warnings
+
+from zope import interface
+from zope.publisher.browser import BrowserPage
+
+from grokcore.component.interfaces import IContext
+
+import grokcore.view
+from grokcore.view import PageTemplate
+
+
+class TestModel(object):
+    interface.implements(IContext)
+
+
+class TestView(BrowserPage, grokcore.view.ViewMixin):
+
+    def __init__(self, context, request):
+        super(TestView, self).__init__(context, request)
+        self._initialize()
+
+    def __call__(self):
+        return self._update_and_render()
+
+    def default_namespace(self):
+        namespace = {}
+        namespace['context'] = self.context
+        namespace['request'] = self.request
+        namespace['static'] = self.static
+        namespace['view'] = self
+        return namespace
+
+    def __getitem__(self, key):
+        # This is BBB code for Zope page templates only:
+        if not isinstance(self.template, PageTemplate):
+            raise AttributeError("View has no item %s" % key)
+
+        value = self.template._template.macros[key]
+        # When this deprecation is done with, this whole __getitem__ can
+        # be removed.
+        warnings.warn("Calling macros directly on the view is deprecated. "
+                      "Please use context/@@viewname/macros/macroname\n"
+                      "View %r, macro %s" % (self, key),
+                      DeprecationWarning, 1)
+        return value

Added: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/meta.py
===================================================================
--- grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/meta.py	                        (rev 0)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/meta.py	2008-07-18 09:14:45 UTC (rev 88478)
@@ -0,0 +1,50 @@
+from zope import component
+from zope.security.checker import NamesChecker, defineChecker
+from zope.security.interfaces import IPermission
+
+import martian
+from martian.error import GrokError
+
+from grokcore.view.meta import ViewGrokkerBase
+import grokcore.view
+
+
+def make_checker(factory, view_factory, permission, method_names=None):
+    """Make a checker for a view_factory associated with factory.
+
+    These could be one and the same for normal views, or different
+    in case we make method-based views such as for JSON and XMLRPC.
+    """
+
+    if method_names is None:
+        method_names = ['__call__']
+    if permission is not None:
+        check_permission(factory, permission)
+    if permission is None or permission == 'zope.Public':
+        checker = NamesChecker(method_names)
+    else:
+        checker = NamesChecker(method_names, permission)
+    defineChecker(view_factory, checker)
+
+
+def check_permission(factory, permission):
+    """Check whether a permission is defined.
+
+    If not, raise error for factory.
+    """
+    if component.queryUtility(IPermission,
+                              name=permission) is None:
+        raise GrokError('Undefined permission %r in %r. Use '
+                        'grok.Permission first.'
+                        % (permission, factory), factory)
+
+
+class ViewGrokker(ViewGrokkerBase):
+    martian.component(grokcore.view.ViewMixin)
+
+    def protectName(self, config, factory, permission):
+        config.action(
+            discriminator=('protectName', factory, '__call__'),
+            callable=make_checker,
+            args=(factory, factory, permission),
+            )

Copied: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/template (from rev 88446, grok/branches/grokcore.xxx/src/grok/tests/template)


Property changes on: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/template
___________________________________________________________________
Name: svn:mergeinfo
   + 

Deleted: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/template/pluggability.py
===================================================================
--- grok/branches/grokcore.xxx/src/grok/tests/template/pluggability.py	2008-07-17 14:29:37 UTC (rev 88446)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/template/pluggability.py	2008-07-18 09:14:45 UTC (rev 88478)
@@ -1,88 +0,0 @@
-"""
-Testing the plugging in of a template language
-
-  >>> grok.testing.grok(__name__)
-  
-  >>> cave = Cave()
-  >>> from zope.publisher.browser import TestRequest
-  >>> request = TestRequest()
-  >>> from zope import component
-  
-  # The inline template should work:
-  >>> view = component.getMultiAdapter((cave, request), name='sebaayeni')
-  >>> print view()
-  <html><body>Sebaayeni is in South Africa</body></html>
-
-  # And the inline file template:
-  >>> view = component.getMultiAdapter((cave, request), name='lascaux')
-  >>> print view()
-  <html><body>Lascaux is in France</body></html>
-
-  # And the template directory template:
-  >>> view = component.getMultiAdapter((cave, request), name='kakadu')
-  >>> print view()
-  <html><body>Kakadu is in Australia</body></html>
-
-  # We should be able to extend the namespac in the view and 
-  >>> view = component.getMultiAdapter((cave, request), name='sierra')
-  >>> print view()
-  <html><body>Sierra de San Fransisco is in Mexico</body></html>
-
-"""
-import grok, os
-
-# Dummy template language:
-class MyTemplate(object):
-    
-    def __init__(self, text):
-        self._text = text
-            
-    def render(self, **kw):
-        # Silliest template language ever:
-        return self._text % kw
-
-class MyPageTemplate(grok.components.GrokTemplate):
-
-    def setFromString(self, string):
-        self._template = MyTemplate(string)
-
-    def setFromFilename(self, filename, _prefix=None):
-        file = open(os.path.join(_prefix, filename))
-        self._template = MyTemplate(file.read())
-
-    def namespace(self, view):
-        # I'll override the default namespace here for testing:
-        return {'middle_text': 'is in'}
-
-    def render(self, view):
-        return self._template.render(**self.getNamespace(view))
-
-class MyPageTemplateFactory(grok.GlobalUtility):
-
-    grok.implements(grok.interfaces.ITemplateFileFactory)
-    grok.name('mtl')
-
-    def __call__(self, filename, _prefix=None):
-        return MyPageTemplate(filename=filename, _prefix=_prefix)
-
-class Cave(grok.Model):
-    pass
-
-class Sebaayeni(grok.View):
-    pass
-    
-sebaayeni = MyPageTemplate('<html><body>Sebaayeni is in South Africa</body></html>')
-
-class Lascaux(grok.View):
-    pass
-    
-lascaux = MyPageTemplate(filename='lascaux.html')
-
-class Kakadu(grok.View):
-    pass
-
-class Sierra(grok.View):
-    
-    def namespace(self):
-        return {'cave': 'Sierra de San Fransisco',
-                'country': 'Mexico'}

Copied: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/template/pluggability.py (from rev 88459, grok/branches/grokcore.xxx/src/grok/tests/template/pluggability.py)
===================================================================
--- grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/template/pluggability.py	                        (rev 0)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/template/pluggability.py	2008-07-18 09:14:45 UTC (rev 88478)
@@ -0,0 +1,95 @@
+"""
+Testing the plugging in of a template language
+
+  >>> from grokcore.view.tests.test_all import grok
+  >>> grok(__name__)
+
+  >>> cave = Cave()
+  >>> from zope.publisher.browser import TestRequest
+  >>> request = TestRequest()
+  >>> from zope import component
+
+  # The inline template should work:
+  >>> view = component.getMultiAdapter((cave, request), name='sebaayeni')
+  >>> print view()
+  <html><body>Sebaayeni is in South Africa</body></html>
+
+  # And the inline file template:
+  >>> view = component.getMultiAdapter((cave, request), name='lascaux')
+  >>> print view()
+  <html><body>Lascaux is in France</body></html>
+
+  # And the template directory template:
+  >>> view = component.getMultiAdapter((cave, request), name='kakadu')
+  >>> print view()
+  <html><body>Kakadu is in Australia</body></html>
+
+  # We should be able to extend the namespac in the view and
+  >>> view = component.getMultiAdapter((cave, request), name='sierra')
+  >>> print view()
+  <html><body>Sierra de San Fransisco is in Mexico</body></html>
+
+"""
+import os
+import grokcore.component
+import grokcore.view
+from grokcore.view import components
+
+from grokcore.view.tests.components import TestView
+from grokcore.view.tests.components import TestModel
+
+# Dummy template language:
+class MyTemplate(object):
+
+    def __init__(self, text):
+        self._text = text
+
+    def render(self, **kw):
+        # Silliest template language ever:
+        return self._text % kw
+
+class MyPageTemplate(components.GrokTemplate):
+
+    def setFromString(self, string):
+        self._template = MyTemplate(string)
+
+    def setFromFilename(self, filename, _prefix=None):
+        file = open(os.path.join(_prefix, filename))
+        self._template = MyTemplate(file.read())
+
+    def namespace(self, view):
+        # I'll override the default namespace here for testing:
+        return {'middle_text': 'is in'}
+
+    def render(self, view):
+        return self._template.render(**self.getNamespace(view))
+
+class MyPageTemplateFactory(grokcore.component.GlobalUtility):
+
+    grokcore.component.implements(grokcore.view.interfaces.ITemplateFileFactory)
+    grokcore.component.name('mtl')
+
+    def __call__(self, filename, _prefix=None):
+        return MyPageTemplate(filename=filename, _prefix=_prefix)
+
+class Cave(TestModel):
+    pass
+
+class Sebaayeni(TestView):
+    pass
+
+sebaayeni = MyPageTemplate('<html><body>Sebaayeni is in South Africa</body></html>')
+
+class Lascaux(TestView):
+    pass
+
+lascaux = MyPageTemplate(filename='lascaux.html')
+
+class Kakadu(TestView):
+    pass
+
+class Sierra(TestView):
+
+    def namespace(self):
+        return {'cave': 'Sierra de San Fransisco',
+                'country': 'Mexico'}

Modified: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/template/zpt.py
===================================================================
--- grok/branches/grokcore.xxx/src/grok/tests/template/zpt.py	2008-07-17 14:29:37 UTC (rev 88446)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/template/zpt.py	2008-07-18 09:14:45 UTC (rev 88478)
@@ -1,6 +1,7 @@
 """
 
-  >>> grok.testing.grok(__name__)
+  >>> from grokcore.view.tests.test_all import grok
+  >>> grok(__name__)
 
   >>> cave = Cave()
   >>> from zope.publisher.browser import TestRequest
@@ -13,10 +14,13 @@
 
 """
 
-import grok
+from grokcore.view.tests.components import TestView
+from grokcore.view.tests.components import TestModel
 
-class Cave(grok.Model):
+
+class Cave(TestModel):
     pass
 
-class Piepmatz(grok.View):
+
+class Piepmatz(TestView):
     pass # template in zpt_templates/piepmatz.pt

Modified: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/test_all.py
===================================================================
--- grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/test_all.py	2008-07-18 09:02:51 UTC (rev 88477)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/test_all.py	2008-07-18 09:14:45 UTC (rev 88478)
@@ -2,18 +2,29 @@
 import re
 import unittest
 from pkg_resources import resource_listdir
+
 from zope.testing import doctest, cleanup, renormalizing
 import zope.component.eventtesting
-import grokcore.component.testing
+from zope.configuration.config import ConfigurationMachine
 
+from grokcore.component import zcml
 
+
+def grok(module_name):
+    config = ConfigurationMachine()
+    zcml.do_grok('grokcore.component.meta', config)
+    zcml.do_grok('grokcore.view.meta', config)
+    zcml.do_grok('grokcore.view.templatereg', config)
+    zcml.do_grok('grokcore.view.tests.meta', config)
+    zcml.do_grok(module_name, config)
+    config.execute_actions()
+
+
 class GrokcoreViewLayer:
 
     @classmethod
     def setUp(cls):
         zope.component.eventtesting.setUp()
-        grokcore.component.testing.grok(
-            "grokcore.view")
 
     @classmethod
     def tearDown(cls):
@@ -53,7 +64,7 @@
 
 def test_suite():
     suite = unittest.TestSuite()
-    for name in ['view']:
+    for name in ['template']:
         suite.addTest(suiteFromPackage(name))
     return suite
 



More information about the Checkins mailing list