from __future__ import annotations
from onegov.core.collection import GenericCollection
from datetime import date
from sqlalchemy import or_
from onegov.parliament.models.commission_membership import (
RISCommissionMembership,
CommissionMembership
)
from typing import TypeVar
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from sqlalchemy.orm import Query
from sqlalchemy.orm import Session
from typing import Self
[docs]
MembershipT = TypeVar('MembershipT', bound=CommissionMembership)
[docs]
class CommissionMembershipCollection(GenericCollection[MembershipT]):
pass
[docs]
class RISCommissionMembershipCollection(
CommissionMembershipCollection[RISCommissionMembership]
):
def __init__(
self,
session: Session,
active: bool | None = None
):
super().__init__(session)
@property
[docs]
def model_class(self) -> type[RISCommissionMembership]:
return RISCommissionMembership
[docs]
def query(self) -> Query[RISCommissionMembership]:
query = super().query()
if self.active is not None:
if self.active:
query = query.filter(
or_(
RISCommissionMembership.end.is_(None),
RISCommissionMembership.end >= date.today()
)
)
else:
query = query.filter(
RISCommissionMembership.end < date.today()
)
return query
[docs]
def for_filter(
self,
active: bool | None = None
) -> Self:
return self.__class__(self.session, active)