annotate roundup/cgi/PageTemplates/PageTemplate.py @ 8566:e4191aa7b402 default tip

doc: issue2551415 correct doc for change input->input_payload in 2.5 the rest interface changed a variable name from input to input_payload. An earlier commit changed the rest docs. This commit adds an item for it to the upgrading 2.4.0->2.5.0 section. Also cross reference added to the rest docs with the updated examples.
author John Rouillard <rouilj@ieee.org>
date Thu, 09 Apr 2026 00:19:06 -0400
parents fed0f839c260
children
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
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23 import sys
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 from roundup.cgi.TAL.TALParser import TALParser
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 from roundup.cgi.TAL.HTMLTALParser import HTMLTALParser
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 from roundup.cgi.TAL.TALGenerator import TALGenerator
5478
c8902d398434 removed FasterStringIO
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5418
diff changeset
28 from roundup.cgi.TAL.TALInterpreter import TALInterpreter
5388
d26921b851c3 Python 3 preparation: make relative imports explicit.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5381
diff changeset
29 from .Expressions import getEngine
5478
c8902d398434 removed FasterStringIO
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5418
diff changeset
30 from roundup.anypy.strings import StringIO
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
31
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 class PageTemplate:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 "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
35
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 content_type = 'text/html'
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 expand = 0
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 _v_errors = ()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 _v_warnings = ()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 _v_program = None
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 _v_macros = None
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 _v_cooked = 0
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 id = '(unknown)'
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 _text = ''
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 _error_start = '<!-- Page Template Diagnostics'
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
47 def StringIO(self):
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
48 # 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
49 # StringIO can do so by monkey-patching this method.
5478
c8902d398434 removed FasterStringIO
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5418
diff changeset
50 return StringIO()
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
51
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 def pt_edit(self, text, content_type):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 if content_type:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 self.content_type = str(content_type)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 if hasattr(text, 'read'):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 text = text.read()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 self.write(text)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 def pt_getContext(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 c = {'template': self,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 'options': {},
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 'nothing': None,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 'request': None,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 'modules': ModuleImporter,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 }
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 parent = getattr(self, 'aq_parent', None)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 if parent is not None:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 c['here'] = parent
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 c['container'] = self.aq_inner.aq_parent
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 while parent is not None:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 self = parent
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 parent = getattr(self, 'aq_parent', None)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 c['root'] = self
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 return c
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
75
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 def pt_render(self, source=0, extra_context={}):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 """Render this Page Template"""
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 if not self._v_cooked:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 self._cook()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 __traceback_supplement__ = (PageTemplateTracebackSupplement, self)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 if self._v_errors:
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4570
diff changeset
84 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
85 output = self.StringIO()
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 c = self.pt_getContext()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 c.update(extra_context)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 TALInterpreter(self._v_program, self._v_macros,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 getEngine().getContext(c),
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 output,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 tal=not source, strictinsert=0)()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 return output.getvalue()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95 def __call__(self, *args, **kwargs):
5381
0942fe89e82e Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents: 5378
diff changeset
96 if 'args' not in kwargs:
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 kwargs['args'] = args
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
98 return self.pt_render(extra_context={'options': kwargs})
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100 def pt_errors(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101 if not self._v_cooked:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 self._cook()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
103 err = self._v_errors
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 if err:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
105 return err
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 if not self.expand: return
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 try:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 self.pt_render(source=1)
8528
fed0f839c260 fix: replace except: with except Exception: (by haosenwang1018@github)
John Rouillard <rouilj@ieee.org>
parents: 5478
diff changeset
109 except Exception:
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 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
111
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 def pt_warnings(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
113 if not self._v_cooked:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114 self._cook()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 return self._v_warnings
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117 def pt_macros(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 if not self._v_cooked:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119 self._cook()
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1071
diff changeset
120 __traceback_supplement__ = (PageTemplateTracebackSupplement, self)
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 if self._v_errors:
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4570
diff changeset
122 raise PTRuntimeError('Page Template %s has errors.' % self.id)
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 return self._v_macros
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1071
diff changeset
125 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
126 if name == 'macros':
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1071
diff changeset
127 return self.pt_macros()
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4570
diff changeset
128 raise AttributeError(name)
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1071
diff changeset
129
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130 def pt_source_file(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
131 return None # Unknown.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133 def write(self, text):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134 assert type(text) is type('')
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
135 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
136 errend = text.find('-->')
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 if errend >= 0:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
138 text = text[errend + 4:]
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139 if self._text != text:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 self._text = text
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
141 self._cook()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143 def read(self):
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
144 self._cook_check()
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145 if not self._v_errors:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146 if not self.expand:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147 return self._text
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148 try:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
149 return self.pt_render(source=1)
8528
fed0f839c260 fix: replace except: with except Exception: (by haosenwang1018@github)
John Rouillard <rouilj@ieee.org>
parents: 5478
diff changeset
150 except Exception:
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 return ('%s\n Macro expansion failed\n %s\n-->\n%s' %
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152 (self._error_start, "%s: %s" % sys.exc_info()[:2],
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153 self._text) )
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
154
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155 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
156 '\n '.join(self._v_errors),
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
157 self._text))
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
158
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
159 def _cook_check(self):
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
160 if not self._v_cooked:
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
161 self._cook()
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
162
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
163 def _cook(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
164 """Compile the TAL and METAL statments.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166 Cooking must not fail due to compilation errors in templates.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
167 """
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
168 source_file = self.pt_source_file()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
169 if self.html():
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
170 gen = TALGenerator(getEngine(), xml=0, source_file=source_file)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
171 parser = HTMLTALParser(gen)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
172 else:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
173 gen = TALGenerator(getEngine(), source_file=source_file)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
174 parser = TALParser(gen)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
175
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
176 self._v_errors = ()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
177 try:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
178 parser.parseString(self._text)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
179 self._v_program, self._v_macros = parser.getCode()
8528
fed0f839c260 fix: replace except: with except Exception: (by haosenwang1018@github)
John Rouillard <rouilj@ieee.org>
parents: 5478
diff changeset
180 except Exception:
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
181 self._v_errors = ["Compilation failed",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
182 "%s: %s" % sys.exc_info()[:2]]
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
183 self._v_warnings = parser.getWarnings()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
184 self._v_cooked = 1
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
185
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
186 def html(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
187 if not hasattr(getattr(self, 'aq_base', self), 'is_html'):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
188 return self.content_type == 'text/html'
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
189 return self.is_html
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
190
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
191 class _ModuleImporter:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
192 def __getitem__(self, module):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
193 mod = __import__(module)
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
194 path = module.split('.')
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
195 for name in path[1:]:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
196 mod = getattr(mod, name)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
197 return mod
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
198
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
199 ModuleImporter = _ModuleImporter()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
200
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
201 class PTRuntimeError(RuntimeError):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
202 '''The Page Template has template errors that prevent it from rendering.'''
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
203 pass
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
204
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
205
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
206 class PageTemplateTracebackSupplement:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
207 #__implements__ = ITracebackSupplement
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
208
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
209 def __init__(self, pt):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
210 self.object = pt
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
211 w = pt.pt_warnings()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
212 e = pt.pt_errors()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
213 if e:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
214 w = list(w) + list(e)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
215 self.warnings = w
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
216

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