From 96297ac947a18dcfcdcf522c1258d7c34acbeef3 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 7 Jun 2024 08:23:48 -0500 Subject: [PATCH] MOTOR-1327 Use Hatch as Build Backend (#286) --- .evergreen/run-tox.sh | 2 +- .github/workflows/test-python.yml | 1 - .readthedocs.yaml | 2 +- MANIFEST.in | 31 ------------------- motor/_version.py | 30 +++++++++++++----- pyproject.toml | 22 +++++++++---- .../{aws-requirements.txt => aws.txt} | 0 .../{docs-requirements.txt => docs.txt} | 0 ...yption-requirements.txt => encryption.txt} | 0 .../{gssapi-requirements.txt => gssapi.txt} | 0 .../{ocsp-requirements.txt => ocsp.txt} | 0 .../{snappy-requirements.txt => snappy.txt} | 0 .../{srv-requirements.txt => srv.txt} | 0 .../{test-requirements.txt => test.txt} | 0 .../{zstd-requirements.txt => zstd.txt} | 0 setup.py | 21 ------------- tox.ini | 14 ++------- 17 files changed, 44 insertions(+), 79 deletions(-) delete mode 100644 MANIFEST.in rename requirements/{aws-requirements.txt => aws.txt} (100%) rename requirements/{docs-requirements.txt => docs.txt} (100%) rename requirements/{encryption-requirements.txt => encryption.txt} (100%) rename requirements/{gssapi-requirements.txt => gssapi.txt} (100%) rename requirements/{ocsp-requirements.txt => ocsp.txt} (100%) rename requirements/{snappy-requirements.txt => snappy.txt} (100%) rename requirements/{srv-requirements.txt => srv.txt} (100%) rename requirements/{test-requirements.txt => test.txt} (100%) rename requirements/{zstd-requirements.txt => zstd.txt} (100%) delete mode 100644 setup.py diff --git a/.evergreen/run-tox.sh b/.evergreen/run-tox.sh index c2f1455d..3ebf206b 100755 --- a/.evergreen/run-tox.sh +++ b/.evergreen/run-tox.sh @@ -63,7 +63,7 @@ createvirtualenv () { fi python -m pip install -q --upgrade pip - python -m pip install -q --upgrade setuptools wheel tox + python -m pip install -q --upgrade tox } diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index 5cceac82..8b9a805f 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -58,7 +58,6 @@ jobs: - name: Run linters run: | tox -m lint-manual - tox -m manifest docs: runs-on: ubuntu-20.04 diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 8f33fff7..7d1d696e 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -15,7 +15,7 @@ python: # Install motor itself. - method: pip path: . - - requirements: requirements/docs-requirements.txt + - requirements: requirements/docs.txt build: os: ubuntu-22.04 diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 90896a74..00000000 --- a/MANIFEST.in +++ /dev/null @@ -1,31 +0,0 @@ -include README.md -include LICENSE -include tox.ini -include sbom.json -include pyproject.toml -include requirements.txt -include doc/Makefile -include doc/examples/tornado_change_stream_templates/index.html -recursive-include doc *.rst -recursive-include doc *.py -recursive-include doc *.png -recursive-include test *.py -recursive-include test *.pem -recursive-include doc *.conf -recursive-include doc *.css -recursive-include doc *.js -recursive-include doc *.txt -recursive-include doc *.bat -recursive-include synchro *.py -recursive-include motor *.pyi -recursive-include motor *.typed -recursive-include motor *.py -recursive-include requirements *.txt - -exclude .readthedocs.yaml -exclude .git-blame-ignore-revs -exclude .pre-commit-config.yaml -exclude release.sh -exclude RELEASE.md -exclude CONTRIBUTING.md -exclude .evergreen/* diff --git a/motor/_version.py b/motor/_version.py index a9d8947a..7e17fa20 100644 --- a/motor/_version.py +++ b/motor/_version.py @@ -13,13 +13,29 @@ # limitations under the License. """Version-related data for motor.""" -version_tuple = (3, 5, 0, ".dev0") +import re +from typing import List, Tuple, Union + +__version__ = "3.5.0.dev0" + + +def get_version_tuple(version: str) -> Tuple[Union[int, str], ...]: + pattern = r"(?P\d+).(?P\d+).(?P\d+)(?P.*)" + match = re.match(pattern, version) + if match: + parts: List[Union[int, str]] = [int(match[part]) for part in ["major", "minor", "patch"]] + if match["rest"]: + parts.append(match["rest"]) + elif re.match(r"\d+.\d+", version): + parts = [int(part) for part in version.split(".")] + else: + raise ValueError("Could not parse version") + return tuple(parts) + + +version_tuple = get_version_tuple(__version__) +version = __version__ def get_version_string() -> str: - if isinstance(version_tuple[-1], str): - return ".".join(map(str, version_tuple[:-1])) + version_tuple[-1] - return ".".join(map(str, version_tuple)) # type:ignore[unreachable] - - -version = get_version_string() + return __version__ diff --git a/pyproject.toml b/pyproject.toml index e851f9d4..8f748339 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [build-system] -requires = ["setuptools>61.0"] -build-backend = "setuptools.build_meta" +requires = ["hatchling>1.24","hatch-requirements-txt>=0.4.1"] +build-backend = "hatchling.build" [project] name = "motor" @@ -48,11 +48,21 @@ Documentation = "https://motor.readthedocs.io" Source = "https://github.com/mongodb/motor" Tracker = "https://jira.mongodb.org/projects/MOTOR/issues" -[tool.setuptools.dynamic] -version = {attr = "motor._version.version"} +[tool.hatch.version] +path = "motor/_version.py" -[tool.setuptools.packages.find] -include = ["motor"] +[tool.hatch.metadata.hooks.requirements_txt] +files = ["requirements.txt"] + +[tool.hatch.metadata.hooks.requirements_txt.optional-dependencies] +aws = ["requirements/aws.txt"] +docs = ["requirements/docs.txt"] +encryption = ["requirements/encryption.txt"] +gssapi = ["requirements/gssapi.txt"] +ocsp = ["requirements/ocsp.txt"] +snappy = ["requirements/snappy.txt"] +test = ["requirements/test.txt"] +zstd = ["requirements/zstd.txt"] [tool.mypy] python_version = "3.8" diff --git a/requirements/aws-requirements.txt b/requirements/aws.txt similarity index 100% rename from requirements/aws-requirements.txt rename to requirements/aws.txt diff --git a/requirements/docs-requirements.txt b/requirements/docs.txt similarity index 100% rename from requirements/docs-requirements.txt rename to requirements/docs.txt diff --git a/requirements/encryption-requirements.txt b/requirements/encryption.txt similarity index 100% rename from requirements/encryption-requirements.txt rename to requirements/encryption.txt diff --git a/requirements/gssapi-requirements.txt b/requirements/gssapi.txt similarity index 100% rename from requirements/gssapi-requirements.txt rename to requirements/gssapi.txt diff --git a/requirements/ocsp-requirements.txt b/requirements/ocsp.txt similarity index 100% rename from requirements/ocsp-requirements.txt rename to requirements/ocsp.txt diff --git a/requirements/snappy-requirements.txt b/requirements/snappy.txt similarity index 100% rename from requirements/snappy-requirements.txt rename to requirements/snappy.txt diff --git a/requirements/srv-requirements.txt b/requirements/srv.txt similarity index 100% rename from requirements/srv-requirements.txt rename to requirements/srv.txt diff --git a/requirements/test-requirements.txt b/requirements/test.txt similarity index 100% rename from requirements/test-requirements.txt rename to requirements/test.txt diff --git a/requirements/zstd-requirements.txt b/requirements/zstd.txt similarity index 100% rename from requirements/zstd-requirements.txt rename to requirements/zstd.txt diff --git a/setup.py b/setup.py deleted file mode 100644 index 70c66b7e..00000000 --- a/setup.py +++ /dev/null @@ -1,21 +0,0 @@ -from setuptools import setup - - -def parse_reqs_file(fname): - with open(fname) as fid: # noqa:PTH123 - lines = [li.strip() for li in fid.readlines()] - return [li for li in lines if li and not li.startswith("#")] - - -extras_require = dict( # noqa:C408 - aws=parse_reqs_file("requirements/aws-requirements.txt"), - encryption=parse_reqs_file("requirements/encryption-requirements.txt"), - gssapi=parse_reqs_file("requirements/gssapi-requirements.txt"), - ocsp=parse_reqs_file("requirements/ocsp-requirements.txt"), - snappy=parse_reqs_file("requirements/snappy-requirements.txt"), - srv=parse_reqs_file("requirements/srv-requirements.txt"), - test=parse_reqs_file("requirements/test-requirements.txt"), - zstd=parse_reqs_file("requirements/zstd-requirements.txt"), -) - -setup(install_requires=parse_reqs_file("requirements.txt"), extras_require=extras_require) diff --git a/tox.ini b/tox.ini index b8afa784..93947fef 100644 --- a/tox.ini +++ b/tox.ini @@ -43,7 +43,6 @@ labels = # Use labels and -m instead of -e so that tox -m