mirror of https://github.com/celery/kombu.git
Python3.12: fix imports in kombu/utils/objects.py
Consider the following piece of code, very similar to what can be found in kombu/utils/objects.py: ---8<------------------------------------------------------------------ $ cat /tmp/x.py try: from functools import _NOT_FOUND from functools import cached_property as _cached_property except ImportError: from cached_property import threaded_cached_property as _cached_property _NOT_FOUND = object() print("OK!") ---8<------------------------------------------------------------------ This works well in Python3.11: ---8<------------------------------------------------------------------ $ podman run -it --rm -v /tmp:/tmp python:3.11.4 python /tmp/x.py OK! ---8<------------------------------------------------------------------ But fails in Python3.12: ---8<------------------------------------------------------------------ $ podman run -it --rm -v /tmp:/tmp python:3.12.0b2 python /tmp/x.py Traceback (most recent call last): File "/tmp/x.py", line 2, in <module> from functools import _NOT_FOUND ImportError: cannot import name '_NOT_FOUND' from 'functools' (/usr/local/lib/python3.12/functools.py) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/tmp/x.py", line 6, in <module> from cached_property import threaded_cached_property as _cached_property ModuleNotFoundError: No module named 'cached_property' ---8<------------------------------------------------------------------ This is because Python3.12 removed functools._NOT_FOUND (see commit 056dfc71dce15f81887f0bd6da09d6099d71f979), which prevents cached_property from being imported from functools in our code. If the cached_property library is not installed, then the imports fail. We should be using two different try/except blocks, but since functools._NOT_FOUND was defined as "object()" in the standard library anyway, let's just not bother importing it.
This commit is contained in:
parent
b21592bab3
commit
6ef88c3445
|
@ -5,13 +5,12 @@ from __future__ import annotations
|
||||||
__all__ = ('cached_property',)
|
__all__ = ('cached_property',)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from functools import _NOT_FOUND
|
|
||||||
from functools import cached_property as _cached_property
|
from functools import cached_property as _cached_property
|
||||||
except ImportError:
|
except ImportError:
|
||||||
# TODO: Remove this fallback once we drop support for Python < 3.8
|
# TODO: Remove this fallback once we drop support for Python < 3.8
|
||||||
from cached_property import threaded_cached_property as _cached_property
|
from cached_property import threaded_cached_property as _cached_property
|
||||||
|
|
||||||
_NOT_FOUND = object()
|
_NOT_FOUND = object()
|
||||||
|
|
||||||
|
|
||||||
class cached_property(_cached_property):
|
class cached_property(_cached_property):
|
||||||
|
|
Loading…
Reference in New Issue