diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/setuptools_scm/_entrypoints.py | 9 | ||||
-rw-r--r-- | src/setuptools_scm/_integration/setuptools.py | 105 | ||||
-rw-r--r-- | src/setuptools_scm/integration.py | 104 |
3 files changed, 109 insertions, 109 deletions
diff --git a/src/setuptools_scm/_entrypoints.py b/src/setuptools_scm/_entrypoints.py index 01b48b1..62a18e1 100644 --- a/src/setuptools_scm/_entrypoints.py +++ b/src/setuptools_scm/_entrypoints.py @@ -79,10 +79,9 @@ def _get_ep(group: str, name: str) -> Any | None: return None -def _get_from_object_reference_str(path: str) -> Any | None: - ep: EntrypointProtocol = EntryPoint( - path, path, None - ) # type: ignore [no-untyped-call] +def _get_from_object_reference_str(path: str, group: str) -> Any | None: + # todo: remove for importlib native spelling + ep: EntrypointProtocol = EntryPoint(path, path, group) try: return ep.load() except (AttributeError, ModuleNotFoundError): @@ -100,7 +99,7 @@ def _iter_version_schemes( scheme_value = cast( "_t.VERSION_SCHEMES", _get_ep(entrypoint, scheme_value) - or _get_from_object_reference_str(scheme_value), + or _get_from_object_reference_str(scheme_value, entrypoint), ) if isinstance(scheme_value, (list, tuple)): diff --git a/src/setuptools_scm/_integration/setuptools.py b/src/setuptools_scm/_integration/setuptools.py index 6e04148..94981d7 100644 --- a/src/setuptools_scm/_integration/setuptools.py +++ b/src/setuptools_scm/_integration/setuptools.py @@ -1,6 +1,17 @@ from __future__ import annotations +import logging import os +import warnings +from typing import Any +from typing import Callable + +import setuptools + +from .. import _config +from .._version_cls import _validate_version_cls + +log = logging.getLogger(__name__) def read_dist_name_from_setup_cfg( @@ -13,3 +24,97 @@ def read_dist_name_from_setup_cfg( parser.read([input], encoding="utf-8") dist_name = parser.get("metadata", "name", fallback=None) return dist_name + + +def _warn_on_old_setuptools(_version: str = setuptools.__version__) -> None: + if int(_version.split(".")[0]) < 61: + warnings.warn( + RuntimeWarning( + f""" +ERROR: setuptools=={_version} is used in combination with setuptools_scm>=8.x + +Your build configuration is incomplete and previously worked by accident! +setuptools_scm requires setuptools>=61 + +Suggested workaround if applicable: + - migrating from the deprecated setup_requires mechanism to pep517/518 + and using a pyproject.toml to declare build dependencies + which are reliably pre-installed before running the build tools +""" + ) + ) + + +def _assign_version( + dist: setuptools.Distribution, config: _config.Configuration +) -> None: + from .. import _get_version, _version_missing + + maybe_version = _get_version(config) + + if maybe_version is None: + _version_missing(config) + else: + assert dist.metadata.version is None + dist.metadata.version = maybe_version + + +_warn_on_old_setuptools() + + +def version_keyword( + dist: setuptools.Distribution, + keyword: str, + value: bool | dict[str, Any] | Callable[[], dict[str, Any]], +) -> None: + if not value: + return + elif value is True: + value = {} + elif callable(value): + value = value() + assert ( + "dist_name" not in value + ), "dist_name may not be specified in the setup keyword " + dist_name: str | None = dist.metadata.name + if dist.metadata.version is not None: + warnings.warn(f"version of {dist_name} already set") + return + log.debug( + "version keyword %r", + vars(dist.metadata), + ) + log.debug("dist %s %s", id(dist), id(dist.metadata)) + + if dist_name is None: + dist_name = read_dist_name_from_setup_cfg() + version_cls = value.pop("version_cls", None) + normalize = value.pop("normalize", True) + final_version = _validate_version_cls(version_cls, normalize) + config = _config.Configuration( + dist_name=dist_name, version_cls=final_version, **value + ) + _assign_version(dist, config) + + +def infer_version(dist: setuptools.Distribution) -> None: + log.debug( + "finalize hook %r", + vars(dist.metadata), + ) + log.debug("dist %s %s", id(dist), id(dist.metadata)) + if dist.metadata.version is not None: + return # metadata already added by hook + dist_name = dist.metadata.name + if dist_name is None: + dist_name = read_dist_name_from_setup_cfg() + if not os.path.isfile("pyproject.toml"): + return + if dist_name == "setuptools_scm": + return + try: + config = _config.Configuration.from_file(dist_name=dist_name) + except LookupError as e: + log.exception(e) + else: + _assign_version(dist, config) diff --git a/src/setuptools_scm/integration.py b/src/setuptools_scm/integration.py index 42ea95d..2583f47 100644 --- a/src/setuptools_scm/integration.py +++ b/src/setuptools_scm/integration.py @@ -1,116 +1,12 @@ from __future__ import annotations import logging -import os import textwrap -import warnings from pathlib import Path -from typing import Any -from typing import Callable -from typing import TYPE_CHECKING -import setuptools - -from . import _get_version from . import _types as _t -from . import _version_missing -from . import Configuration -from ._integration.setuptools import ( - read_dist_name_from_setup_cfg as _read_dist_name_from_setup_cfg, -) -from ._version_cls import _validate_version_cls log = logging.getLogger(__name__) -if TYPE_CHECKING: - pass - - -def _warn_on_old_setuptools(_version: str = setuptools.__version__) -> None: - if int(_version.split(".")[0]) < 61: - warnings.warn( - RuntimeWarning( - f""" -ERROR: setuptools=={_version} is used in combination with setuptools_scm>=8.x - -Your build configuration is incomplete and previously worked by accident! -setuptools_scm requires setuptools>=61 - -Suggested workaround if applicable: - - migrating from the deprecated setup_requires mechanism to pep517/518 - and using a pyproject.toml to declare build dependencies - which are reliably pre-installed before running the build tools -""" - ) - ) - - -_warn_on_old_setuptools() - - -def _assign_version(dist: setuptools.Distribution, config: Configuration) -> None: - maybe_version = _get_version(config) - - if maybe_version is None: - _version_missing(config) - else: - assert dist.metadata.version is None - dist.metadata.version = maybe_version - - -def version_keyword( - dist: setuptools.Distribution, - keyword: str, - value: bool | dict[str, Any] | Callable[[], dict[str, Any]], -) -> None: - if not value: - return - elif value is True: - value = {} - elif callable(value): - value = value() - assert ( - "dist_name" not in value - ), "dist_name may not be specified in the setup keyword " - dist_name: str | None = dist.metadata.name - if dist.metadata.version is not None: - warnings.warn(f"version of {dist_name} already set") - return - log.debug( - "version keyword %r", - vars(dist.metadata), - ) - log.debug("dist %s %s", id(dist), id(dist.metadata)) - - if dist_name is None: - dist_name = _read_dist_name_from_setup_cfg() - version_cls = value.pop("version_cls", None) - normalize = value.pop("normalize", True) - final_version = _validate_version_cls(version_cls, normalize) - config = Configuration(dist_name=dist_name, version_cls=final_version, **value) - _assign_version(dist, config) - - -def infer_version(dist: setuptools.Distribution) -> None: - log.debug( - "finalize hook %r", - vars(dist.metadata), - ) - log.debug("dist %s %s", id(dist), id(dist.metadata)) - if dist.metadata.version is not None: - return # metadata already added by hook - dist_name = dist.metadata.name - if dist_name is None: - dist_name = _read_dist_name_from_setup_cfg() - if not os.path.isfile("pyproject.toml"): - return - if dist_name == "setuptools_scm": - return - try: - config = Configuration.from_file(dist_name=dist_name) - except LookupError as e: - log.exception(e) - else: - _assign_version(dist, config) def data_from_mime(path: _t.PathT) -> dict[str, str]: |