diff options
author | Spencer Chang <schang412@gmail.com> | 2023-02-10 04:05:04 -0800 |
---|---|---|
committer | Spencer Chang <schang412@gmail.com> | 2023-02-10 04:05:04 -0800 |
commit | 4d45456c401d4ae575f9525c1a20b52e1479dfd7 (patch) | |
tree | eb119e50d33b7ba5b199b2e3f529cc36c7f5640a | |
parent | 01bc64e54afb0381405bf049e3df4548d59d5ff1 (diff) | |
download | setuptools-scm-4d45456c401d4ae575f9525c1a20b52e1479dfd7.tar.gz |
add example, split get into new function
-rw-r--r-- | README.rst | 19 | ||||
-rw-r--r-- | src/setuptools_scm/version.py | 22 |
2 files changed, 30 insertions, 11 deletions
@@ -628,6 +628,25 @@ The callable must return the configuration. ) +Customizing Version Scheme with pyproject.toml +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To support custom version schemes in pyproject.toml, you may specify your own function as an entrypoint for getting the version. + +.. code:: toml + + # pyproject.toml + [tool.setuptools_scm] + version_scheme = "myproject.my_file:myversion_func" + +.. code:: python + + # myproject/my_file + def myversion_func(version: ScmVersion): + from setuptools_scm.version import guess_next_version + return version.format_next_version(guess_next_version, '{guessed}b{distance}') + + Note on testing non-installed versions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/setuptools_scm/version.py b/src/setuptools_scm/version.py index 45647de..2377aed 100644 --- a/src/setuptools_scm/version.py +++ b/src/setuptools_scm/version.py @@ -494,6 +494,16 @@ def _get_ep(group: str, name: str) -> Any | None: else: return None +def _get_from_object_reference_str(path: str) -> Any | None: + try: + from importlib.metadata import EntryPoint + except ImportError: + from importlib_metadata import EntryPoint + try: + return EntryPoint(path, path, None).load() + except (AttributeError, ModuleNotFoundError): + return None + def _iter_version_schemes( entrypoint: str, @@ -507,19 +517,9 @@ def _iter_version_schemes( if _memo is None: _memo = set() if isinstance(scheme_value, str): - tscheme_val = _get_ep(entrypoint, scheme_value) - if tscheme_val is None: - try: - from importlib.metadata import EntryPoint - except ImportError: - from importlib_metadata import EntryPoint - try: - tscheme_val = EntryPoint(scheme_value, scheme_value, entrypoint).load() - except (AttributeError, ModuleNotFoundError): - pass scheme_value = cast( 'str|List[str]|Tuple[str, ...]|Callable[["ScmVersion"], str]|None', - tscheme_val + _get_ep(entrypoint, scheme_value) or _get_from_object_reference_str(scheme_value), ) if isinstance(scheme_value, (list, tuple)): |