From 37629d3207ad58491903d24b2c2b52c9d932b81d Mon Sep 17 00:00:00 2001 From: Marcin Date: Fri, 4 Apr 2025 10:14:01 +0100 Subject: [PATCH 1/5] futureproof for py314 --- psll/build.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/psll/build.py b/psll/build.py index 3dd4162..fd03642 100755 --- a/psll/build.py +++ b/psll/build.py @@ -1,9 +1,30 @@ import operator +import sys from functools import lru_cache, reduce, singledispatch from typing import Union, overload from .ascii_trees import AbstractTree, Pyramid +if sys.version_info >= (3, 14): + # Fix for lru_cache in Python 3.14+ + from functools import wraps + from typing import Any, Callable + + _old_lru_cache = lru_cache + + def wrapped_lru_cache[T: Callable](*lru_args, **lru_kwargs) -> Callable[[T], T]: + def decorator(func: T) -> T: + @wraps(func) + def wrapper(*args: Any, **kwargs: Any) -> Any: + return _old_lru_cache(*lru_args, **lru_kwargs)(func)(*args, **kwargs) + + return wrapper # type: ignore + + return decorator + + lru_cache = wrapped_lru_cache + + # =================================================================================== # # ##### ## ## #### ## ##### From be25415507d750ac13c033a04ea2fe0885e84314 Mon Sep 17 00:00:00 2001 From: Marcin Date: Fri, 4 Apr 2025 10:14:15 +0100 Subject: [PATCH 2/5] link github issue --- psll/build.py | 1 + 1 file changed, 1 insertion(+) diff --git a/psll/build.py b/psll/build.py index fd03642..49b9d67 100755 --- a/psll/build.py +++ b/psll/build.py @@ -7,6 +7,7 @@ if sys.version_info >= (3, 14): # Fix for lru_cache in Python 3.14+ + # See: https://github.com/python/cpython/issues/132064 from functools import wraps from typing import Any, Callable From a0aff290748d43a64da1ce39327554f341e54dc1 Mon Sep 17 00:00:00 2001 From: Marcin Date: Fri, 4 Apr 2025 10:14:22 +0100 Subject: [PATCH 3/5] enable py314 tox --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 5d4a696..715175f 100644 --- a/tox.ini +++ b/tox.ini @@ -2,7 +2,7 @@ min_version = 4.0 env_list = ; py314t - ; py314 # FIXME: BROKEN!! + py314 ; py313t py313 py312 From 33ed8884599e2463f25f57920eabf78aa6617865 Mon Sep 17 00:00:00 2001 From: Marcin Date: Fri, 4 Apr 2025 10:14:26 +0100 Subject: [PATCH 4/5] v bump --- psll/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/psll/__init__.py b/psll/__init__.py index 49d802c..9a038e5 100755 --- a/psll/__init__.py +++ b/psll/__init__.py @@ -2,7 +2,7 @@ Macro-driven metalanguage which compiles to Pyramid Scheme. """ -__version__ = "0.1.8" +__version__ = "0.1.9" class PsllSyntaxError(SyntaxError): From 260118b7c594633cd097ea472b0caa95db889815 Mon Sep 17 00:00:00 2001 From: Marcin Date: Fri, 4 Apr 2025 10:23:53 +0100 Subject: [PATCH 5/5] typing fix --- psll/build.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/psll/build.py b/psll/build.py index 49b9d67..cbff88c 100755 --- a/psll/build.py +++ b/psll/build.py @@ -9,21 +9,23 @@ # Fix for lru_cache in Python 3.14+ # See: https://github.com/python/cpython/issues/132064 from functools import wraps - from typing import Any, Callable + from typing import Any, Callable, TypeVar _old_lru_cache = lru_cache - def wrapped_lru_cache[T: Callable](*lru_args, **lru_kwargs) -> Callable[[T], T]: - def decorator(func: T) -> T: + _T = TypeVar("_T", bound=Callable) + + def wrapped_lru_cache(*lar: Any, **lkw: Any) -> Callable[[_T], _T]: + def decorator(func: _T) -> _T: @wraps(func) - def wrapper(*args: Any, **kwargs: Any) -> Any: - return _old_lru_cache(*lru_args, **lru_kwargs)(func)(*args, **kwargs) + def wrapper(*ar: Any, **kw: Any) -> Any: + return _old_lru_cache(*lar, **lkw)(func)(*ar, **kw) return wrapper # type: ignore return decorator - lru_cache = wrapped_lru_cache + lru_cache = wrapped_lru_cache # type: ignore # ===================================================================================