Metadata hook plugins¶
Metadata hooks allow for the modification of project metadata after it has been loaded.
Built-in¶
Custom¶
This is a custom class in a given Python file that inherits from the MetadataHookInterface.
Configuration¶
The metadata hook plugin name is custom
.
[tool.hatch.metadata.hooks.custom]
[metadata.hooks.custom]
An option path
is used to specify the path of the Python file, defaulting to hatch_build.py
.
Example¶
from hatchling.metadata.plugin.interface import MetadataHookInterface
class CustomMetadataHook(MetadataHookInterface):
...
If multiple subclasses are found, you must define a function named get_metadata_hook
that returns the desired build hook.
Note
Any defined PLUGIN_NAME is ignored and will always be custom
.
MetadataHookInterface (ABC)
¶
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 hatchling/metadata/plugin/interface.py
class MetadataHookInterface(ABC): # no cov
"""
Example usage:
=== ":octicons-file-code-16: plugin.py"
```python
from hatchling.metadata.plugin.interface import MetadataHookInterface
class SpecialMetadataHook(MetadataHookInterface):
PLUGIN_NAME = 'special'
...
```
=== ":octicons-file-code-16: hooks.py"
```python
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, config):
self.__root = root
self.__config = config
@property
def root(self):
"""
The root of the project tree.
"""
return self.__root
@property
def config(self):
"""
The hook configuration.
=== ":octicons-file-code-16: pyproject.toml"
```toml
[tool.hatch.metadata.hooks.<PLUGIN_NAME>]
```
=== ":octicons-file-code-16: hatch.toml"
```toml
[metadata.hooks.<PLUGIN_NAME>]
```
"""
return self.__config
@abstractmethod
def update(self, metadata: dict):
"""
This updates the metadata mapping of the `project` table in-place.
"""
PLUGIN_NAME
¶
The name used for selection.
config
property
readonly
¶
The hook configuration.
[tool.hatch.metadata.hooks.<PLUGIN_NAME>]
[metadata.hooks.<PLUGIN_NAME>]
root
property
readonly
¶
The root of the project tree.
update(self, metadata: dict)
¶
This updates the metadata mapping of the project
table in-place.
Source code in hatchling/metadata/plugin/interface.py
@abstractmethod
def update(self, metadata: dict):
"""
This updates the metadata mapping of the `project` table in-place.
"""
Last update: March 13, 2022