Metadata hook plugins¶
Metadata hooks allow for the modification of project metadata after it has been loaded.
Known third-party¶
- hatch-docstring-description - set the project description using docstrings
 - hatch-fancy-pypi-readme - dynamically construct the README
 - hatch-nodejs-version - uses fields from NodeJS 
package.jsonfiles - hatch-odoo - determine dependencies based on manifests of Odoo add-ons
 - hatch-requirements-txt - read project dependencies from 
requirements.txtfiles - UniDep - for unified 
pipandcondadependency management using a singlerequirements.yamlfile for both 
 MetadataHookInterface ¶
 Example usage:
from hatchling.metadata.plugin.interface import MetadataHookInterface
class SpecialMetadataHook(MetadataHookInterface):
    PLUGIN_NAME = "special"
    ...
from hatchling.plugin import hookimpl
from .plugin import SpecialMetadataHook
@hookimpl
def hatch_register_metadata_hook():
    return SpecialMetadataHook
Source code in backend/src/hatchling/metadata/plugin/interface.py
 class MetadataHookInterface(ABC):  # no cov
    """
    Example usage:
    ```python tab="plugin.py"
    from hatchling.metadata.plugin.interface import MetadataHookInterface
    class SpecialMetadataHook(MetadataHookInterface):
        PLUGIN_NAME = "special"
        ...
    ```
    ```python tab="hooks.py"
    from hatchling.plugin import hookimpl
    from .plugin import SpecialMetadataHook
    @hookimpl
    def hatch_register_metadata_hook():
        return SpecialMetadataHook
    ```
    """
    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.
        """
        return self.__root
    @property
    def config(self) -> dict:
        """
        The hook configuration.
        ```toml config-example
        [tool.hatch.metadata.hooks.<PLUGIN_NAME>]
        ```
        """
        return self.__config
    @abstractmethod
    def update(self, metadata: dict) -> None:
        """
        This updates the metadata mapping of the `project` table in-place.
        """
    def get_known_classifiers(self) -> list[str]:  # noqa: PLR6301
        """
        This returns extra classifiers that should be considered valid in addition to the ones known to PyPI.
        """
        return []
 PLUGIN_NAME = ''  class-attribute instance-attribute  ¶
 The name used for selection.
 root: str  property  ¶
 The root of the project tree.
 config: dict  property  ¶
 The hook configuration.
[tool.hatch.metadata.hooks.<PLUGIN_NAME>]
[metadata.hooks.<PLUGIN_NAME>]
 update(metadata: dict) -> None  abstractmethod  ¶
 This updates the metadata mapping of the project table in-place.
Source code in backend/src/hatchling/metadata/plugin/interface.py
 @abstractmethod
def update(self, metadata: dict) -> None:
    """
    This updates the metadata mapping of the `project` table in-place.
    """
 get_known_classifiers() -> list[str] ¶
 This returns extra classifiers that should be considered valid in addition to the ones known to PyPI.
Source code in backend/src/hatchling/metadata/plugin/interface.py
 def get_known_classifiers(self) -> list[str]:  # noqa: PLR6301
    """
    This returns extra classifiers that should be considered valid in addition to the ones known to PyPI.
    """
    return []