1import os
2import sys
3from typing import TYPE_CHECKING
4
5__all__ = ("cached_property", "under_cached_property")
6
7
8NO_EXTENSIONS = bool(os.environ.get("PROPCACHE_NO_EXTENSIONS")) # type: bool
9if sys.implementation.name != "cpython":
10 NO_EXTENSIONS = True
11
12
13# isort: off
14if TYPE_CHECKING:
15 from ._helpers_py import cached_property as cached_property_py
16 from ._helpers_py import under_cached_property as under_cached_property_py
17
18 cached_property = cached_property_py
19 under_cached_property = under_cached_property_py
20elif not NO_EXTENSIONS: # pragma: no branch
21 try:
22 from ._helpers_c import cached_property as cached_property_c # type: ignore[attr-defined, unused-ignore]
23 from ._helpers_c import under_cached_property as under_cached_property_c # type: ignore[attr-defined, unused-ignore]
24
25 cached_property = cached_property_c
26 under_cached_property = under_cached_property_c
27 except ImportError: # pragma: no cover
28 from ._helpers_py import cached_property as cached_property_py
29 from ._helpers_py import under_cached_property as under_cached_property_py
30
31 cached_property = cached_property_py # type: ignore[assignment, misc]
32 under_cached_property = under_cached_property_py
33else:
34 from ._helpers_py import cached_property as cached_property_py
35 from ._helpers_py import under_cached_property as under_cached_property_py
36
37 cached_property = cached_property_py # type: ignore[assignment, misc]
38 under_cached_property = under_cached_property_py
39# isort: on