Source code for timelink.api.models.act

""" Implementation of Acts in POM model

(c) Joaquim Carvalho 2023.
MIT License, no warranties.
"""

# for sqlalchemy 2.0 ORM
# see https://docs.sqlalchemy.org/en/20/orm/declarative_config.html
# and https://docs.sqlalchemy.org/en/20/orm/declarative_tables.html#orm-declarative-table

from sqlalchemy import ForeignKey  # pylint: disable=import-error
from sqlalchemy import String  # pylint: disable=import-error
from sqlalchemy.orm import Mapped  # pylint: disable=import-error
from sqlalchemy.orm import mapped_column  # pylint: disable=import-error

from timelink.kleio.utilities import quote_long_text, kleio_escape

from .entity import Entity


[docs] class Act(Entity): """Represents an Act, i.e. a record of some event in a historical document. Examples of acts are: baptisms, marriages, purchase deeds, wills, court records. TODO: implement https://github.com/time-link/timelink-kleio/issues/1 """ __tablename__ = "acts" #: str: a string uniquely identifying the act id: Mapped[str] = mapped_column( String, ForeignKey("entities.id", ondelete="CASCADE"), primary_key=True ) the_type: Mapped[str] = mapped_column( String(32), nullable=True, comment="type of act" ) #: str: the date of the act in Kleio format AAAAMMDD the_date: Mapped[str] = mapped_column( String, index=True, nullable=True, comment="the date of the act in Kleio format AAAAMMDD", ) #: str: location of the act, eg church, notary office loc: Mapped[str] = mapped_column(String, nullable=True) ref: Mapped[str] = mapped_column(String, nullable=True) #: str: archival reference obs: Mapped[str] = mapped_column( String, nullable=True ) #: any observations or comments. __mapper_args__ = {"polymorphic_identity": "act"} def __repr__(self): """Expression that can be used to instantiate an Act""" sr = super().__repr__() return ( f"Act(id={sr}, " f'the_type="{kleio_escape(self.the_type)}", ' f'the_date="{self.the_date}", ' f'loc="{kleio_escape(self.loc)}", ' f'ref="{kleio_escape(self.ref)}", ' f'obs="{quote_long_text(self.obs)}"' f")" ) def __str__(self): return self.to_kleio(show_contained=False)
[docs] def to_kleio(self, ident="", ident_inc=" ", show_contained=True, width=80, **kwargs) -> str: r = ( f"{self.groupname}${self.id}" f"/{self.the_date}" f"/type={kleio_escape(self.the_type)}" f"/ref={quote_long_text(self.ref)}" f"/loc={quote_long_text(self.loc)}" ) if self.obs is not None and len(self.obs.strip()) > 0: r = f"{r}/obs={quote_long_text(self.obs.strip(), width=width)}" kleio = super().to_kleio( self_string=r, ident=ident, ident_inc=ident_inc, show_contained=show_contained, width=width, **kwargs ) return kleio