Source code for town6.api

from __future__ import annotations

from onegov.api.models import ApiEndpoint
from onegov.org.api import PaginatedCollection
from onegov.org.models.meeting import Meeting, MeetingCollection
from onegov.org.models.parliament import (
    RISCommission, RISCommissionCollection,
    RISParliamentarian, RISParliamentarianCollection,
    RISParliamentaryGroup, RISParliamentaryGroupCollection)
from onegov.org.models.political_business import (
    PoliticalBusiness, PoliticalBusinessCollection)
from onegov.town6 import _


from typing import Any, TYPE_CHECKING
if TYPE_CHECKING:
    from onegov.town6 import TownApp
    from onegov.town6.request import TownRequest


[docs] class MeetingApiEndpoint(ApiEndpoint[Meeting]):
[docs] app: TownApp
[docs] request: TownRequest
[docs] endpoint = 'meetings'
@property
[docs] def title(self) -> str: return self.request.translate(_('Meetings'))
@property
[docs] def collection(self) -> PaginatedCollection[Meeting]: return PaginatedCollection( self.request, MeetingCollection(self.session), Meeting, batch_size=self.batch_size, page=self.page or 0, )
[docs] def item_data(self, item: Meeting) -> dict[str, Any]: return { 'title': item.title, 'start_datetime': ( item.start_datetime.isoformat() if item.start_datetime else None ), 'end_datetime': ( item.end_datetime.isoformat() if item.end_datetime else None ), 'address': str(item.address) if item.address else None, 'description': str(item.description) if item.description else None, 'audio_link': item.audio_link or None, 'video_link': item.video_link or None, }
[docs] class PoliticalBusinessApiEndpoint(ApiEndpoint[PoliticalBusiness]):
[docs] app: TownApp
[docs] request: TownRequest
[docs] endpoint = 'political_businesses'
@property
[docs] def title(self) -> str: return self.request.translate(_('Political Businesses'))
@property
[docs] def collection(self) -> PoliticalBusinessCollection: result = PoliticalBusinessCollection( self.request, page=self.page or 0, ) result.batch_size = self.batch_size return result
[docs] def item_data(self, item: PoliticalBusiness) -> dict[str, Any]: return { 'title': item.title, 'number': item.number, 'political_business_type': item.political_business_type, 'status': item.status, 'entry_date': ( item.entry_date.isoformat() if item.entry_date else None ), 'display_name': item.display_name, }
[docs] class ParliamentarianApiEndpoint(ApiEndpoint[RISParliamentarian]):
[docs] app: TownApp
[docs] request: TownRequest
[docs] endpoint = 'parliamentarians'
@property
[docs] def title(self) -> str: return self.request.translate(_('Parliamentarians'))
@property
[docs] def collection(self) -> PaginatedCollection[RISParliamentarian]: return PaginatedCollection( self.request, RISParliamentarianCollection(self.session), RISParliamentarian, batch_size=self.batch_size, page=self.page or 0, )
[docs] def item_data(self, item: RISParliamentarian) -> dict[str, Any]: return { 'first_name': item.first_name, 'last_name': item.last_name, 'title': item.title, 'party': item.party, 'active': item.active, }
[docs] class CommissionApiEndpoint(ApiEndpoint[RISCommission]):
[docs] app: TownApp
[docs] request: TownRequest
[docs] endpoint = 'commissions'
@property
[docs] def title(self) -> str: return self.request.translate(_('Commissions'))
@property
[docs] def collection(self) -> PaginatedCollection[RISCommission]: return PaginatedCollection( self.request, RISCommissionCollection(self.session), RISCommission, batch_size=self.batch_size, page=self.page or 0, )
[docs] def item_data(self, item: RISCommission) -> dict[str, Any]: return { 'name': item.name, 'description': str(item.description) if item.description else None, }
[docs] class ParliamentaryGroupApiEndpoint(ApiEndpoint[RISParliamentaryGroup]):
[docs] app: TownApp
[docs] request: TownRequest
[docs] endpoint = 'parliamentary_groups'
@property
[docs] def title(self) -> str: return self.request.translate(_('Parliamentary groups'))
@property
[docs] def collection(self) -> PaginatedCollection[RISParliamentaryGroup]: return PaginatedCollection( self.request, RISParliamentaryGroupCollection(self.session), RISParliamentaryGroup, batch_size=self.batch_size, page=self.page or 0, )
[docs] def item_data(self, item: RISParliamentaryGroup) -> dict[str, Any]: return { 'name': item.name, 'description': str(item.description) if item.description else None, }