Skip to content

Version scheme plugins


Known third-party

VersionSchemeInterface

Example usage:

from hatchling.version.scheme.plugin.interface import VersionSchemeInterface


class SpecialVersionScheme(VersionSchemeInterface):
    PLUGIN_NAME = 'special'
    ...
from hatchling.plugin import hookimpl

from .plugin import SpecialVersionScheme


@hookimpl
def hatch_register_version_scheme():
    return SpecialVersionScheme
Source code in backend/src/hatchling/version/scheme/plugin/interface.py
class VersionSchemeInterface(ABC):  # no cov
    """
    Example usage:

    ```python tab="plugin.py"
    from hatchling.version.scheme.plugin.interface import VersionSchemeInterface


    class SpecialVersionScheme(VersionSchemeInterface):
        PLUGIN_NAME = 'special'
        ...
    ```

    ```python tab="hooks.py"
    from hatchling.plugin import hookimpl

    from .plugin import SpecialVersionScheme


    @hookimpl
    def hatch_register_version_scheme():
        return SpecialVersionScheme
    ```
    """

    PLUGIN_NAME = ''
    """The name used for selection."""

    def __init__(self, root: str, config: dict) -> None:
        self.__root = root
        self.__config = config

    @property
    def root(self) -> str:
        """
        The root of the project tree as a string.
        """
        return self.__root

    @property
    def config(self) -> dict:
        """
        ```toml config-example
        [tool.hatch.version]
        ```
        """
        return self.__config

    @cached_property
    def validate_bump(self) -> bool:
        """
        This is the value of the `validate-bump` option, with the `HATCH_VERSION_VALIDATE_BUMP`
        environment variable taking precedence. Validation is enabled by default.

        ```toml config-example
        [tool.hatch.version]
        validate-bump = true
        ```
        """
        from hatchling.utils.constants import VersionEnvVars

        if VersionEnvVars.VALIDATE_BUMP in os.environ:
            return os.environ[VersionEnvVars.VALIDATE_BUMP] not in {'false', '0'}

        validate_bump = self.config.get('validate-bump', True)
        if not isinstance(validate_bump, bool):
            message = 'option `validate-bump` must be a boolean'
            raise TypeError(message)

        return validate_bump

    @abstractmethod
    def update(self, desired_version: str, original_version: str, version_data: dict) -> str:
        """
        This should return a normalized form of the desired version. If the
        [validate_bump](reference.md#hatchling.version.scheme.plugin.interface.VersionSchemeInterface.validate_bump)
        property is `True`, this method should also verify that the version is higher than the original version.
        """

PLUGIN_NAME = '' class-attribute instance-attribute

The name used for selection.

root: str property

The root of the project tree as a string.

config: dict property

[tool.hatch.version]
[version]

validate_bump: bool cached property

This is the value of the validate-bump option, with the HATCH_VERSION_VALIDATE_BUMP environment variable taking precedence. Validation is enabled by default.

[tool.hatch.version]
validate-bump = true
[version]
validate-bump = true

update(desired_version: str, original_version: str, version_data: dict) -> str abstractmethod

This should return a normalized form of the desired version. If the validate_bump property is True, this method should also verify that the version is higher than the original version.

Source code in backend/src/hatchling/version/scheme/plugin/interface.py
@abstractmethod
def update(self, desired_version: str, original_version: str, version_data: dict) -> str:
    """
    This should return a normalized form of the desired version. If the
    [validate_bump](reference.md#hatchling.version.scheme.plugin.interface.VersionSchemeInterface.validate_bump)
    property is `True`, this method should also verify that the version is higher than the original version.
    """