updated guild

This commit is contained in:
Tiago Scholten 2026-09-12 20:49:59 +02:00
parent 3ca01ede8f
commit f9fd4db33c
11 changed files with 27 additions and 21 deletions

View File

@ -1,4 +1,6 @@
set -o pipefail
#! /bin/bash
set -euo pipefail
uv run mypy src/
uv run ruff check "$@"

View File

@ -19,7 +19,7 @@ dev = [
]
[tool.mypy]
disable_error_code = ["import-untyped"]
disable_error_code = ["import-untyped", "prop-decorator"]
[tool.ruff.lint]
select = [

View File

@ -6,4 +6,4 @@ from .refs import CollectionName
class FiberBaseModel(BaseModel):
uuid: UUID7
collection_name: CollectionName
last_change: datetime = Field(default_factory=lambda: datetime.now())
last_change: datetime = Field(default_factory=datetime.now)

View File

@ -3,8 +3,7 @@ from pydantic import model_validator, UUID7, computed_field
from fiber_package.refs import (
CommitteeEditionRef,
CommitteeEditionRefList,
EntityRefList,
AssociationRef
EntityRefList
)
from fiber_package.base import FiberBaseModel
@ -22,15 +21,13 @@ An edition is a definite group of members with functions and a timespan.
class CommitteeModel(FiberBaseModel):
collection_name: Literal["committee"] = "committee"
association_tag: str
short_name: str
full_name_en: str
full_name_nl: str
description_en: str = ""
description_nl: str = ""
association_tag: str
committee_type: CommitteeType
active: bool = True
ldap_id: int | None = None

View File

@ -1,8 +1,6 @@
from pydantic import Field
from .person import PersonModel
from .submodels import Address, LoginInfo
from .enums import Study
# An associate is someone who frequents activities & receives weekly mailing
# However this person is not a full member, so no GMM rights

View File

@ -1,7 +1,6 @@
from pydantic import Field
from .associate import AssociateModel
from .submodels import Address, LoginInfo
from .enums import Study
class MemberModel(AssociateModel):

View File

@ -27,7 +27,7 @@ class PersonModel(FiberBaseModel):
date_of_birth: date | None = None
@computed_field
@computed_field # type: ignore[prop-decorator]
@property
def underage(self) -> bool:
if self.date_of_birth is None:
@ -50,5 +50,5 @@ class PersonModel(FiberBaseModel):
# Needed for dates, as pymongo cannot handle them
@field_serializer("date_of_birth", when_used="always")
def serialize_date(self, value: date | None):
def serialize_date(self, value: date | None) -> str | None:
return value.isoformat() if value else None

View File

@ -1,5 +1,5 @@
from pydantic import model_validator
from fiber_package.refs import EntityRefList, EntityRef
from pydantic import model_validator, Field, UUID7
from fiber_package.refs import EntityRefList
from datetime import date
@ -18,17 +18,20 @@ Removing old members from last_active is done in fiber
class GuildModel(FiberBaseModel):
collection_name: Literal["guild"] = "guild"
short_name: str
full_name_en: str
full_name_nl: str
description_en: str
description_nl: str
association_tag: str
ldap_id: int | None = None
members: EntityRefList
previous_members: EntityRefList
guild_masters: list[UUID7]
guild_masters: EntityRefList
last_active: dict[EntityRef, date]
last_active: dict[UUID7, date] = Field(default_factory=dict)
@model_validator(mode='after')
def current_members_not_previous(self) -> Self:
@ -45,3 +48,10 @@ class GuildModel(FiberBaseModel):
if master not in self.members:
raise ValueError("All guild masters must be members!")
return self
@model_validator(mode='after')
def guild_masters_always_active(self) -> Self:
today = date.today()
for uuid in self.guild_masters:
self.last_active[uuid] = today
return self

View File

@ -8,7 +8,7 @@ class Membership(StrEnum):
member = "member"
associate = "associate"
alumn = "alumn"
# extern is linked to association A if they ever visisted an activity of association A
# extern is linked to association if they visited one of their activities
extern = "extern"
def validate_visibility_tag(v: str) -> str: