From 44495c84bfe839e52c185dd52acb03f6fe7e83c9 Mon Sep 17 00:00:00 2001 From: Florian Schulze Date: Tue, 31 Dec 2024 11:21:20 +0100 Subject: [PATCH 1/2] Calculate package digest on first use. This allows for faster startup times in case no template is used. --- src/chameleon/template.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/chameleon/template.py b/src/chameleon/template.py index 705772d..b5844b7 100644 --- a/src/chameleon/template.py +++ b/src/chameleon/template.py @@ -69,10 +69,17 @@ def get_package_versions() -> list[tuple[str, str]]: return sorted(versions.items()) -pkg_digest = hashlib.sha1(__name__.encode('utf-8')) -for name, version in get_package_versions(): - pkg_digest.update(name.encode('utf-8')) - pkg_digest.update(version.encode('utf-8')) +_pkg_digest = None + + +def get_pkg_digest() -> hashlib._Hash: + global _pkg_digest + if _pkg_digest is None: + _pkg_digest = hashlib.sha1(__name__.encode('utf-8')) + for name, version in get_package_versions(): + _pkg_digest.update(name.encode('utf-8')) + _pkg_digest.update(version.encode('utf-8')) + return _pkg_digest.copy() log = logging.getLogger('chameleon.template') @@ -320,7 +327,7 @@ def _cook( def digest(self, body: str, names: Collection[str]) -> str: class_name = type(self).__name__.encode('utf-8') - sha = pkg_digest.copy() + sha = get_pkg_digest() sha.update(body.encode('utf-8', 'ignore')) sha.update(class_name) digest = sha.hexdigest() From f87613ad2b09d29927d21bcf6df2e8feb1303f02 Mon Sep 17 00:00:00 2001 From: Malthe Borch Date: Tue, 31 Dec 2024 11:11:29 +0000 Subject: [PATCH 2/2] Add change entry See #436. --- CHANGES.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 44eb222..28ea570 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -3,6 +3,8 @@ Changes In next release ... +- Improve startup time when no template is used. + - Fix ``ast`` deprecation warnings up to Python 3.13. (`#430 `_)