0

mako: update version to 1.2.1 from 1.2.0

This is to import https://github.com/sqlalchemy/mako/pull/361.

This update shows 14% improvement in walltime and uses only 80% of cpu
time compared to current HEAD.

```
$ hyperfine --parameter-list branch origin/main,mako_optimize --setup 'git checkout {branch}' 'python3 ../../third_party/blink/renderer/bindings/scripts/generate_bindings.py --web_idl_database gen/third_party/blink/renderer/bindings/web_idl_database.pickle --root_src_dir ../../ --root_gen_dir gen --output_reldir core=third_party/blink/renderer/bindings/core/v8/ --output_reldir modules=third_party/blink/renderer/bindings/modules/v8/ enumeration callback_function callback_interface dictionary interface namespace observable_array typedef union'
Benchmark 1: python3 ../../third_party/blink/renderer/bindings/scripts/generate_bindings.py --web_idl_database gen/third_party/blink/renderer/bindings/web_idl_database.pickle --root_src_dir ../../ --root_gen_dir gen --output_reldir core=third_party/blink/renderer/bindings/core/v8/ --output_reldir modules=third_party/blink/renderer/bindings/modules/v8/ enumeration callback_function callback_interface dictionary interface namespace observable_array typedef union
  Time (mean ± σ):     33.499 s ±  0.289 s    [User: 930.572 s, System: 20.354 s]
  Range (min … max):   32.971 s … 33.915 s    10 runs

Benchmark 2: python3 ../../third_party/blink/renderer/bindings/scripts/generate_bindings.py --web_idl_database gen/third_party/blink/renderer/bindings/web_idl_database.pickle --root_src_dir ../../ --root_gen_dir gen --output_reldir core=third_party/blink/renderer/bindings/core/v8/ --output_reldir modules=third_party/blink/renderer/bindings/modules/v8/ enumeration callback_function callback_interface dictionary interface namespace observable_array typedef union
  Time (mean ± σ):     29.261 s ±  0.298 s    [User: 737.851 s, System: 20.448 s]
  Range (min … max):   28.737 s … 29.835 s    10 runs

Summary
  'python3 ../../third_party/blink/renderer/bindings/scripts/generate_bindings.py --web_idl_database gen/third_party/blink/renderer/bindings/web_idl_database.pickle --root_src_dir ../../ --root_gen_dir gen --output_reldir core=third_party/blink/renderer/bindings/core/v8/ --output_reldir modules=third_party/blink/renderer/bindings/modules/v8/ enumeration callback_function callback_interface dictionary interface namespace observable_array typedef union' ran
    1.14 ± 0.02 times faster than 'python3 ../../third_party/blink/renderer/bindings/scripts/generate_bindings.py --web_idl_database gen/third_party/blink/renderer/bindings/web_idl_database.pickle --root_src_dir ../../ --root_gen_dir gen --output_reldir core=third_party/blink/renderer/bindings/core/v8/ --output_reldir modules=third_party/blink/renderer/bindings/modules/v8/ enumeration callback_function callback_interface dictionary interface namespace observable_array typedef union'
```


Bug: 1214033
Change-Id: I54eab0e27872d40256d3ecb04c47c876652b5596
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3685551
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Takuto Ikuta <tikuta@chromium.org>
Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1019918}
This commit is contained in:
Takuto Ikuta
2022-07-01 01:58:29 +00:00
committed by Chromium LUCI CQ
parent d0a8c00a16
commit c4edcb406f
33 changed files with 102 additions and 77 deletions

@@ -1,8 +1,8 @@
Name: Mako Templates for Python
Short Name: python-mako
URL: https://www.makotemplates.org
Version: 1.2.0
Date: March 11, 2022
Version: 1.2.1
Date: July 1, 2022
License: MIT
License File: NOT_SHIPPED
Security Critical: no
@@ -10,11 +10,11 @@ Security Critical: no
Description:
Template engine in Python, used for code generation in Blink.
Source: https://files.pythonhosted.org/packages/50/ec/1d687348f0954bda388bfd1330c158ba8d7dea4044fc160e74e080babdb9/Mako-1.2.0.tar.gz
SHA-256: 9a7c7e922b87db3686210cf49d5d767033a41d4010b284e747682c92bddd8b39
Source: https://files.pythonhosted.org/packages/ad/dd/34201dae727bb183ca14fd8417e61f936fa068d6f503991f09ee3cac6697/Mako-1.2.1.tar.gz
SHA-256: f054a5ff4743492f1aa9ecc47172cb33b42b9d993cffcc146c9de17e717b0307
Local Modifications:
* add DIR_METADATA, OWNERS, README.chromium, and .gitattributes files in this directory.
* run following commands to pass PRESUBMIT.
$ rm -rf mako/doc/ mako/example/ mako/Mako.egg-info mako/PKG-INFO
$ rm -rf mako/doc/ mako/examples/ mako/Mako.egg-info mako/PKG-INFO
$ chmod -x mako/mako/cmd.py

@@ -1,4 +1,4 @@
Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>.
Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in

@@ -1,8 +1,8 @@
# mako/__init__.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
__version__ = "1.2.0"
__version__ = "1.2.1"

@@ -1,5 +1,5 @@
# mako/_ast_util.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# mako/ast.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# mako/cache.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# mako/cmd.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# mako/codegen.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# mako/compat.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# mako/exceptions.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# ext/autohandler.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# ext/babelplugin.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# ext/beaker_cache.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# ext/extract.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# ext/linguaplugin.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# ext/preprocessors.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# ext/pygmentplugin.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# ext/turbogears.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# mako/filters.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# mako/lexer.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
@@ -74,12 +74,11 @@ class Lexer:
(start, end) = match.span()
self.match_position = end + 1 if end == start else end
self.matched_lineno = self.lineno
lines = re.findall(r"\n", self.text[mp : self.match_position])
cp = mp - 1
while cp >= 0 and cp < self.textlength and self.text[cp] != "\n":
cp -= 1
if cp >= 0 and cp < self.textlength:
cp = self.text[: cp + 1].rfind("\n")
self.matched_charpos = mp - cp
self.lineno += len(lines)
self.lineno += self.text[mp : self.match_position].count("\n")
return match
def parse_until_text(self, watch_nesting, *text):

@@ -1,5 +1,5 @@
# mako/lookup.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# mako/parsetree.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# mako/pygen.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
@@ -43,6 +43,15 @@ class PythonPrinter:
# source lines
self.source_map = {}
self._re_space_comment = re.compile(r"^\s*#")
self._re_space = re.compile(r"^\s*$")
self._re_indent = re.compile(r":[ \t]*(?:#.*)?$")
self._re_compound = re.compile(r"^\s*(if|try|elif|while|for|with)")
self._re_indent_keyword = re.compile(
r"^\s*(def|class|else|elif|except|finally)"
)
self._re_unindentor = re.compile(r"^\s*(else|elif|except|finally).*\:")
def _update_lineno(self, num):
self.lineno += num
@@ -86,8 +95,8 @@ class PythonPrinter:
if (
line is None
or re.match(r"^\s*#", line)
or re.match(r"^\s*$", line)
or self._re_space_comment.match(line)
or self._re_space.match(line)
):
hastext = False
else:
@@ -121,12 +130,12 @@ class PythonPrinter:
# note that a line can both decrase (before printing) and
# then increase (after printing) the indentation level.
if re.search(r":[ \t]*(?:#.*)?$", line):
if self._re_indent.search(line):
# increment indentation count, and also
# keep track of what the keyword was that indented us,
# if it is a python compound statement keyword
# where we might have to look for an "unindent" keyword
match = re.match(r"^\s*(if|try|elif|while|for|with)", line)
match = self._re_compound.match(line)
if match:
# its a "compound" keyword, so we will check for "unindentors"
indentor = match.group(1)
@@ -137,9 +146,7 @@ class PythonPrinter:
# its not a "compound" keyword. but lets also
# test for valid Python keywords that might be indenting us,
# else assume its a non-indenting line
m2 = re.match(
r"^\s*(def|class|else|elif|except|finally)", line
)
m2 = self._re_indent_keyword.match(line)
if m2:
self.indent += 1
self.indent_detail.append(indentor)
@@ -167,7 +174,7 @@ class PythonPrinter:
# if the current line doesnt have one of the "unindentor" keywords,
# return False
match = re.match(r"^\s*(else|elif|except|finally).*\:", line)
match = self._re_unindentor.match(line)
# if True, whitespace matches up, we have a compound indentor,
# and this line has an unindentor, this
# is probably good enough
@@ -193,6 +200,9 @@ class PythonPrinter:
stripspace is a string of space that will be truncated from the
start of the line before indenting."""
if stripspace == "":
# Fast path optimization.
return self.indentstring * self.indent + line
return re.sub(
r"^%s" % stripspace, self.indentstring * self.indent, line

@@ -1,5 +1,5 @@
# mako/pyparser.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -1,5 +1,5 @@
# mako/template.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -80,6 +80,16 @@ class TemplateTest:
output = filters(output)
eq_(output, expected)
def indicates_unbound_local_error(self, rendered_output, unbound_var):
var = f"&#39;{unbound_var}&#39;"
error_msgs = (
# < 3.11
f"local variable {var} referenced before assignment",
# >= 3.11
f"cannot access local variable {var} where it is not associated",
)
return any((msg in rendered_output) for msg in error_msgs)
class PlainCacheImpl(CacheImpl):
"""Simple memory cache impl so that tests which

@@ -1,5 +1,5 @@
# mako/util.py
# Copyright 2006-2021 the Mako authors and contributors <see AUTHORS file>
# Copyright 2006-2022 the Mako authors and contributors <see AUTHORS file>
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

@@ -8,7 +8,7 @@ url = https://www.makotemplates.org/
author = Mike Bayer
author_email = mike@zzzcomputing.com
license = MIT
license_file = LICENSE
license_files = LICENSE
classifiers =
Development Status :: 5 - Production/Stable
License :: OSI Approved :: MIT License
@@ -69,9 +69,12 @@ tag_build =
tag_date = 0
[tool:pytest]
addopts = --tb native -v -r fxX -W error
addopts = --tb native -v -r fxX -p warnings
python_files = test/*test_*.py
python_classes = *Test
filterwarnings =
error::DeprecationWarning:test
error::DeprecationWarning:mako
[upload]
sign = 1

@@ -1,26 +1,35 @@
import io
import os
from mako.ext.babelplugin import extract
import pytest
from mako.testing.assertions import eq_
from mako.testing.config import config
from mako.testing.exclusions import requires_babel
from mako.testing.fixtures import TemplateTest
class UsesExtract:
@pytest.fixture(scope="class")
def extract(self):
from mako.ext.babelplugin import extract
return extract
@requires_babel
class PluginExtractTest:
def test_parse_python_expression(self):
class PluginExtractTest(UsesExtract):
def test_parse_python_expression(self, extract):
input_ = io.BytesIO(b'<p>${_("Message")}</p>')
messages = list(extract(input_, ["_"], [], {}))
eq_(messages, [(1, "_", ("Message"), [])])
def test_python_gettext_call(self):
def test_python_gettext_call(self, extract):
input_ = io.BytesIO(b'<p>${_("Message")}</p>')
messages = list(extract(input_, ["_"], [], {}))
eq_(messages, [(1, "_", ("Message"), [])])
def test_translator_comment(self):
def test_translator_comment(self, extract):
input_ = io.BytesIO(
b"""
<p>
@@ -43,8 +52,8 @@ class PluginExtractTest:
@requires_babel
class MakoExtractTest(TemplateTest):
def test_extract(self):
class MakoExtractTest(UsesExtract, TemplateTest):
def test_extract(self, extract):
with open(
os.path.join(config.template_base, "gettext.mako")
) as mako_tmpl:
@@ -83,7 +92,7 @@ class MakoExtractTest(TemplateTest):
]
eq_(expected, messages)
def test_extract_utf8(self):
def test_extract_utf8(self, extract):
with open(
os.path.join(config.template_base, "gettext_utf8.mako"), "rb"
) as mako_tmpl:
@@ -92,7 +101,7 @@ class MakoExtractTest(TemplateTest):
)
assert message == (1, "_", "K\xf6ln", [])
def test_extract_cp1251(self):
def test_extract_cp1251(self, extract):
with open(
os.path.join(config.template_base, "gettext_cp1251.mako"), "rb"
) as mako_tmpl:

@@ -2,7 +2,6 @@ import os
import pytest
from mako.ext.linguaplugin import LinguaMakoExtractor
from mako.testing.assertions import eq_
from mako.testing.config import config
from mako.testing.exclusions import requires_lingua
@@ -19,11 +18,14 @@ class MockOptions:
class MakoExtractTest(TemplateTest):
@pytest.fixture(autouse=True)
def register_lingua_extractors(self):
from lingua.extractors import register_extractors
register_extractors()
def test_extract(self):
from mako.ext.linguaplugin import LinguaMakoExtractor
plugin = LinguaMakoExtractor({"comment-tags": "TRANSLATOR"})
messages = list(
plugin(

@@ -173,7 +173,7 @@ ${foobar}
)
assert (
'<div class="sourceline"><table class="syntax-highlightedtable">'
'<table class="syntax-highlightedtable">'
in l.get_template("foo.html").render_unicode()
)
@@ -274,10 +274,8 @@ ${foobar}
html_error = exceptions.html_error_template().render_unicode(
error=v, traceback=None
)
assert (
"local variable &#39;y&#39; referenced before assignment"
in html_error
)
assert self.indicates_unbound_local_error(html_error, "y")
def test_tback_trace_from_py_file(self):
t = self._file_template("runtimeerr.html")
@@ -287,10 +285,7 @@ ${foobar}
except:
html_error = exceptions.html_error_template().render_unicode()
assert (
"local variable &#39;y&#39; referenced before assignment"
in html_error
)
assert self.indicates_unbound_local_error(html_error, "y")
def test_code_block_line_number(self):
l = TemplateLookup()

@@ -940,8 +940,7 @@ class ControlTest(TemplateTest):
%endfor
"""
)
assert (
result_lines(
assert result_lines(
t.render(
y=[
{"test": "one"},
@@ -949,9 +948,7 @@ class ControlTest(TemplateTest):
{"foo": "bar", "test": "two"},
]
)
)
== ["yes x has test", "no x does not have test", "yes x has test"]
)
) == ["yes x has test", "no x does not have test", "yes x has test"]
def test_blank_control_1(self):
self._do_memory_test(

@@ -30,7 +30,7 @@ deps=
pydocstyle<4.0.0
# used by flake8-rst-docstrings
pygments
black==21.9b0
black==22.3.0
commands =
flake8 ./mako/ ./test/ setup.py --exclude test/templates,test/foo {posargs}
black --check .