Source code for betty.extension.deriver
"""
Expand an ancestry by deriving additional data from existing data.
"""
from __future__ import annotations
from logging import getLogger
from typing import final
from typing_extensions import override
from betty.deriver import Deriver as DeriverApi
from betty.extension.privatizer import Privatizer
from betty.load import PostLoader
from betty.locale.localizable import _, Localizable
from betty.model import event_type
from betty.model.event_type import DerivableEventType
from betty.project.extension import Extension
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from betty.plugin import PluginId
[docs]
@final
class Deriver(Extension, PostLoader):
"""
Expand an ancestry by deriving additional data from existing data.
"""
[docs]
@override
@classmethod
def plugin_id(cls) -> PluginId:
return "deriver"
[docs]
@override
async def post_load(self) -> None:
logger = getLogger(__name__)
logger.info(self._project.app.localizer._("Deriving..."))
deriver = DeriverApi(
self.project.ancestry,
self.project.configuration.lifetime_threshold,
set(await event_type.ENTITY_TYPE_REPOSITORY.select(DerivableEventType)),
localizer=self.project.app.localizer,
)
await deriver.derive()
[docs]
@override
@classmethod
def comes_before(cls) -> set[PluginId]:
return {Privatizer.plugin_id()}
[docs]
@override
@classmethod
def plugin_label(cls) -> Localizable:
return _("Deriver")
[docs]
@override
@classmethod
def plugin_description(cls) -> Localizable:
return _(
"Create events such as births and deaths by deriving their details from existing information."
)