diff options
author | Matti Picus <matti.picus@gmail.com> | 2020-01-23 14:28:59 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-23 14:28:59 +1100 |
commit | 388e8197e15403345950edc23ae5fc7a3cb0f644 (patch) | |
tree | b2531ff0067ad6b60227fb7ebcec4421bffe28e6 /tools | |
parent | 54f0f6e9aeff673551ccfa272fa82a27edb89552 (diff) | |
parent | 6737f241454688f6ea59a883f6c6e3fe8eff8e8b (diff) | |
download | numpy-388e8197e15403345950edc23ae5fc7a3cb0f644.tar.gz |
Merge pull request #15379 from sethtroisi/misc_cleanups3
MAINT: Python2 Cleanups
Diffstat (limited to 'tools')
-rw-r--r-- | tools/npy_tempita/__init__.py | 192 |
1 files changed, 48 insertions, 144 deletions
diff --git a/tools/npy_tempita/__init__.py b/tools/npy_tempita/__init__.py index ec4b0d5e7..50a995104 100644 --- a/tools/npy_tempita/__init__.py +++ b/tools/npy_tempita/__init__.py @@ -46,7 +46,7 @@ import os import tokenize from ._looper import looper from .compat3 import ( - PY3, bytes, basestring_, next, is_unicode, coerce_text, iteritems) + bytes, basestring_, next, is_unicode, coerce_text, iteritems) __all__ = ['TemplateError', 'Template', 'sub', 'HTMLTemplate', @@ -155,7 +155,7 @@ class Template: c = f.read() if encoding: c = c.decode(encoding) - elif PY3: + else: c = c.decode('latin-1') return cls(content=c, name=filename, namespace=namespace, default_inherit=default_inherit, get_template=get_template) @@ -318,10 +318,7 @@ class Template: else: arg0 = coerce_text(e_value) e_value.args = (self._add_line_info(arg0, pos),) - if PY3: - raise e_value - else: - exec('raise e_type, e_value, e_traceback') + raise e_value def _exec(self, code, ns, pos): # __traceback_hide__ = True @@ -333,10 +330,7 @@ class Template: e_value.args = (self._add_line_info(e_value.args[0], pos),) else: e_value.args = (self._add_line_info(None, pos),) - if PY3: - raise e_value - else: - exec('raise e_type, e_value, e_traceback') + raise e_value def _repr(self, value, pos): # __traceback_hide__ = True @@ -355,10 +349,7 @@ class Template: except: e_type, e_value, e_traceback = sys.exc_info() e_value.args = (self._add_line_info(e_value.args[0], pos),) - if PY3: - raise e_value - else: - exec('raise e_type, e_value, e_traceback') + raise e_value else: if self._unicode and isinstance(value, bytes): if not self.default_encoding: @@ -628,7 +619,7 @@ class _Empty: return 'Empty' def __unicode__(self): - return '' if PY3 else u'' + return '' def __iter__(self): return iter(()) @@ -645,6 +636,27 @@ del _Empty def lex(s, name=None, trim_whitespace=True, line_offset=0, delimiters=None): + """ + Lex a string into chunks: + + >>> lex('hey') + ['hey'] + >>> lex('hey {{you}}') + ['hey ', ('you', (1, 7))] + >>> lex('hey {{') + Traceback (most recent call last): + ... + tempita.TemplateError: No }} to finish last expression at line 1 column 7 + >>> lex('hey }}') + Traceback (most recent call last): + ... + tempita.TemplateError: }} outside expression at line 1 column 7 + >>> lex('hey {{ {{') + Traceback (most recent call last): + ... + tempita.TemplateError: {{ inside expression at line 1 column 10 + """ + if delimiters is None: delimiters = (Template.default_namespace['start_braces'], Template.default_namespace['end_braces']) @@ -685,48 +697,6 @@ def lex(s, name=None, trim_whitespace=True, line_offset=0, delimiters=None): chunks = trim_lex(chunks) return chunks -lex.__doc__ = """ -Lex a string into chunks: - - >>> lex('hey') - ['hey'] - >>> lex('hey {{you}}') - ['hey ', ('you', (1, 7))] - >>> lex('hey {{') - Traceback (most recent call last): - ... - tempita.TemplateError: No }} to finish last expression at line 1 column 7 - >>> lex('hey }}') - Traceback (most recent call last): - ... - tempita.TemplateError: }} outside expression at line 1 column 7 - >>> lex('hey {{ {{') - Traceback (most recent call last): - ... - tempita.TemplateError: {{ inside expression at line 1 column 10 - -""" if PY3 else """ -Lex a string into chunks: - - >>> lex('hey') - ['hey'] - >>> lex('hey {{you}}') - ['hey ', ('you', (1, 7))] - >>> lex('hey {{') - Traceback (most recent call last): - ... - TemplateError: No }} to finish last expression at line 1 column 7 - >>> lex('hey }}') - Traceback (most recent call last): - ... - TemplateError: }} outside expression at line 1 column 7 - >>> lex('hey {{ {{') - Traceback (most recent call last): - ... - TemplateError: {{ inside expression at line 1 column 10 - -""" - statement_re = re.compile(r'^(?:if |elif |for |def |inherit |default |py:)') single_statements = ['else', 'endif', 'endfor', 'enddef', 'continue', 'break'] trail_whitespace_re = re.compile(r'\n\r?[\t ]*$') @@ -734,6 +704,16 @@ lead_whitespace_re = re.compile(r'^[\t ]*\n') def trim_lex(tokens): + r""" + Takes a lexed set of tokens, and removes whitespace when there is + a directive on a line by itself: + + >>> tokens = lex('{{if x}}\nx\n{{endif}}\ny', trim_whitespace=False) + >>> tokens + [('if x', (1, 3)), '\nx\n', ('endif', (3, 3)), '\ny'] + >>> trim_lex(tokens) + [('if x', (1, 3)), 'x\n', ('endif', (3, 3)), 'y'] + """ last_trim = None for i in range(len(tokens)): current = tokens[i] @@ -781,26 +761,6 @@ def trim_lex(tokens): tokens[i + 1] = next_chunk return tokens -trim_lex.__doc__ = r""" - Takes a lexed set of tokens, and removes whitespace when there is - a directive on a line by itself: - - >>> tokens = lex('{{if x}}\nx\n{{endif}}\ny', trim_whitespace=False) - >>> tokens - [('if x', (1, 3)), '\nx\n', ('endif', (3, 3)), '\ny'] - >>> trim_lex(tokens) - [('if x', (1, 3)), 'x\n', ('endif', (3, 3)), 'y'] - """ if PY3 else r""" - Takes a lexed set of tokens, and removes whitespace when there is - a directive on a line by itself: - - >>> tokens = lex('{{if x}}\nx\n{{endif}}\ny', trim_whitespace=False) - >>> tokens - [('if x', (1, 3)), '\nx\n', ('endif', (3, 3)), '\ny'] - >>> trim_lex(tokens) - [('if x', (1, 3)), 'x\n', ('endif', (3, 3)), 'y'] - """ - def find_position(string, index, last_index, last_pos): """ @@ -815,18 +775,7 @@ def find_position(string, index, last_index, last_pos): def parse(s, name=None, line_offset=0, delimiters=None): - - if delimiters is None: - delimiters = (Template.default_namespace['start_braces'], - Template.default_namespace['end_braces']) - tokens = lex(s, name=name, line_offset=line_offset, delimiters=delimiters) - result = [] - while tokens: - next_chunk, tokens = parse_expr(tokens, name) - result.append(next_chunk) - return result - -parse.__doc__ = r""" + r""" Parses a string into a kind of AST >>> parse('{{x}}') @@ -881,63 +830,18 @@ parse.__doc__ = r""" ... tempita.TemplateError: Multi-line py blocks must start with a newline at line 1 column 3 - """ if PY3 else r""" - Parses a string into a kind of AST - - >>> parse('{{x}}') - [('expr', (1, 3), 'x')] - >>> parse('foo') - ['foo'] - >>> parse('{{if x}}test{{endif}}') - [('cond', (1, 3), ('if', (1, 3), 'x', ['test']))] - >>> parse( - ... 'series->{{for x in y}}x={{x}}{{endfor}}' - ... ) #doctest: +NORMALIZE_WHITESPACE - ['series->', - ('for', (1, 11), ('x',), 'y', ['x=', ('expr', (1, 27), 'x')])] - >>> parse('{{for x, y in z:}}{{continue}}{{endfor}}') - [('for', (1, 3), ('x', 'y'), 'z', [('continue', (1, 21))])] - >>> parse('{{py:x=1}}') - [('py', (1, 3), 'x=1')] - >>> parse( - ... '{{if x}}a{{elif y}}b{{else}}c{{endif}}' - ... ) #doctest: +NORMALIZE_WHITESPACE - [('cond', (1, 3), ('if', (1, 3), 'x', ['a']), - ('elif', (1, 12), 'y', ['b']), ('else', (1, 23), None, ['c']))] - - Some exceptions:: - - >>> parse('{{continue}}') - Traceback (most recent call last): - ... - TemplateError: continue outside of for loop at line 1 column 3 - >>> parse('{{if x}}foo') - Traceback (most recent call last): - ... - TemplateError: No {{endif}} at line 1 column 3 - >>> parse('{{else}}') - Traceback (most recent call last): - ... - TemplateError: else outside of an if block at line 1 column 3 - >>> parse('{{if x}}{{for x in y}}{{endif}}{{endfor}}') - Traceback (most recent call last): - ... - TemplateError: Unexpected endif at line 1 column 25 - >>> parse('{{if}}{{endif}}') - Traceback (most recent call last): - ... - TemplateError: if with no expression at line 1 column 3 - >>> parse('{{for x y}}{{endfor}}') - Traceback (most recent call last): - ... - TemplateError: Bad for (no "in") in 'x y' at line 1 column 3 - >>> parse('{{py:x=1\ny=2}}') #doctest: +NORMALIZE_WHITESPACE - Traceback (most recent call last): - ... - TemplateError: Multi-line py blocks must start - with a newline at line 1 column 3 """ + if delimiters is None: + delimiters = (Template.default_namespace['start_braces'], + Template.default_namespace['end_braces']) + tokens = lex(s, name=name, line_offset=line_offset, delimiters=delimiters) + result = [] + while tokens: + next_chunk, tokens = parse_expr(tokens, name) + result.append(next_chunk) + return result + def parse_expr(tokens, name, context=()): if isinstance(tokens[0], basestring_): |