Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-wheezy.template for 
openSUSE:Factory checked in at 2026-03-24 18:48:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-wheezy.template (Old)
 and      /work/SRC/openSUSE:Factory/.python-wheezy.template.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-wheezy.template"

Tue Mar 24 18:48:04 2026 rev:7 rq:1342147 version:3.2.5

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-wheezy.template/python-wheezy.template.changes
    2025-04-20 20:08:25.158247553 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-wheezy.template.new.8177/python-wheezy.template.changes
  2026-03-24 18:48:23.577286232 +0100
@@ -1,0 +2,18 @@
+Tue Mar 24 05:41:09 UTC 2026 - Steve Kowalik <[email protected]>
+
+- This is not a noarch package, install things to sitearch.
+
+-------------------------------------------------------------------
+Mon Mar 23 22:58:07 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to version 3.2.5:
+  * Increase minimum Python version to 3.10 and add support for
+    Python 3.14.
+  * Modernize build system using pyproject.toml.
+  * Refactor setup.py to improve Cython extension building and
+    handle PEP 420 namespace packages correctly.
+  * Remove explicit namespace package declarations in favor of
+    implicit ones (PEP 420).
+  * Update type hints to use built-in collection types.
+
+-------------------------------------------------------------------

Old:
----
  wheezy.template-3.2.3.tar.gz

New:
----
  wheezy.template-3.2.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-wheezy.template.spec ++++++
--- /var/tmp/diff_new_pack.MSIUJv/_old  2026-03-24 18:48:24.221312340 +0100
+++ /var/tmp/diff_new_pack.MSIUJv/_new  2026-03-24 18:48:24.225312502 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-wheezy.template
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,14 +18,15 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-wheezy.template
-Version:        3.2.3
+Version:        3.2.5
 Release:        0
 Summary:        A lightweight template library
 License:        MIT
 URL:            https://github.com/akornatskyy/wheezy.template
 Source:         
https://files.pythonhosted.org/packages/source/w/wheezy_template/wheezy_template-%{version}.tar.gz#/wheezy.template-%{version}.tar.gz
+BuildRequires:  %{python_module Cython >= 3.0}
 BuildRequires:  %{python_module pip}
-BuildRequires:  %{python_module setuptools}
+BuildRequires:  %{python_module setuptools >= 61.0}
 BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
@@ -35,7 +36,6 @@
 Suggests:       python-pytest
 Suggests:       python-pytest-cov
 Suggests:       python-pytest-pep8
-BuildArch:      noarch
 %python_subpackages
 
 %description
@@ -51,7 +51,8 @@
 %install
 %pyproject_install
 %python_clone -a %{buildroot}%{_bindir}/wheezy.template
-%python_expand %fdupes %{buildroot}%{$python_sitelib}
+%python_expand rm %{buildroot}%{$python_sitearch}/wheezy/template/*.c
+%python_expand %fdupes %{buildroot}%{$python_sitearch}
 
 %post
 %python_install_alternative wheezy.template
@@ -63,8 +64,7 @@
 %doc README.md
 %license LICENSE
 %python_alternative %{_bindir}/wheezy.template
-%dir %{python_sitelib}/wheezy
-%{python_sitelib}/wheezy/template
-%{python_sitelib}/wheezy.template-%{version}*.pth
-%{python_sitelib}/wheezy_template-%{version}.dist-info
+%dir %{python_sitearch}/wheezy
+%{python_sitearch}/wheezy/template
+%{python_sitearch}/wheezy_template-%{version}.dist-info
 

++++++ wheezy.template-3.2.3.tar.gz -> wheezy.template-3.2.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheezy_template-3.2.3/PKG-INFO 
new/wheezy_template-3.2.5/PKG-INFO
--- old/wheezy_template-3.2.3/PKG-INFO  2024-11-10 12:02:55.487447300 +0100
+++ new/wheezy_template-3.2.5/PKG-INFO  2026-02-18 10:05:21.401159300 +0100
@@ -1,24 +1,23 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
 Name: wheezy.template
-Version: 3.2.3
+Version: 3.2.5
 Summary: A lightweight template library
-Home-page: https://github.com/akornatskyy/wheezy.template
-Author: Andriy Kornatskyy
-Author-email: [email protected]
-License: MIT
-Keywords: html markup template preprocessor
-Platform: any
+Author-email: Andriy Kornatskyy <[email protected]>
+License-Expression: MIT
+Project-URL: Homepage, https://github.com/akornatskyy/wheezy.template
+Project-URL: Source, https://github.com/akornatskyy/wheezy.template
+Project-URL: Issues, https://github.com/akornatskyy/wheezy.template/issues
+Keywords: html,markup,template,preprocessor
 Classifier: Environment :: Web Environment
 Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
 Classifier: Natural Language :: English
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Internet :: WWW/HTTP
@@ -26,9 +25,13 @@
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Classifier: Topic :: Software Development :: Widget Sets
 Classifier: Topic :: Text Processing :: Markup :: HTML
-Requires-Python: >=3.9
+Requires-Python: >=3.10
 Description-Content-Type: text/markdown
 License-File: LICENSE
+Provides-Extra: cython
+Requires-Dist: Cython>=3.0; extra == "cython"
+Requires-Dist: setuptools>=61.0; extra == "cython"
+Dynamic: license-file
 
 # wheezy.template
 
@@ -83,7 +86,7 @@
 ## Install
 
 [wheezy.template](https://pypi.org/project/wheezy.template/) requires
-[python](https://www.python.org) version 3.9+. It is independent of
+[python](https://www.python.org) version 3.10+. It is independent of
 operating system. You can install it from
 [pypi](https://pypi.org/project/wheezy.template/) site:
 
@@ -91,5 +94,15 @@
 pip install -U wheezy.template
 ```
 
+To build from source with optional C extensions, install Cython and build
+without PEP 517 isolation so the build can see your environment:
+
+```sh
+pip install Cython setuptools
+pip install -U --no-build-isolation --no-cache-dir wheezy.security[cython]
+```
+
+Note: compiling extensions requires a working C compiler toolchain.
+
 If you run into any issue or have comments, go ahead and add on
 [github](https://github.com/akornatskyy/wheezy.template).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheezy_template-3.2.3/README.md 
new/wheezy_template-3.2.5/README.md
--- old/wheezy_template-3.2.3/README.md 2024-11-10 12:02:45.000000000 +0100
+++ new/wheezy_template-3.2.5/README.md 2026-02-18 10:05:11.000000000 +0100
@@ -51,7 +51,7 @@
 ## Install
 
 [wheezy.template](https://pypi.org/project/wheezy.template/) requires
-[python](https://www.python.org) version 3.9+. It is independent of
+[python](https://www.python.org) version 3.10+. It is independent of
 operating system. You can install it from
 [pypi](https://pypi.org/project/wheezy.template/) site:
 
@@ -59,5 +59,15 @@
 pip install -U wheezy.template
 ```
 
+To build from source with optional C extensions, install Cython and build
+without PEP 517 isolation so the build can see your environment:
+
+```sh
+pip install Cython setuptools
+pip install -U --no-build-isolation --no-cache-dir wheezy.security[cython]
+```
+
+Note: compiling extensions requires a working C compiler toolchain.
+
 If you run into any issue or have comments, go ahead and add on
 [github](https://github.com/akornatskyy/wheezy.template).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheezy_template-3.2.3/pyproject.toml 
new/wheezy_template-3.2.5/pyproject.toml
--- old/wheezy_template-3.2.3/pyproject.toml    1970-01-01 01:00:00.000000000 
+0100
+++ new/wheezy_template-3.2.5/pyproject.toml    2026-02-18 10:05:11.000000000 
+0100
@@ -0,0 +1,61 @@
+[build-system]
+requires = ["setuptools>=61.0", "wheel"]
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "wheezy.template"
+dynamic = ["version"]
+description = "A lightweight template library"
+readme = { file = "README.md", content-type = "text/markdown" }
+requires-python = ">=3.10"
+license = "MIT"
+license-files = ["LICENSE"]
+authors = [{ name = "Andriy Kornatskyy", email = "[email protected]" 
}]
+keywords = ["html", "markup", "template", "preprocessor"]
+classifiers = [
+  "Environment :: Web Environment",
+  "Intended Audience :: Developers",
+  "Natural Language :: English",
+  "Operating System :: OS Independent",
+  "Programming Language :: Python",
+  "Programming Language :: Python :: 3.10",
+  "Programming Language :: Python :: 3.11",
+  "Programming Language :: Python :: 3.12",
+  "Programming Language :: Python :: 3.13",
+  "Programming Language :: Python :: 3.14",
+  "Programming Language :: Python :: Implementation :: CPython",
+  "Programming Language :: Python :: Implementation :: PyPy",
+  "Topic :: Internet :: WWW/HTTP",
+  "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
+  "Topic :: Software Development :: Libraries :: Python Modules",
+  "Topic :: Software Development :: Widget Sets",
+  "Topic :: Text Processing :: Markup :: HTML",
+]
+dependencies = []
+
+[project.optional-dependencies]
+cython = ["Cython>=3.0", "setuptools>=61.0"]
+
+[project.urls]
+Homepage = "https://github.com/akornatskyy/wheezy.template";
+Source = "https://github.com/akornatskyy/wheezy.template";
+Issues = "https://github.com/akornatskyy/wheezy.template/issues";
+
+[project.scripts]
+"wheezy.template" = "wheezy.template.console:main"
+
+[tool.setuptools]
+packages = ["wheezy.template", "wheezy.template.ext"]
+package-dir = { "" = "src" }
+zip-safe = false
+include-package-data = true
+
+[tool.setuptools.package-data]
+"wheezy.template" = ["py.typed"]
+
+[tool.setuptools.dynamic]
+version = { attr = "wheezy.template.__version__" }
+
+[tool.coverage.run]
+source = ["src/wheezy/template"]
+omit = ["*/test_*.py", "*/tests/*"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheezy_template-3.2.3/setup.py 
new/wheezy_template-3.2.5/setup.py
--- old/wheezy_template-3.2.3/setup.py  2024-11-10 12:02:45.000000000 +0100
+++ new/wheezy_template-3.2.5/setup.py  2026-02-18 10:05:11.000000000 +0100
@@ -1,81 +1,60 @@
 #!/usr/bin/env python
 
-import multiprocessing
 import os
-import re
+from glob import glob
 
-from setuptools import setup  # type: ignore[import]
+from setuptools import Extension, setup  # type: ignore[import]
 
-extra = {}
-try:
-    from Cython.Build import cythonize  # type: ignore[import]
-
-    p = os.path.join("src", "wheezy", "template")
-    extra["ext_modules"] = cythonize(
-        [os.path.join(p, "*.py"), os.path.join(p, "ext", "*.py")],
-        exclude=[
-            os.path.join(p, "__init__.py"),
-            os.path.join(p, "ext", "__init__.py"),
-        ],
-        # https://github.com/cython/cython/issues/3262
-        nthreads=0 if multiprocessing.get_start_method() == "spawn" else 2,
+
+def module_name_from_src_path(path: str) -> str:
+    """Derive a fully-qualified module name from a file path under ./src.
+
+    Cython's default path-to-module logic relies on finding __init__.py files.
+    For PEP 420 namespace packages (e.g. "wheezy"), that inference stops too
+    early, which can produce incorrect module names (e.g. "template.*").
+    """
+
+    rel = os.path.relpath(path, "src")
+    rel_no_ext = os.path.splitext(rel)[0]
+    return rel_no_ext.replace(os.sep, ".")
+
+
+def optional_cython_extensions() -> object:
+    try:
+        from Cython.Build import cythonize  # type: ignore[import]
+    except ImportError:
+        return None
+
+    package_root = os.path.join("src", "wheezy", "template")
+
+    sources: list[str] = []
+    sources.extend(glob(os.path.join(package_root, "*.py")))
+    sources.extend(glob(os.path.join(package_root, "ext", "*.py")))
+
+    extensions: list[Extension] = []
+    for src_path in sources:
+        if os.path.basename(src_path) == "__init__.py":
+            continue
+        extensions.append(
+            Extension(module_name_from_src_path(src_path), [src_path])
+        )
+
+    return cythonize(
+        extensions,
+        nthreads=2,
         compiler_directives={"language_level": 3},
         quiet=True,
     )
-except ImportError:
-    pass
 
-README = open("README.md").read()
-VERSION = (
-    re.search(  # type: ignore
-        r'__version__ = "(.+)"',
-        open("src/wheezy/template/__init__.py").read(),
-    )
-    .group(1)
-    .strip()
-)
-
-setup(
-    name="wheezy.template",
-    version=VERSION,
-    python_requires=">=3.9",
-    description="A lightweight template library",
-    long_description=README,
-    long_description_content_type="text/markdown",
-    url="https://github.com/akornatskyy/wheezy.template";,
-    author="Andriy Kornatskyy",
-    author_email="[email protected]",
-    license="MIT",
-    classifiers=[
-        "Environment :: Web Environment",
-        "Intended Audience :: Developers",
-        "License :: OSI Approved :: MIT License",
-        "Natural Language :: English",
-        "Operating System :: OS Independent",
-        "Programming Language :: Python",
-        "Programming Language :: Python :: 3.9",
-        "Programming Language :: Python :: 3.10",
-        "Programming Language :: Python :: 3.11",
-        "Programming Language :: Python :: 3.12",
-        "Programming Language :: Python :: 3.13",
-        "Programming Language :: Python :: Implementation :: CPython",
-        "Programming Language :: Python :: Implementation :: PyPy",
-        "Topic :: Internet :: WWW/HTTP",
-        "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
-        "Topic :: Software Development :: Libraries :: Python Modules",
-        "Topic :: Software Development :: Widget Sets",
-        "Topic :: Text Processing :: Markup :: HTML",
-    ],
-    keywords="html markup template preprocessor",
-    packages=["wheezy", "wheezy.template", "wheezy.template.ext"],
-    package_data={"wheezy.template": ["py.typed"]},
-    package_dir={"": "src"},
-    namespace_packages=["wheezy"],
-    zip_safe=False,
-    install_requires=[],
-    entry_points={
-        "console_scripts": ["wheezy.template=wheezy.template.console:main"]
-    },
-    platforms="any",
-    **extra
-)
+
+def main() -> None:
+    extra = {}
+    ext_modules = optional_cython_extensions()
+    if ext_modules is not None:
+        extra["ext_modules"] = ext_modules
+
+    setup(**extra)
+
+
+if __name__ == "__main__":
+    main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheezy_template-3.2.3/src/wheezy/__init__.py 
new/wheezy_template-3.2.5/src/wheezy/__init__.py
--- old/wheezy_template-3.2.3/src/wheezy/__init__.py    2024-11-10 
12:02:45.000000000 +0100
+++ new/wheezy_template-3.2.5/src/wheezy/__init__.py    1970-01-01 
01:00:00.000000000 +0100
@@ -1,12 +0,0 @@
-import typing
-
-# See
-# http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
-try:
-    __import__("pkg_resources").declare_namespace(__name__)
-except ImportError:
-    from pkgutil import extend_path
-
-    __path__: typing.List[str] = extend_path(  # type: ignore[no-redef]
-        __path__, __name__
-    )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wheezy_template-3.2.3/src/wheezy/template/__init__.py 
new/wheezy_template-3.2.5/src/wheezy/template/__init__.py
--- old/wheezy_template-3.2.3/src/wheezy/template/__init__.py   2024-11-10 
12:02:55.000000000 +0100
+++ new/wheezy_template-3.2.5/src/wheezy/template/__init__.py   2026-02-18 
10:05:19.000000000 +0100
@@ -1,6 +1,3 @@
-"""
-"""
-
 from wheezy.template.engine import Engine
 from wheezy.template.ext.code import CodeExtension
 from wheezy.template.ext.core import CoreExtension
@@ -17,4 +14,4 @@
     "Preprocessor",
 )
 
-__version__ = "3.2.3"
+__version__ = "3.2.5"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheezy_template-3.2.3/src/wheezy/template/builder.py 
new/wheezy_template-3.2.5/src/wheezy/template/builder.py
--- old/wheezy_template-3.2.3/src/wheezy/template/builder.py    2024-11-10 
12:02:45.000000000 +0100
+++ new/wheezy_template-3.2.5/src/wheezy/template/builder.py    2026-02-18 
10:05:11.000000000 +0100
@@ -92,7 +92,7 @@
         self,
         builder_rules: typing.Dict[str, typing.List[BuilderRule]],
         builder_offset: int = 2,
-        **ignore: typing.Any
+        **ignore: typing.Any,
     ) -> None:
         self.rules = builder_rules
         self.lineno = 0 - builder_offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheezy_template-3.2.3/src/wheezy/template/comp.py 
new/wheezy_template-3.2.5/src/wheezy/template/comp.py
--- old/wheezy_template-3.2.3/src/wheezy/template/comp.py       2024-11-10 
12:02:45.000000000 +0100
+++ new/wheezy_template-3.2.5/src/wheezy/template/comp.py       2026-02-18 
10:05:11.000000000 +0100
@@ -1,8 +1,10 @@
 import ast
-import sys
 import typing
 from _thread import allocate_lock  # noqa
 
+Tuple: typing.Any = tuple
+List: typing.Any = list
+
 
 def adjust_source_lineno(source: str, name: str, lineno: int) -> typing.Any:
     node = compile(source, name, "exec", ast.PyCF_ONLY_AST)
@@ -10,13 +12,6 @@
     return node
 
 
-if sys.version_info <= (3, 9, 0):  # pragma: nocover
-    from typing import List, Tuple
-else:  # pragma: nocover
-    Tuple = tuple  # type: ignore
-    List = list  # type: ignore
-
-
 __all__ = (
     "adjust_source_lineno",
     "Tuple",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wheezy_template-3.2.3/src/wheezy/template/ext/code.py 
new/wheezy_template-3.2.5/src/wheezy/template/ext/code.py
--- old/wheezy_template-3.2.3/src/wheezy/template/ext/code.py   2024-11-10 
12:02:45.000000000 +0100
+++ new/wheezy_template-3.2.5/src/wheezy/template/ext/code.py   2026-02-18 
10:05:11.000000000 +0100
@@ -1,7 +1,6 @@
 import re
 import typing
 
-from wheezy.template.comp import Tuple
 from wheezy.template.typing import Builder, LexerRule, ParserRule, Token
 from wheezy.template.utils import find_balanced
 
@@ -55,4 +54,4 @@
 
     parser_rules: typing.Mapping[str, ParserRule] = {"code": parse_code}
 
-    builder_rules: typing.List[Tuple[str, typing.Any]] = [("code", build_code)]
+    builder_rules: typing.List[tuple[str, typing.Any]] = [("code", build_code)]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wheezy_template-3.2.3/src/wheezy/template/ext/core.py 
new/wheezy_template-3.2.5/src/wheezy/template/ext/core.py
--- old/wheezy_template-3.2.3/src/wheezy/template/ext/core.py   2024-11-10 
12:02:45.000000000 +0100
+++ new/wheezy_template-3.2.5/src/wheezy/template/ext/core.py   2026-02-18 
10:05:11.000000000 +0100
@@ -1,7 +1,6 @@
 import re
 import typing
 
-from wheezy.template.comp import Tuple
 from wheezy.template.typing import Builder, LexerRule, ParserConfig, Token
 from wheezy.template.utils import find_all_balanced
 
@@ -84,12 +83,12 @@
     return value.rstrip()[8:-1]
 
 
-def parse_import(value: str) -> Tuple[str, str]:
+def parse_import(value: str) -> tuple[str, str]:
     name, var = value[7:].rsplit(" as ", 1)
     return name, var
 
 
-def parse_from(value: str) -> Tuple[str, str, str]:
+def parse_from(value: str) -> tuple[str, str, str]:
     name, var = value[5:].rsplit(" import ", 1)
     s = var.rsplit(" as ", 1)
     if len(s) == 2:
@@ -101,7 +100,7 @@
 
 def parse_var(
     value: str,
-) -> Tuple[str, typing.Optional[typing.List[str]]]:
+) -> tuple[str, typing.Optional[typing.List[str]]]:
     if "!!" not in value:
         return value, None
     var, var_filter = value.rsplit("!!", 1)
@@ -145,7 +144,7 @@
 
 
 def build_import(
-    builder: Builder, lineno: int, token: str, value: Tuple[str, str]
+    builder: Builder, lineno: int, token: str, value: tuple[str, str]
 ) -> bool:
     assert token == "import "
     name, var = value
@@ -157,7 +156,7 @@
     builder: Builder,
     lineno: int,
     token: str,
-    value: Tuple[str, str, str],
+    value: tuple[str, str, str],
 ) -> bool:
     assert token == "from "
     name, var, alias = value
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wheezy_template-3.2.3/src/wheezy/template/ext/determined.py 
new/wheezy_template-3.2.5/src/wheezy/template/ext/determined.py
--- old/wheezy_template-3.2.3/src/wheezy/template/ext/determined.py     
2024-11-10 12:02:45.000000000 +0100
+++ new/wheezy_template-3.2.5/src/wheezy/template/ext/determined.py     
2026-02-18 10:05:11.000000000 +0100
@@ -1,7 +1,6 @@
 import re
 import typing
 
-from wheezy.template.comp import Tuple
 from wheezy.template.utils import find_balanced
 
 RE_ARGS = re.compile(r'\s*(?P<expr>(([\'"]).*?\3|.+?))\s*\,')
@@ -118,7 +117,7 @@
 
 def parse_params(
     text: str,
-) -> Tuple[typing.List[str], typing.Mapping[str, str]]:
+) -> tuple[typing.List[str], typing.Mapping[str, str]]:
     """Parses function parameters.
 
     >>> parse_params('')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheezy_template-3.2.3/src/wheezy/template/lexer.py 
new/wheezy_template-3.2.5/src/wheezy/template/lexer.py
--- old/wheezy_template-3.2.3/src/wheezy/template/lexer.py      2024-11-10 
12:02:45.000000000 +0100
+++ new/wheezy_template-3.2.5/src/wheezy/template/lexer.py      2026-02-18 
10:05:11.000000000 +0100
@@ -39,7 +39,7 @@
         lexer_rules: typing.List[LexerRule],
         preprocessors: typing.Optional[typing.List[PreProcessorRule]] = None,
         postprocessors: typing.Optional[typing.List[PostProcessorRule]] = None,
-        **ignore: typing.Any
+        **ignore: typing.Any,
     ) -> None:
         """Initializes with ``rules``. Rules must be a list of
         two elements tuple: ``(regex, tokenizer)`` where
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheezy_template-3.2.3/src/wheezy/template/loader.py 
new/wheezy_template-3.2.5/src/wheezy/template/loader.py
--- old/wheezy_template-3.2.3/src/wheezy/template/loader.py     2024-11-10 
12:02:45.000000000 +0100
+++ new/wheezy_template-3.2.5/src/wheezy/template/loader.py     2026-02-18 
10:05:11.000000000 +0100
@@ -4,7 +4,6 @@
 import time
 import typing
 
-from wheezy.template.comp import Tuple
 from wheezy.template.engine import Engine
 from wheezy.template.typing import Loader, SupportsRender
 
@@ -28,7 +27,7 @@
         self.searchpath = searchpath
         self.encoding = encoding
 
-    def list_names(self) -> Tuple[str, ...]:
+    def list_names(self) -> tuple[str, ...]:
         """Return a list of names relative to directories. Ignores any files
         and directories that start with dot.
         """
@@ -84,7 +83,7 @@
     def __init__(self, templates: typing.Mapping[str, str]) -> None:
         self.templates = templates
 
-    def list_names(self) -> Tuple[str, ...]:
+    def list_names(self) -> tuple[str, ...]:
         """List all keys from internal dict."""
         return tuple(sorted(self.templates.keys()))
 
@@ -101,7 +100,7 @@
     def __init__(self, loaders: typing.List[Loader]) -> None:
         self.loaders = loaders
 
-    def list_names(self) -> Tuple[str, ...]:
+    def list_names(self) -> tuple[str, ...]:
         """Returns as list of names from all loaders."""
         names = set()
         for loader in self.loaders:
@@ -128,7 +127,7 @@
         self.engine = engine
         self.ctx = ctx or {}
 
-    def list_names(self) -> Tuple[str, ...]:
+    def list_names(self) -> tuple[str, ...]:
         return self.engine.loader.list_names()
 
     def load(self, name: str) -> str:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheezy_template-3.2.3/src/wheezy/template/parser.py 
new/wheezy_template-3.2.5/src/wheezy/template/parser.py
--- old/wheezy_template-3.2.3/src/wheezy/template/parser.py     2024-11-10 
12:02:45.000000000 +0100
+++ new/wheezy_template-3.2.5/src/wheezy/template/parser.py     2026-02-18 
10:05:11.000000000 +0100
@@ -34,7 +34,7 @@
         parser_configs: typing.Optional[
             typing.List[typing.Callable[[ParserConfig], None]]
         ] = None,
-        **ignore: typing.Any
+        **ignore: typing.Any,
     ) -> None:
         self.end_tokens: typing.List[str] = []
         self.continue_tokens: typing.List[str] = []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheezy_template-3.2.3/src/wheezy/template/typing.py 
new/wheezy_template-3.2.5/src/wheezy/template/typing.py
--- old/wheezy_template-3.2.3/src/wheezy/template/typing.py     2024-11-10 
12:02:45.000000000 +0100
+++ new/wheezy_template-3.2.5/src/wheezy/template/typing.py     2026-02-18 
10:05:11.000000000 +0100
@@ -1,11 +1,10 @@
 import typing
 from abc import abstractmethod
-
-from wheezy.template.comp import List, Tuple
+from typing import TypeAlias
 
 # flake8: noqa: E704
 
-Token = Tuple[int, str, str]
+Token: TypeAlias = tuple[int, str, str]
 
 
 class Builder:
@@ -35,26 +34,26 @@
 
 
 Tokenizer = typing.Callable[[typing.Match[str]], Token]
-LexerRule = Tuple[typing.Pattern[str], Tokenizer]
+LexerRule = tuple[typing.Pattern[str], Tokenizer]
 PreProcessorRule = typing.Callable[[str], str]
-PostProcessorRule = typing.Callable[[List[Token]], str]
+PostProcessorRule = typing.Callable[[list[Token]], str]
 BuilderRule = typing.Callable[
     [
         Builder,
         int,
         str,
-        typing.Union[str, List[str], typing.Iterable[Token], None],
+        typing.Union[str, list[str], typing.Iterable[Token], None],
     ],
     bool,
 ]
-ParserRule = typing.Callable[[str], typing.Union[str, List[str]]]
+ParserRule = typing.Callable[[str], typing.Union[str, list[str]]]
 
 
 class ParserConfig:
-    end_tokens: List[str]
-    continue_tokens: List[str]
-    compound_tokens: List[str]
-    out_tokens: List[str]
+    end_tokens: list[str]
+    continue_tokens: list[str]
+    compound_tokens: list[str]
+    out_tokens: list[str]
 
 
 RenderTemplate = typing.Callable[
@@ -79,7 +78,7 @@
 
 class Loader:
     @abstractmethod
-    def list_names(self) -> Tuple[str, ...]: ...  # pragma: nocover
+    def list_names(self) -> tuple[str, ...]: ...  # pragma: nocover
 
     @abstractmethod
     def load(self, name: str) -> typing.Optional[str]: ...  # pragma: nocover
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wheezy_template-3.2.3/src/wheezy.template.egg-info/PKG-INFO 
new/wheezy_template-3.2.5/src/wheezy.template.egg-info/PKG-INFO
--- old/wheezy_template-3.2.3/src/wheezy.template.egg-info/PKG-INFO     
2024-11-10 12:02:55.000000000 +0100
+++ new/wheezy_template-3.2.5/src/wheezy.template.egg-info/PKG-INFO     
2026-02-18 10:05:21.000000000 +0100
@@ -1,24 +1,23 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
 Name: wheezy.template
-Version: 3.2.3
+Version: 3.2.5
 Summary: A lightweight template library
-Home-page: https://github.com/akornatskyy/wheezy.template
-Author: Andriy Kornatskyy
-Author-email: [email protected]
-License: MIT
-Keywords: html markup template preprocessor
-Platform: any
+Author-email: Andriy Kornatskyy <[email protected]>
+License-Expression: MIT
+Project-URL: Homepage, https://github.com/akornatskyy/wheezy.template
+Project-URL: Source, https://github.com/akornatskyy/wheezy.template
+Project-URL: Issues, https://github.com/akornatskyy/wheezy.template/issues
+Keywords: html,markup,template,preprocessor
 Classifier: Environment :: Web Environment
 Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
 Classifier: Natural Language :: English
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Internet :: WWW/HTTP
@@ -26,9 +25,13 @@
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Classifier: Topic :: Software Development :: Widget Sets
 Classifier: Topic :: Text Processing :: Markup :: HTML
-Requires-Python: >=3.9
+Requires-Python: >=3.10
 Description-Content-Type: text/markdown
 License-File: LICENSE
+Provides-Extra: cython
+Requires-Dist: Cython>=3.0; extra == "cython"
+Requires-Dist: setuptools>=61.0; extra == "cython"
+Dynamic: license-file
 
 # wheezy.template
 
@@ -83,7 +86,7 @@
 ## Install
 
 [wheezy.template](https://pypi.org/project/wheezy.template/) requires
-[python](https://www.python.org) version 3.9+. It is independent of
+[python](https://www.python.org) version 3.10+. It is independent of
 operating system. You can install it from
 [pypi](https://pypi.org/project/wheezy.template/) site:
 
@@ -91,5 +94,15 @@
 pip install -U wheezy.template
 ```
 
+To build from source with optional C extensions, install Cython and build
+without PEP 517 isolation so the build can see your environment:
+
+```sh
+pip install Cython setuptools
+pip install -U --no-build-isolation --no-cache-dir wheezy.security[cython]
+```
+
+Note: compiling extensions requires a working C compiler toolchain.
+
 If you run into any issue or have comments, go ahead and add on
 [github](https://github.com/akornatskyy/wheezy.template).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wheezy_template-3.2.3/src/wheezy.template.egg-info/SOURCES.txt 
new/wheezy_template-3.2.5/src/wheezy.template.egg-info/SOURCES.txt
--- old/wheezy_template-3.2.3/src/wheezy.template.egg-info/SOURCES.txt  
2024-11-10 12:02:55.000000000 +0100
+++ new/wheezy_template-3.2.5/src/wheezy.template.egg-info/SOURCES.txt  
2026-02-18 10:05:21.000000000 +0100
@@ -1,14 +1,14 @@
 LICENSE
 MANIFEST.in
 README.md
+pyproject.toml
 setup.py
-src/wheezy/__init__.py
 src/wheezy.template.egg-info/PKG-INFO
 src/wheezy.template.egg-info/SOURCES.txt
 src/wheezy.template.egg-info/dependency_links.txt
 src/wheezy.template.egg-info/entry_points.txt
-src/wheezy.template.egg-info/namespace_packages.txt
 src/wheezy.template.egg-info/not-zip-safe
+src/wheezy.template.egg-info/requires.txt
 src/wheezy.template.egg-info/top_level.txt
 src/wheezy/template/__init__.py
 src/wheezy/template/builder.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wheezy_template-3.2.3/src/wheezy.template.egg-info/namespace_packages.txt 
new/wheezy_template-3.2.5/src/wheezy.template.egg-info/namespace_packages.txt
--- 
old/wheezy_template-3.2.3/src/wheezy.template.egg-info/namespace_packages.txt   
    2024-11-10 12:02:55.000000000 +0100
+++ 
new/wheezy_template-3.2.5/src/wheezy.template.egg-info/namespace_packages.txt   
    1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-wheezy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wheezy_template-3.2.3/src/wheezy.template.egg-info/requires.txt 
new/wheezy_template-3.2.5/src/wheezy.template.egg-info/requires.txt
--- old/wheezy_template-3.2.3/src/wheezy.template.egg-info/requires.txt 
1970-01-01 01:00:00.000000000 +0100
+++ new/wheezy_template-3.2.5/src/wheezy.template.egg-info/requires.txt 
2026-02-18 10:05:21.000000000 +0100
@@ -0,0 +1,4 @@
+
+[cython]
+Cython>=3.0
+setuptools>=61.0

Reply via email to