diff --git a/poetry.lock b/poetry.lock index 33e8561..8fc8bdd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -25,6 +25,25 @@ files = [ [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "importlib-metadata" +version = "7.1.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, + {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] + [[package]] name = "iniconfig" version = "2.0.0" @@ -132,7 +151,22 @@ files = [ {file = "typing_extensions-4.12.0.tar.gz", hash = "sha256:8cbcdc8606ebcb0d95453ad7dc5065e6237b6aa230a31e81d0f440c30fed5fd8"}, ] +[[package]] +name = "zipp" +version = "3.18.2" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.18.2-py3-none-any.whl", hash = "sha256:dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e"}, + {file = "zipp-3.18.2.tar.gz", hash = "sha256:6278d9ddbcfb1f1089a88fde84481528b07b0e10474e09dcfe53dad4069fa059"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] + [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "a5047dc47cbd5b93bb42e75640ef8d64932f22ad168bf26d58ab1cb1d8b5b75c" +content-hash = "af152b59d34c5faaf33c888dcaea9263b26a7ebf992e5f6b3addb89ec9fb279b" diff --git a/pyproject.toml b/pyproject.toml index 13e1c8e..5b13183 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,7 +42,7 @@ thread = "thread.__main__:app" [tool.poetry.dependencies] python = "^3.9" typing-extensions = "^4.9.0" - +importlib-metadata = { version = ">=4.4", python = "<3.10" } [tool.poetry.group.dev.dependencies] pytest = "^7.4.3" diff --git a/ruff.toml b/ruff.toml index 6a79578..3367e1b 100644 --- a/ruff.toml +++ b/ruff.toml @@ -51,5 +51,6 @@ docstring-quotes = "double" # Ignore `E402` (import violations) in all `__init__.py` files, and in select subdirectories. [lint.per-file-ignores] "__init__.py" = ["E402", "F401"] +"__version__.py" = ["F401"] "**/__init__.py" = ["E402", "F401"] "**/{tests,docs,tools}/*" = ["E402"] diff --git a/src/thread/__init__.py b/src/thread/__init__.py index fefb683..9d4f14f 100644 --- a/src/thread/__init__.py +++ b/src/thread/__init__.py @@ -17,25 +17,20 @@ ``` """ +from .version import __version__ -__version__ = '2.0.1' - - -# Export Core -from .thread import Thread, ConcurrentProcessing - - -from . import _types as types, exceptions - +from . import _types as types +from . import exceptions # Export decorators -from .decorators import threaded, processor +from .decorators import processor, threaded +# Export Core +from .thread import ConcurrentProcessing, Thread # Configuration from .utils import Settings - # Wildcard Export __all__ = [ 'Thread', diff --git a/src/thread/__version__.py b/src/thread/__version__.py new file mode 100644 index 0000000..58f3ace --- /dev/null +++ b/src/thread/__version__.py @@ -0,0 +1 @@ +from .version import __version__ diff --git a/src/thread/utils/meta.py b/src/thread/utils/meta.py new file mode 100644 index 0000000..b97b851 --- /dev/null +++ b/src/thread/utils/meta.py @@ -0,0 +1,9 @@ +import sys + +# compatibility for python <3.10 +if sys.version_info < (3, 10): + import importlib_metadata as metadata +else: + from importlib import metadata + +__all__ = ['metadata'] diff --git a/src/thread/version.py b/src/thread/version.py new file mode 100644 index 0000000..c902f7a --- /dev/null +++ b/src/thread/version.py @@ -0,0 +1,4 @@ +from .utils.meta import metadata + +__version__ = metadata.version('thread') +__all__ = ['__version__'] diff --git a/tests/library/test_version.py b/tests/library/test_version.py new file mode 100644 index 0000000..fa2b34f --- /dev/null +++ b/tests/library/test_version.py @@ -0,0 +1,12 @@ +import re +import thread + + +def test_versionIsString(): + assert isinstance(thread.__version__, str), 'thread.__version__ is not a string' + + +def test_versionIsSemVer(): + assert re.match( + r'^\d+\.\d+\..+$', thread.__version__ + ), 'thread.__version__ is not a semver'