Source code for parliament.models.parliamentarian_role

from __future__ import annotations

from datetime import date
from onegov.core.orm import Base
from onegov.core.orm.mixins import TimestampMixin
from onegov.parliament import _
from sqlalchemy import Enum
from sqlalchemy import ForeignKey
from sqlalchemy.orm import mapped_column
from sqlalchemy.orm import relationship
from sqlalchemy.orm import Mapped
from uuid import uuid4
from uuid import UUID


from typing import Literal, TypeAlias, TYPE_CHECKING
if TYPE_CHECKING:
    from onegov.parliament.models import Parliamentarian
    from onegov.parliament.models import ParliamentaryGroup

[docs] Role: TypeAlias = Literal[ 'none', 'member', 'vote_counter', 'vice_president', 'president', ]
[docs] PartyRole: TypeAlias = Literal[ 'none', 'member', 'media_manager', 'vote_counter', 'vice_president', 'president', ]
[docs] ParliamentaryGroupRole: TypeAlias = Literal[ 'none', 'member', 'vote_counter', 'president', ]
[docs] PARLIAMENTARIAN_ROLES: dict[Role, str] = { 'none': _('none'), 'member': _('Member'), 'vote_counter': _('Vote counter'), 'vice_president': _('Vice president'), 'president': _('President'), }
[docs] PARTY_ROLES: dict[PartyRole, str] = { 'none': _('none'), 'member': _('Member'), 'media_manager': _('Media Manager'), 'vote_counter': _('Vote counter'), 'vice_president': _('Vice president'), 'president': _('President'), }
[docs] PARLIAMENTARY_GROUP_ROLES: dict[PartyRole, str] = { 'none': _('none'), 'member': _('Member'), 'vote_counter': _('Vote counter'), 'vice_president': _('Vice president'), 'president': _('President of the parliamentary group'), }
[docs] class ParliamentarianRole(Base, TimestampMixin):
[docs] __tablename__ = 'par_parliamentarian_roles'
[docs] type: Mapped[str] = mapped_column(default=lambda: 'generic')
[docs] __mapper_args__ = { 'polymorphic_on': type, 'polymorphic_identity': 'generic', }
#: Internal ID
[docs] id: Mapped[UUID] = mapped_column( primary_key=True, default=uuid4 )
#: The start date
[docs] start: Mapped[date | None]
#: The end date
[docs] end: Mapped[date | None]
#: The id of the parliamentarian
[docs] parliamentarian_id: Mapped[UUID] = mapped_column( ForeignKey('par_parliamentarians.id'), )
#: The parliamentarian
[docs] parliamentarian: Mapped[Parliamentarian] = relationship( back_populates='roles', lazy='joined' )
#: The role value
[docs] role: Mapped[Role] = mapped_column( Enum( *PARLIAMENTARIAN_ROLES.keys(), name='par_parliamentarian_role' ), default='member' )
#: The role as translated text @property
[docs] def role_label(self) -> str: return PARLIAMENTARIAN_ROLES.get(self.role, '')
#: The party role value
[docs] party_role: Mapped[PartyRole] = mapped_column( Enum( *PARTY_ROLES.keys(), name='par_party_role' ), default='member' )
#: The party role as translated text @property
[docs] def party_role_label(self) -> str: return PARTY_ROLES.get(self.party_role, '')
#: The id of the parliamentary group
[docs] parliamentary_group_id: Mapped[UUID | None] = mapped_column( ForeignKey('par_parliamentary_groups.id') )
#: The parliamentary group
[docs] parliamentary_group: Mapped[ParliamentaryGroup | None] = relationship( back_populates='roles' )
#: The parliamentary group role value
[docs] parliamentary_group_role: Mapped[ParliamentaryGroupRole] = mapped_column( Enum( *PARLIAMENTARY_GROUP_ROLES.keys(), name='par_parliamentary_group_role' ), default='member' )
#: The parliamentary group role as translated text @property
[docs] def parliamentary_group_role_label(self) -> str: return PARLIAMENTARY_GROUP_ROLES.get(self.parliamentary_group_role, '')
#: The district
[docs] district: Mapped[str | None]
#: Additional information
[docs] additional_information: Mapped[str | None]
[docs] def __repr__(self) -> str: return f'<{self.__class__.__name__} role={self.role}>'