Mercurial > genshi > genshi-test
comparison markup/plugin.py @ 192:cda3bdfc19ed
Expression evaluation now differentiates between undefined variables and variables that are defined but set to `None`.
author | cmlenz |
---|---|
date | Wed, 23 Aug 2006 17:49:14 +0000 |
parents | 35e768b0a58b |
children | 547511535aaa |
comparison
equal
deleted
inserted
replaced
191:929ef2913b87 | 192:cda3bdfc19ed |
---|---|
17 """ | 17 """ |
18 | 18 |
19 from pkg_resources import resource_filename | 19 from pkg_resources import resource_filename |
20 | 20 |
21 from markup.core import Attrs, Stream, QName | 21 from markup.core import Attrs, Stream, QName |
22 from markup.eval import Undefined | |
23 from markup.input import HTML, XML | |
22 from markup.template import Context, Template, TemplateLoader | 24 from markup.template import Context, Template, TemplateLoader |
23 | 25 |
24 def et_to_stream(element): | 26 def ET(element): |
25 """Converts the given ElementTree element to a markup stream.""" | 27 """Converts the given ElementTree element to a markup stream.""" |
26 tag_name = element.tag | 28 tag_name = element.tag |
27 if tag_name.startswith('{'): | 29 if tag_name.startswith('{'): |
28 tag_name = tag_name[1:] | 30 tag_name = tag_name[1:] |
29 tag_name = QName(tag_name) | 31 tag_name = QName(tag_name) |
69 def transform(self, info, template): | 71 def transform(self, info, template): |
70 """Render the output to an event stream.""" | 72 """Render the output to an event stream.""" |
71 if not isinstance(template, Template): | 73 if not isinstance(template, Template): |
72 template = self.load_template(template) | 74 template = self.load_template(template) |
73 | 75 |
74 data = {'ET': et_to_stream} | 76 data = {'ET': ET, 'HTML': HTML, 'XML': XML} |
75 if self.get_extra_vars: | 77 if self.get_extra_vars: |
76 data.update(self.get_extra_vars()) | 78 data.update(self.get_extra_vars()) |
77 data.update(info) | 79 data.update(info) |
80 ctxt = Context(**data) | |
78 | 81 |
79 return template.generate(**data) | 82 # Some functions for Kid compatibility |
83 def defined(name): | |
84 return ctxt.get(name, Undefined) is not Undefined | |
85 ctxt['defined'] = defined | |
86 def value_of(name, default=None): | |
87 val = ctxt.get(name, Undefined) | |
88 if val is not Undefined: | |
89 return val | |
90 return default | |
91 ctxt['value_of'] = value_of | |
92 | |
93 return template.generate(ctxt) |