[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