Source code for parliament.models.meeting

from __future__ import annotations

import uuid

from sqlalchemy import Column, Text, ForeignKey
from sqlalchemy.orm import RelationshipProperty, relationship

from onegov.core.orm import Base
from onegov.core.orm.mixins import ContentMixin
from onegov.core.orm.types import UUID, MarkupText, UTCDateTime
from onegov.search import ORMSearchable

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    import uuid

    from markupsafe import Markup
    from datetime import datetime

    from onegov.parliament.models.political_business import (
        PoliticalBusiness,
    )


[docs] class Meeting(Base, ContentMixin, ORMSearchable):
[docs] __tablename__ = 'par_meetings'
[docs] type: Column[str] = Column( Text, nullable=False, default=lambda: 'generic' )
[docs] __mapper_args__ = { 'polymorphic_on': type, 'polymorphic_identity': 'generic', }
[docs] es_public = True
[docs] es_properties = {'title_text': {'type': 'text'}}
@property
[docs] def es_suggestion(self) -> str: return self.title
@property
[docs] def title_text(self) -> str: return f'{self.title} ({self.start_datetime})'
#: Internal ID
[docs] id: Column[uuid.UUID] = Column( UUID, # type:ignore[arg-type] primary_key=True, default=uuid.uuid4, )
#: The title of the meeting
[docs] title: Column[str] = Column(Text, nullable=False)
#: date and time of the meeting
[docs] start_datetime: Column[datetime | None]
start_datetime = Column(UTCDateTime, nullable=True) #: location address of meeting
[docs] address: Column[str] = Column(Text, nullable=False)
[docs] description: Column[Markup | None] = Column(MarkupText, nullable=True)
#: political business id
[docs] political_business_id: Column[uuid.UUID | None] = Column( UUID, # type:ignore[arg-type] ForeignKey('par_political_businesses.id'), )
#: list of political businesses, "Traktanden"
[docs] political_businesses: RelationshipProperty[PoliticalBusiness] = ( relationship( 'PoliticalBusiness', back_populates='meetings', order_by='PoliticalBusiness.number', primaryjoin='Meeting.political_business_id == ' 'PoliticalBusiness.id', ) )
[docs] def __repr__(self) -> str: return f'<Meeting {self.title}, {self.start_datetime}>'