"""
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