annotate roundup/cgi/PageTemplates/PageTemplate.py @ 4546:d39c37fd2940 git

Repository conversion from Subversion to git.
author Eric S. Raymond <esr@thyrsus.com>
date Tue, 18 Oct 2011 10:20:29 -0400
parents b43efe461b3e
children 6e3e4f24c753
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 ##############################################################################
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 #
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 # Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
4 #
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5 # This software is subject to the provisions of the Zope Public License,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6 # Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 # FOR A PARTICULAR PURPOSE
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
11 #
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
12 ##############################################################################
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
13 # Modified for Roundup:
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14 #
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
15 # 1. changed imports to import from roundup.cgi
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
16 # 2. removed use of ExtensionClass
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
17 # 3. removed use of ComputedAttribute
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 """Page Template module
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20 HTML- and XML-based template objects using TAL, TALES, and METAL.
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
21 """
1071
c08b3820edd1 Adhering to ZPL
Richard Jones <richard@users.sourceforge.net>
parents: 1049
diff changeset
22
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
23 __version__='$Revision: 1.5 $'[11:-2]
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 import sys
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 from roundup.cgi.TAL.TALParser import TALParser
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28 from roundup.cgi.TAL.HTMLTALParser import HTMLTALParser
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 from roundup.cgi.TAL.TALGenerator import TALGenerator
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
30 # Do not use cStringIO here! It's not unicode aware. :(
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
31 from roundup.cgi.TAL.TALInterpreter import TALInterpreter, FasterStringIO
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 from Expressions import getEngine
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
33
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 class PageTemplate:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 "Page Templates using TAL, TALES, and METAL"
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
37
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 content_type = 'text/html'
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 expand = 0
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 _v_errors = ()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 _v_warnings = ()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 _v_program = None
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 _v_macros = None
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 _v_cooked = 0
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 id = '(unknown)'
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 _text = ''
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 _error_start = '<!-- Page Template Diagnostics'
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
49 def StringIO(self):
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
50 # Third-party products wishing to provide a full Unicode-aware
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
51 # StringIO can do so by monkey-patching this method.
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
52 return FasterStringIO()
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
53
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 def pt_edit(self, text, content_type):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 if content_type:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 self.content_type = str(content_type)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 if hasattr(text, 'read'):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 text = text.read()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 self.write(text)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 def pt_getContext(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 c = {'template': self,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 'options': {},
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 'nothing': None,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 'request': None,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 'modules': ModuleImporter,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 }
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 parent = getattr(self, 'aq_parent', None)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 if parent is not None:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 c['here'] = parent
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 c['container'] = self.aq_inner.aq_parent
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 while parent is not None:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 self = parent
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 parent = getattr(self, 'aq_parent', None)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
75 c['root'] = self
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 return c
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
77
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 def pt_render(self, source=0, extra_context={}):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 """Render this Page Template"""
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 if not self._v_cooked:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 self._cook()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 __traceback_supplement__ = (PageTemplateTracebackSupplement, self)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 if self._v_errors:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 raise PTRuntimeError, 'Page Template %s has errors.' % self.id
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
87 output = self.StringIO()
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 c = self.pt_getContext()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 c.update(extra_context)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 TALInterpreter(self._v_program, self._v_macros,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 getEngine().getContext(c),
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 output,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94 tal=not source, strictinsert=0)()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95 return output.getvalue()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 def __call__(self, *args, **kwargs):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
98 if not kwargs.has_key('args'):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99 kwargs['args'] = args
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100 return self.pt_render(extra_context={'options': kwargs})
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 def pt_errors(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
103 if not self._v_cooked:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 self._cook()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
105 err = self._v_errors
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 if err:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 return err
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 if not self.expand: return
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 try:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 self.pt_render(source=1)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111 except:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 return ('Macro expansion failed', '%s: %s' % sys.exc_info()[:2])
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
113
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114 def pt_warnings(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 if not self._v_cooked:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116 self._cook()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117 return self._v_warnings
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119 def pt_macros(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 if not self._v_cooked:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 self._cook()
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1071
diff changeset
122 __traceback_supplement__ = (PageTemplateTracebackSupplement, self)
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 if self._v_errors:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124 raise PTRuntimeError, 'Page Template %s has errors.' % self.id
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
125 return self._v_macros
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1071
diff changeset
127 def __getattr__(self, name):
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1071
diff changeset
128 if name == 'macros':
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1071
diff changeset
129 return self.pt_macros()
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1071
diff changeset
130 raise AttributeError, name
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1071
diff changeset
131
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132 def pt_source_file(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133 return None # Unknown.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
135 def write(self, text):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
136 assert type(text) is type('')
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 if text[:len(self._error_start)] == self._error_start:
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
138 errend = text.find('-->')
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139 if errend >= 0:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 text = text[errend + 4:]
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
141 if self._text != text:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 self._text = text
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143 self._cook()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145 def read(self):
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
146 self._cook_check()
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147 if not self._v_errors:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148 if not self.expand:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
149 return self._text
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
150 try:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 return self.pt_render(source=1)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152 except:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153 return ('%s\n Macro expansion failed\n %s\n-->\n%s' %
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154 (self._error_start, "%s: %s" % sys.exc_info()[:2],
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155 self._text) )
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
156
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
157 return ('%s\n %s\n-->\n%s' % (self._error_start,
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
158 '\n '.join(self._v_errors),
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
159 self._text))
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
160
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
161 def _cook_check(self):
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
162 if not self._v_cooked:
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
163 self._cook()
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
164
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165 def _cook(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166 """Compile the TAL and METAL statments.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
167
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
168 Cooking must not fail due to compilation errors in templates.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
169 """
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
170 source_file = self.pt_source_file()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
171 if self.html():
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
172 gen = TALGenerator(getEngine(), xml=0, source_file=source_file)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
173 parser = HTMLTALParser(gen)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
174 else:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
175 gen = TALGenerator(getEngine(), source_file=source_file)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
176 parser = TALParser(gen)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
177
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
178 self._v_errors = ()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
179 try:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
180 parser.parseString(self._text)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
181 self._v_program, self._v_macros = parser.getCode()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
182 except:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
183 self._v_errors = ["Compilation failed",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
184 "%s: %s" % sys.exc_info()[:2]]
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
185 self._v_warnings = parser.getWarnings()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
186 self._v_cooked = 1
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
187
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
188 def html(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
189 if not hasattr(getattr(self, 'aq_base', self), 'is_html'):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
190 return self.content_type == 'text/html'
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
191 return self.is_html
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
192
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
193 class _ModuleImporter:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
194 def __getitem__(self, module):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
195 mod = __import__(module)
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
196 path = module.split('.')
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
197 for name in path[1:]:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
198 mod = getattr(mod, name)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
199 return mod
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
200
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
201 ModuleImporter = _ModuleImporter()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
202
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
203 class PTRuntimeError(RuntimeError):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
204 '''The Page Template has template errors that prevent it from rendering.'''
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
205 pass
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
206
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
207
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
208 class PageTemplateTracebackSupplement:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
209 #__implements__ = ITracebackSupplement
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
210
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
211 def __init__(self, pt):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
212 self.object = pt
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
213 w = pt.pt_warnings()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
214 e = pt.pt_errors()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
215 if e:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
216 w = list(w) + list(e)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
217 self.warnings = w
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
218

Roundup Issue Tracker: http://roundup-tracker.org/