💄 Pull version from installation metadata (#172)

The version string in the `__init__` module is needed to support
towncrier, but that does mean there are now two locations for the
project version: pyproject.toml and the `__init__.py` file. Use
`importlib.metadata` to pull the version from the installation metadata.
This commit is contained in:
Martijn Pieters
2023-05-17 18:09:52 +01:00
committed by GitHub
parent 70d8fef402
commit fbdaa62e24
4 changed files with 19 additions and 4 deletions

View File

@@ -0,0 +1 @@
Use `importlib.metadata` to include project version string as `fastapi_cache.__version__`.

View File

@@ -1,10 +1,19 @@
from typing import ClassVar, Optional, Type from typing import ClassVar, Optional, Type
# Because this project supports python 3.7 and up, Pyright treats importlib as
# an external library and so needs to be told to ignore the type issues it sees.
try:
# Python 3.8+
from importlib.metadata import version # type: ignore
except ImportError:
# Python 3.7
from importlib_metadata import version # type: ignore
from fastapi_cache.coder import Coder, JsonCoder from fastapi_cache.coder import Coder, JsonCoder
from fastapi_cache.key_builder import default_key_builder from fastapi_cache.key_builder import default_key_builder
from fastapi_cache.types import Backend, KeyBuilder from fastapi_cache.types import Backend, KeyBuilder
__version__ = "0.2.1" __version__ = version("fastapi-cache2") # pyright: ignore[reportUnknownVariableType]
__all__ = [ __all__ = [
"Backend", "Backend",
"Coder", "Coder",
@@ -92,7 +101,11 @@ class FastAPICache:
return cls._enable return cls._enable
@classmethod @classmethod
async def clear(cls, namespace: Optional[str] = None, key: Optional[str] = None) -> int: async def clear(
assert cls._backend and cls._prefix is not None, "You must call init first!" # noqa: S101 cls, namespace: Optional[str] = None, key: Optional[str] = None
) -> int:
assert ( # noqa: S101
cls._backend and cls._prefix is not None
), "You must call init first!"
namespace = cls._prefix + (":" + namespace if namespace else "") namespace = cls._prefix + (":" + namespace if namespace else "")
return await cls._backend.clear(namespace, key) return await cls._backend.clear(namespace, key)

2
poetry.lock generated
View File

@@ -2574,4 +2574,4 @@ redis = ["redis"]
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = "^3.7" python-versions = "^3.7"
content-hash = "c16f63dc3f2e9a5c4c01faed05d4b50c48edf0221e6e371665b0b83598bc7aa9" content-hash = "d96f466d1d43a0c98a946d3a89da93233e8f3c83faa2df3c35c937388dedef39"

View File

@@ -23,6 +23,7 @@ aiomcache = { version = "*", optional = true }
pendulum = "*" pendulum = "*"
aiobotocore = { version = ">=1.4.1,<3.0.0", optional = true } aiobotocore = { version = ">=1.4.1,<3.0.0", optional = true }
typing-extensions = { version = ">=4.1.0" } typing-extensions = { version = ">=4.1.0" }
importlib-metadata = {version = "^6.6.0", python = "<3.8"}
[tool.poetry.group.linting] [tool.poetry.group.linting]
optional = true optional = true