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
@ -16,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
SOFTWARE.

@ -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,18 +940,15 @@ class ControlTest(TemplateTest):
%endfor
"""
)
assert (
result_lines(
t.render(
y=[
{"test": "one"},
{"foo": "bar"},
{"foo": "bar", "test": "two"},
]
)
assert result_lines(
t.render(
y=[
{"test": "one"},
{"foo": "bar"},
{"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 .