summaryrefslogtreecommitdiff
path: root/src/setuptools_scm
diff options
context:
space:
mode:
Diffstat (limited to 'src/setuptools_scm')
-rw-r--r--src/setuptools_scm/_entrypoints.py9
-rw-r--r--src/setuptools_scm/_integration/setuptools.py105
-rw-r--r--src/setuptools_scm/integration.py104
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]: