diff options
author | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2023-02-24 14:10:20 +0100 |
---|---|---|
committer | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2023-02-24 14:10:20 +0100 |
commit | d04871d280914c17c9cb77670335af80d18d72f0 (patch) | |
tree | e2f971a309d89fe055258febb130ea1479e477f6 | |
parent | 3a114bdc1b636c459482d7ef7ed6697914d9d479 (diff) | |
download | setuptools-scm-d04871d280914c17c9cb77670335af80d18d72f0.tar.gz |
define own build backend
this removes setup.py altogether in turn preventing legacy usage
-rw-r--r-- | .pre-commit-config.yaml | 1 | ||||
-rw-r--r-- | pyproject.toml | 8 | ||||
-rw-r--r-- | scm_hack_build_backend.py | 60 | ||||
-rw-r--r-- | setup.py | 58 | ||||
-rw-r--r-- | testing/check_self_install.py | 8 |
5 files changed, 68 insertions, 67 deletions
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ced36e7..c32c140 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,6 +22,7 @@ repos: rev: 6.0.0 hooks: - id: flake8 + exclude: scm_hack_build_backend.py - repo: https://github.com/asottile/pyupgrade rev: v3.3.1 hooks: diff --git a/pyproject.toml b/pyproject.toml index 93a1e44..7632fdb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,10 +1,13 @@ [build-system] -build-backend = "setuptools.build_meta" +build-backend = "scm_hack_build_backend" requires = [ "packaging>=20", "setuptools>=55", "typing_extensions", ] +backend-path = [ + ".", +] [project] name = "setuptools-scm" @@ -90,5 +93,8 @@ pip-egg-info = "setuptools_scm.hacks:parse_pip_egg_info" +[tool.setuptools.dynamic] +version = {attr = "scm_hack_build_backend.dynamic_version"} + [tool.setuptools.packages.find] where = ["src"] diff --git a/scm_hack_build_backend.py b/scm_hack_build_backend.py new file mode 100644 index 0000000..08c8fae --- /dev/null +++ b/scm_hack_build_backend.py @@ -0,0 +1,60 @@ +""" +this module is a hack only in place to allow for setuptools +to use the attribute for the versions +""" +from __future__ import annotations + +import os +import sys +from pathlib import Path + +root = Path(__file__).parent +sys.path.insert(0, os.fspath(root / "src")) + +from setuptools.build_meta import ( # type: ignore[attr-defined] + get_requires_for_build_wheel, + get_requires_for_build_sdist, + prepare_metadata_for_build_wheel, + build_wheel, + build_sdist, + get_requires_for_build_editable, + prepare_metadata_for_build_editable, + build_editable, +) + + +from setuptools_scm import get_version +from setuptools_scm.hacks import parse_pkginfo +from setuptools_scm import git +from setuptools_scm import hg +from setuptools_scm.version import guess_next_dev_version, get_local_node_and_date +from setuptools_scm import Configuration + +from setuptools_scm.version import ScmVersion + + +dynamic_version: str + + +def parse(root: str, config: Configuration) -> ScmVersion | None: + try: + return parse_pkginfo(root, config) + except OSError: + return git.parse(root, config=config) or hg.parse(root, config=config) + + +def scm_version() -> str: + return get_version( + root=str(root), + parse=parse, + version_scheme=guess_next_dev_version, + local_scheme=get_local_node_and_date, + ) + + +def __getattr__(name: str) -> str: + if name == "dynamic_version": + global dynamic_version + dynamic_version = scm_version() + return dynamic_version + raise AttributeError(name) diff --git a/setup.py b/setup.py deleted file mode 100644 index e8e69bc..0000000 --- a/setup.py +++ /dev/null @@ -1,58 +0,0 @@ -"""\ -important note: - -the setup of setuptools_scm is self-using, -the first execution of `python setup.py egg_info` -will generate partial data -It's critical to run `python setup.py egg_info` -once before running sdist or easy_install on a fresh checkouts - -pip usage is recommended -""" -from __future__ import annotations - -import os -import sys - -import setuptools - - -def scm_version() -> str: - here = os.path.dirname(os.path.abspath(__file__)) - src = os.path.join(here, "src") - - sys.path.insert(0, src) - - from setuptools_scm import get_version - from setuptools_scm.hacks import parse_pkginfo - from setuptools_scm import git - from setuptools_scm import hg - from setuptools_scm.version import guess_next_dev_version, get_local_node_and_date - from setuptools_scm import Configuration - - from setuptools_scm.version import ScmVersion - - def parse(root: str, config: Configuration) -> ScmVersion | None: - try: - return parse_pkginfo(root, config) - except OSError: - return git.parse(root, config=config) or hg.parse(root, config=config) - - return get_version( - root=here, - parse=parse, - version_scheme=guess_next_dev_version, - local_scheme=get_local_node_and_date, - ) - - -if __name__ == "__main__": - setuptools.setup( - version=scm_version(), - extras_require={ - "toml": [ - "setuptools>=42", - ], - "test": ["pytest>=6.2", "virtualenv>20"], - }, - ) diff --git a/testing/check_self_install.py b/testing/check_self_install.py deleted file mode 100644 index 0cfab33..0000000 --- a/testing/check_self_install.py +++ /dev/null @@ -1,8 +0,0 @@ -from __future__ import annotations - -import pkg_resources - -import setuptools_scm - -dist = pkg_resources.get_distribution("setuptools_scm") -assert dist.version == setuptools_scm.get_version(), dist.version |