OLD | NEW |
1 # -*- coding: utf-8 -*- | 1 # -*- coding: utf-8 -*- |
2 """ | 2 """ |
3 jinja2.meta | 3 jinja2.meta |
4 ~~~~~~~~~~~ | 4 ~~~~~~~~~~~ |
5 | 5 |
6 This module implements various functions that exposes information about | 6 This module implements various functions that exposes information about |
7 templates that might be interesting for various kinds of applications. | 7 templates that might be interesting for various kinds of applications. |
8 | 8 |
9 :copyright: (c) 2010 by the Jinja Team, see AUTHORS for more details. | 9 :copyright: (c) 2010 by the Jinja Team, see AUTHORS for more details. |
10 :license: BSD, see LICENSE for more details. | 10 :license: BSD, see LICENSE for more details. |
11 """ | 11 """ |
12 from jinja2 import nodes | 12 from jinja2 import nodes |
13 from jinja2.compiler import CodeGenerator | 13 from jinja2.compiler import CodeGenerator |
| 14 from jinja2._compat import string_types |
14 | 15 |
15 | 16 |
16 class TrackingCodeGenerator(CodeGenerator): | 17 class TrackingCodeGenerator(CodeGenerator): |
17 """We abuse the code generator for introspection.""" | 18 """We abuse the code generator for introspection.""" |
18 | 19 |
19 def __init__(self, environment): | 20 def __init__(self, environment): |
20 CodeGenerator.__init__(self, environment, '<introspection>', | 21 CodeGenerator.__init__(self, environment, '<introspection>', |
21 '<introspection>') | 22 '<introspection>') |
22 self.undeclared_identifiers = set() | 23 self.undeclared_identifiers = set() |
23 | 24 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 """ | 71 """ |
71 for node in ast.find_all((nodes.Extends, nodes.FromImport, nodes.Import, | 72 for node in ast.find_all((nodes.Extends, nodes.FromImport, nodes.Import, |
72 nodes.Include)): | 73 nodes.Include)): |
73 if not isinstance(node.template, nodes.Const): | 74 if not isinstance(node.template, nodes.Const): |
74 # a tuple with some non consts in there | 75 # a tuple with some non consts in there |
75 if isinstance(node.template, (nodes.Tuple, nodes.List)): | 76 if isinstance(node.template, (nodes.Tuple, nodes.List)): |
76 for template_name in node.template.items: | 77 for template_name in node.template.items: |
77 # something const, only yield the strings and ignore | 78 # something const, only yield the strings and ignore |
78 # non-string consts that really just make no sense | 79 # non-string consts that really just make no sense |
79 if isinstance(template_name, nodes.Const): | 80 if isinstance(template_name, nodes.Const): |
80 if isinstance(template_name.value, basestring): | 81 if isinstance(template_name.value, string_types): |
81 yield template_name.value | 82 yield template_name.value |
82 # something dynamic in there | 83 # something dynamic in there |
83 else: | 84 else: |
84 yield None | 85 yield None |
85 # something dynamic we don't know about here | 86 # something dynamic we don't know about here |
86 else: | 87 else: |
87 yield None | 88 yield None |
88 continue | 89 continue |
89 # constant is a basestring, direct template name | 90 # constant is a basestring, direct template name |
90 if isinstance(node.template.value, basestring): | 91 if isinstance(node.template.value, string_types): |
91 yield node.template.value | 92 yield node.template.value |
92 # a tuple or list (latter *should* not happen) made of consts, | 93 # a tuple or list (latter *should* not happen) made of consts, |
93 # yield the consts that are strings. We could warn here for | 94 # yield the consts that are strings. We could warn here for |
94 # non string values | 95 # non string values |
95 elif isinstance(node, nodes.Include) and \ | 96 elif isinstance(node, nodes.Include) and \ |
96 isinstance(node.template.value, (tuple, list)): | 97 isinstance(node.template.value, (tuple, list)): |
97 for template_name in node.template.value: | 98 for template_name in node.template.value: |
98 if isinstance(template_name, basestring): | 99 if isinstance(template_name, string_types): |
99 yield template_name | 100 yield template_name |
100 # something else we don't care about, we could warn here | 101 # something else we don't care about, we could warn here |
101 else: | 102 else: |
102 yield None | 103 yield None |
OLD | NEW |