diff --git a/activestorage/__init__.py b/activestorage/__init__.py index 612695e4..31f11b7f 100644 --- a/activestorage/__init__.py +++ b/activestorage/__init__.py @@ -1,5 +1,16 @@ from .active import Active +from importlib.metadata import version +from importlib.metadata import PackageNotFoundError -# this is used only by Readthedocs -__version__ = "0.4.0" + +try: + __version__ = version("PyActiveStorage") +except PackageNotFoundError as exc: + msg = ( + "PyActiveStorage package not found, please run `pip install -e .` before " + "importing the package." + ) + raise PackageNotFoundError( + msg, + ) from exc diff --git a/environment.yml b/environment.yml index 61efdd1b..ade4e4b7 100644 --- a/environment.yml +++ b/environment.yml @@ -24,6 +24,7 @@ dependencies: - pytest-cov >=2.10.1 - pytest-html !=2.1.0 - pytest-metadata >=1.5.1 + - pytest-mock - pytest-xdist # docs - autodocsumm diff --git a/pyproject.toml b/pyproject.toml index 16c25947..6bb903c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -57,6 +57,7 @@ test = [ "pytest-cov>=2.10.1", "pytest-html!=2.1.0", "pytest-metadata>=1.5.1", + "pytest-mock", "pytest-xdist", "dask", "moto", diff --git a/tests/test_version.py b/tests/test_version.py new file mode 100644 index 00000000..48f486bf --- /dev/null +++ b/tests/test_version.py @@ -0,0 +1,29 @@ +"""Test that activestorage.__version__ returns a version number.""" + +from __future__ import annotations + +import importlib +import re +from importlib.metadata import PackageNotFoundError +from typing import TYPE_CHECKING + +import pytest + +import activestorage + +if TYPE_CHECKING: + from pytest_mock import MockerFixture + + +def test_version(): + assert re.match(r"^\d+\.\d+\.\d+\S*$", activestorage.__version__) + + +def test_version_package_not_found_fail(mocker: MockerFixture) -> None: + mocker.patch( + "importlib.metadata.version", + side_effect=PackageNotFoundError("PyActiveStorage"), + ) + msg = r"PyActiveStorage package not found" + with pytest.raises(PackageNotFoundError, match=re.escape(msg)): + importlib.reload(activestorage)