Source code for betty.model.event_type

"""
Provide Betty's ancestry event types.
"""

from __future__ import annotations

from typing import TYPE_CHECKING

from betty.locale import Str, DEFAULT_LOCALIZER

if TYPE_CHECKING:
    from betty.model.ancestry import Person


[docs] class EventTypeProvider: @property def entity_types(self) -> set[type[EventType]]: raise NotImplementedError(repr(self))
[docs] class EventType: def __new__(cls): raise RuntimeError("Event types cannot be instantiated.")
[docs] @classmethod def name(cls) -> str: raise NotImplementedError(repr(cls))
[docs] @classmethod def label(cls) -> Str: raise NotImplementedError(repr(cls))
[docs] @classmethod def comes_before(cls) -> set[type[EventType]]: return set() # pragma: no cover
[docs] @classmethod def comes_after(cls) -> set[type[EventType]]: return set() # pragma: no cover
[docs] class UnknownEventType(EventType):
[docs] @classmethod def name(cls) -> str: return "unknown" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Unknown") # pragma: no cover
[docs] class DerivableEventType(EventType): pass # pragma: no cover
[docs] class CreatableDerivableEventType(DerivableEventType):
[docs] @classmethod def may_create(cls, person: Person, lifetime_threshold: int) -> bool: return True # pragma: no cover
[docs] class PreBirthEventType(EventType):
[docs] @classmethod def comes_before(cls) -> set[type[EventType]]: return {Birth} # pragma: no cover
[docs] class StartOfLifeEventType(EventType): pass # pragma: no cover
[docs] class DuringLifeEventType(EventType):
[docs] @classmethod def comes_after(cls) -> set[type[EventType]]: return {Birth} # pragma: no cover
[docs] @classmethod def comes_before(cls) -> set[type[EventType]]: return {Death} # pragma: no cover
[docs] class EndOfLifeEventType(EventType): pass # pragma: no cover
[docs] class PostDeathEventType(EventType):
[docs] @classmethod def comes_after(cls) -> set[type[EventType]]: return {Death} # pragma: no cover
[docs] class Birth(CreatableDerivableEventType, StartOfLifeEventType):
[docs] @classmethod def name(cls) -> str: return "birth" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Birth") # pragma: no cover
[docs] @classmethod def comes_before(cls) -> set[type[EventType]]: return {DuringLifeEventType} # pragma: no cover
[docs] class Baptism(DuringLifeEventType, StartOfLifeEventType):
[docs] @classmethod def name(cls) -> str: return "baptism" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Baptism") # pragma: no cover
[docs] class Adoption(DuringLifeEventType):
[docs] @classmethod def name(cls) -> str: return "adoption" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Adoption") # pragma: no cover
[docs] class Death(CreatableDerivableEventType, EndOfLifeEventType):
[docs] @classmethod def name(cls) -> str: return "death" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Death") # pragma: no cover
[docs] @classmethod def comes_after(cls) -> set[type[EventType]]: return {DuringLifeEventType} # pragma: no cover
[docs] @classmethod def may_create(cls, person: Person, lifetime_threshold: int) -> bool: from betty.privatizer import Privatizer return Privatizer(lifetime_threshold, localizer=DEFAULT_LOCALIZER).has_expired( person, 1 )
[docs] class FinalDispositionEventType( PostDeathEventType, DerivableEventType, EndOfLifeEventType ): pass # pragma: no cover
[docs] class Funeral(FinalDispositionEventType):
[docs] @classmethod def name(cls) -> str: return "funeral" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Funeral") # pragma: no cover
[docs] class Cremation(FinalDispositionEventType):
[docs] @classmethod def name(cls) -> str: return "cremation" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Cremation") # pragma: no cover
[docs] class Burial(FinalDispositionEventType):
[docs] @classmethod def name(cls) -> str: return "burial" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Burial") # pragma: no cover
[docs] class Will(PostDeathEventType):
[docs] @classmethod def name(cls) -> str: return "will" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Will") # pragma: no cover
[docs] class Engagement(DuringLifeEventType):
[docs] @classmethod def name(cls) -> str: return "engagement" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Engagement") # pragma: no cover
[docs] @classmethod def comes_before(cls) -> set[type[EventType]]: return {Marriage} # pragma: no cover
[docs] class Marriage(DuringLifeEventType):
[docs] @classmethod def name(cls) -> str: return "marriage" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Marriage") # pragma: no cover
[docs] class MarriageAnnouncement(DuringLifeEventType):
[docs] @classmethod def name(cls) -> str: return "marriage-announcement" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Announcement of marriage") # pragma: no cover
[docs] @classmethod def comes_before(cls) -> set[type[EventType]]: return {Marriage} # pragma: no cover
[docs] class Divorce(DuringLifeEventType):
[docs] @classmethod def name(cls) -> str: return "divorce" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Divorce") # pragma: no cover
[docs] @classmethod def comes_after(cls) -> set[type[EventType]]: return {Marriage} # pragma: no cover
[docs] class DivorceAnnouncement(DuringLifeEventType):
[docs] @classmethod def name(cls) -> str: return "divorce-announcement" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Announcement of divorce") # pragma: no cover
[docs] @classmethod def comes_after(cls) -> set[type[EventType]]: return {Marriage} # pragma: no cover
[docs] @classmethod def comes_before(cls) -> set[type[EventType]]: return {Divorce} # pragma: no cover
[docs] class Residence(DuringLifeEventType):
[docs] @classmethod def name(cls) -> str: return "residence" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Residence") # pragma: no cover
[docs] class Immigration(DuringLifeEventType):
[docs] @classmethod def name(cls) -> str: return "immigration" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Immigration") # pragma: no cover
[docs] class Emigration(DuringLifeEventType):
[docs] @classmethod def name(cls) -> str: return "emigration" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Emigration") # pragma: no cover
[docs] class Occupation(DuringLifeEventType):
[docs] @classmethod def name(cls) -> str: return "occupation" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Occupation") # pragma: no cover
[docs] class Retirement(DuringLifeEventType):
[docs] @classmethod def name(cls) -> str: return "retirement" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Retirement") # pragma: no cover
[docs] class Correspondence(EventType):
[docs] @classmethod def name(cls) -> str: return "correspondence" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Correspondence") # pragma: no cover
[docs] class Confirmation(DuringLifeEventType):
[docs] @classmethod def name(cls) -> str: return "confirmation" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Confirmation") # pragma: no cover
[docs] class Missing(DuringLifeEventType):
[docs] @classmethod def name(cls) -> str: return "missing" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Missing") # pragma: no cover
[docs] class Conference(DuringLifeEventType):
[docs] @classmethod def name(cls) -> str: return "conference" # pragma: no cover
[docs] @classmethod def label(cls) -> Str: return Str._("Conference") # pragma: no cover