[Checkins] SVN: grok/branches/regebro-guido-templates/src/grok/
Template types can now be registered.
Lennart Regebro
regebro at gmail.com
Tue Oct 2 07:38:24 EDT 2007
Log message for revision 80472:
Template types can now be registered.
Changed:
U grok/branches/regebro-guido-templates/src/grok/_grok.py
U grok/branches/regebro-guido-templates/src/grok/components.py
U grok/branches/regebro-guido-templates/src/grok/interfaces.py
U grok/branches/regebro-guido-templates/src/grok/templatereg.py
U grok/branches/regebro-guido-templates/src/grok/tests/view/dirandinlinetemplate.py
-=-
Modified: grok/branches/regebro-guido-templates/src/grok/_grok.py
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/_grok.py 2007-10-02 11:37:39 UTC (rev 80471)
+++ grok/branches/regebro-guido-templates/src/grok/_grok.py 2007-10-02 11:38:24 UTC (rev 80472)
@@ -31,7 +31,7 @@
import grok
-from grok import components, meta
+from grok import components, meta, templatereg
from grok import templatereg
_bootstrapped = False
@@ -53,6 +53,7 @@
# now grok the grokkers
martian.grok_module(scan.module_info_from_module(meta), the_module_grokker)
+ martian.grok_module(scan.module_info_from_module(templatereg), the_module_grokker)
def addSiteHandler(site, event):
sitemanager = LocalSiteManager(site)
Modified: grok/branches/regebro-guido-templates/src/grok/components.py
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/components.py 2007-10-02 11:37:39 UTC (rev 80471)
+++ grok/branches/regebro-guido-templates/src/grok/components.py 2007-10-02 11:38:24 UTC (rev 80472)
@@ -216,6 +216,8 @@
class PageTemplateFile(GrokPageTemplate, TrustedAppPT,
pagetemplatefile.PageTemplateFile):
+
+ interface.implements(interfaces.ITemplateFile)
def __init__(self, filename, _prefix=None):
_prefix = self.get_path_from_prefix(_prefix)
@@ -226,8 +228,8 @@
# XXX unfortunately using caller_module means that
# PageTemplateFile cannot be subclassed
self.__grok_module__ = martian.util.caller_module()
+
-
class DirectoryResource(directoryresource.DirectoryResource):
# We subclass this, because we want to override the default factories for
# the resources so that .pt and .html do not get created as page
Modified: grok/branches/regebro-guido-templates/src/grok/interfaces.py
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/interfaces.py 2007-10-02 11:37:39 UTC (rev 80471)
+++ grok/branches/regebro-guido-templates/src/grok/interfaces.py 2007-10-02 11:38:24 UTC (rev 80472)
@@ -429,3 +429,20 @@
Use name for index name and attribute to index. Set up
index for interface or class context.
"""
+
+class ITemplateFactory(interface.Interface):
+ """Utility that generated templates. One per template type/extension"""
+
+ def __call__(self, filename, _prefix=None):
+ """Creates an ITemplateFile
+
+ _prefix is the directory the file is located in
+ """
+
+class ITemplateFile(interface.Interface):
+ """Template objects created from files
+ """
+
+ def __call__(self, args, request):
+ """Renders the template. Args is a tuple of arguments."""
+
\ No newline at end of file
Modified: grok/branches/regebro-guido-templates/src/grok/templatereg.py
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/templatereg.py 2007-10-02 11:37:39 UTC (rev 80471)
+++ grok/branches/regebro-guido-templates/src/grok/templatereg.py 2007-10-02 11:38:24 UTC (rev 80472)
@@ -1,6 +1,7 @@
from martian.error import GrokError
import os
+import zope.component
import grok
import warnings
@@ -34,7 +35,16 @@
if template_file.startswith('.') or template_file.endswith('~'):
continue
- if not template_file.endswith('.pt'):
+ #import pdb
+ #pdb.set_trace()
+
+ template_name, extension = os.path.splitext(template_file)
+ extension = extension[1:] # Get rid of the leading dot.
+ template_factory = zope.component.queryUtility(
+ grok.interfaces.ITemplateFactory,
+ name=extension)
+
+ if template_factory is None:
# Warning when importing files. This should be
# allowed because people may be using editors that generate
# '.bak' files and such.
@@ -43,21 +53,33 @@
(template_file, template_dir), UserWarning, 2)
continue
- template_name = template_file[:-3] # cut off .pt
- template = grok.PageTemplateFile(template_file, template_dir)
- template_path = os.path.join(template_dir, template_file)
- template._annotateGrokInfo(template_name, template_path)
-
inline_template = self.get(template_name)
if inline_template:
raise GrokError("Conflicting templates found for name '%s' "
- "in module %r, both inline and in template "
- "directory '%s'."
+ "in module %r, either inline and in template "
+ "directory '%s', or two templates with the "
+ "same name and different extensions."
% (template_name, module_info.getModule(),
template_dir), inline_template)
+
+ template = template_factory(template_file, template_dir)
+ template_path = os.path.join(template_dir, template_file)
+ template._annotateGrokInfo(template_name, template_path)
+
self.register(template_name, template)
def listUnassociated(self):
for name, entry in self._reg.iteritems():
if not entry['associated']:
yield name
+
+
+class PageTemplateFileFactory(grok.GlobalUtility):
+
+ grok.implements(grok.interfaces.ITemplateFactory)
+ grok.name('pt')
+
+
+ def __call__(self, filename, _prefix=None):
+ return grok.components.PageTemplateFile(filename, _prefix)
+
\ No newline at end of file
Modified: grok/branches/regebro-guido-templates/src/grok/tests/view/dirandinlinetemplate.py
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/tests/view/dirandinlinetemplate.py 2007-10-02 11:37:39 UTC (rev 80471)
+++ grok/branches/regebro-guido-templates/src/grok/tests/view/dirandinlinetemplate.py 2007-10-02 11:38:24 UTC (rev 80472)
@@ -5,9 +5,7 @@
>>> grok.grok(__name__)
Traceback (most recent call last):
...
- GrokError: Conflicting templates found for name 'cavepainting' in module
- <module 'grok.tests.view.dirandinlinetemplate' from '...'>,
- both inline and in template directory '...dirandinlinetemplate_templates'.
+ GrokError: Conflicting templates found ...
"""
import grok
More information about the Checkins
mailing list