[Checkins]
SVN: grok/branches/ksmith_mcweekly-boundpagetemplate/src/grok/components.py
initial implementation, all tests pass
Kevin Smith
kevin at mcweekly.com
Sun Jun 10 21:56:04 EDT 2007
Log message for revision 76606:
initial implementation, all tests pass
Changed:
U grok/branches/ksmith_mcweekly-boundpagetemplate/src/grok/components.py
-=-
Modified: grok/branches/ksmith_mcweekly-boundpagetemplate/src/grok/components.py
===================================================================
--- grok/branches/ksmith_mcweekly-boundpagetemplate/src/grok/components.py 2007-06-10 22:20:14 UTC (rev 76605)
+++ grok/branches/ksmith_mcweekly-boundpagetemplate/src/grok/components.py 2007-06-11 01:56:02 UTC (rev 76606)
@@ -167,20 +167,13 @@
template = getattr(self, 'template', None)
if template is not None:
- return self._render_template()
+ return self.template()
return mapply(self.render, (), self.request)
- def _render_template(self):
- namespace = self.template.pt_getContext()
- namespace['request'] = self.request
- namespace['view'] = self
- namespace['context'] = self.context
- # XXX need to check whether we really want to put None here if missing
- namespace['static'] = self.static
- return self.template.pt_render(namespace)
def __getitem__(self, key):
# XXX give nice error message if template is None
+ #import pdb; pdb.set_trace()
return self.template.macros[key]
def url(self, obj=None, name=None):
@@ -235,6 +228,7 @@
method_result = mapply(method, (), self.request)
return simplejson.dumps(method_result)
+
class GrokPageTemplate(object):
def __repr__(self):
@@ -245,7 +239,7 @@
self.__grok_name__ = name
self.__grok_location__ = location
-
+
class PageTemplate(GrokPageTemplate, TrustedAppPT, pagetemplate.PageTemplate):
expand = 0
@@ -262,7 +256,24 @@
# PageTemplate cannot be subclassed
self.__grok_module__ = util.caller_module()
+ def pt_getContext(self, instance, *args, **_kw):
+ try:
+ instance = instance[0]
+ except IndexError:
+ import pdb; pdb.set_trace()
+ pass # instance = instance
+
+ namespace = super(PageTemplate, self).pt_getContext(**_kw)
+ namespace['request'] = instance.request
+ namespace['view'] = instance
+ namespace['context'] = context = instance.context
+ namespace['static'] = instance.static
+ return namespace
+ def __get__(self, instance, type):
+ return BoundPageTemplate(self, instance)
+
+
class PageTemplateFile(GrokPageTemplate, TrustedAppPT,
pagetemplatefile.PageTemplateFile):
@@ -276,7 +287,44 @@
# PageTemplateFile cannot be subclassed
self.__grok_module__ = util.caller_module()
+ def pt_getContext(self, instance, *args, **_kw):
+ try:
+ instance = instance[0]
+ except IndexError:
+ pass # instance = instance
+
+ namespace = super(PageTemplateFile, self).pt_getContext(**_kw)
+ namespace['request'] = instance.request
+ namespace['view'] = instance
+ namespace['context'] = context = instance.context
+ namespace['static'] = instance.static
+ return namespace
+ def __get__(self, instance, type):
+ return BoundPageTemplate(self, instance)
+
+
+class BoundPageTemplate(object):
+ def __init__(self, pt, ob):
+ object.__setattr__(self, 'im_func', pt)
+ object.__setattr__(self, 'im_self', ob)
+ object.__setattr__(self, 'macros', pt.macros)
+
+ def __call__(self, *args, **kw):
+
+ if self.im_self is None:
+ im_self, args = args[0], args[1:]
+ else:
+ im_self = self.im_self
+ return self.im_func(im_self, *args, **kw)
+
+ def __setattr__(self, name, v):
+ raise AttributeError("Can't set attribute", name)
+
+ def __repr__(self):
+ return "<BoundPageTemplate of %r>" % self.im_self
+
+
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
@@ -403,7 +451,7 @@
# causes the widgets to have different data
self.resetForm()
self.form_reset = False
- self.form_result = self._render_template()
+ self.form_result = self.template()
return self.form_result
More information about the Checkins
mailing list