Source code for timelink.api.models.geoentity

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

from sqlalchemy import Column, String, ForeignKey

from timelink.kleio.utilities import quote_long_text, render_with_extra_info
from .entity import Entity


[docs] class Geoentity(Entity): """ represents a geographical entity.""" __tablename__ = "geoentities" id = Column(String, ForeignKey("entities.id", ondelete="CASCADE"), primary_key=True) name = Column(String, index=True) the_type = Column(String(32), nullable=True) obs = Column(String) __mapper_args__ = {"polymorphic_identity": "geoentity"} def __repr__(self): sr = super().__repr__() return ( f"Geoentity(id={sr}, " f'name="{self.name}", ' f'the_type="{self.the_type}", ' f"obs={self.obs}" f")" ) def __str__(self): return self.to_kleio(show_contained=False)
[docs] def to_kleio(self, self_string=None, show_contained=False, ident="", ident_inc=" ", width=80, **kwargs) -> str: obs, extra_info = self.get_extra_info() if self.groupname is None: myname = "attribute" else: myname = self.groupname r = f"{myname}${render_with_extra_info('name', self.name, extra_info=extra_info, **kwargs)}" r += f"/{render_with_extra_info('the_type', self.the_type, extra_info=extra_info, **kwargs)}" if obs is not None and len(obs.strip()) > 0: self_string = f"{r}/obs={quote_long_text(obs.strip(), width=width)}" else: self_string = r r = super().to_kleio(self_string=self_string, ident=ident, ident_inc=ident_inc, show_contained=show_contained, width=width, **kwargs) return r