Source code for semantic_release.changelog.context
from __future__ import annotations
from dataclasses import dataclass
from typing import TYPE_CHECKING, Any, Callable
if TYPE_CHECKING:
from jinja2 import Environment
from semantic_release.changelog.release_history import ReleaseHistory
from semantic_release.hvcs._base import HvcsBase
[docs]@dataclass
class ChangelogContext:
repo_name: str
repo_owner: str
hvcs_type: str
history: ReleaseHistory
filters: tuple[Callable[..., Any], ...] = ()
[docs] def bind_to_environment(self, env: Environment) -> Environment:
env.globals["context"] = self
for f in self.filters:
env.filters[f.__name__] = f
return env
[docs]def make_changelog_context(
hvcs_client: HvcsBase, release_history: ReleaseHistory
) -> ChangelogContext:
return ChangelogContext(
repo_name=hvcs_client.repo_name,
repo_owner=hvcs_client.owner,
history=release_history,
hvcs_type=hvcs_client.__class__.__name__.lower(),
filters=(*hvcs_client.get_changelog_context_filters(),),
)