From f9fd4db33cf3b2ab65e86566b416ac5942834c42 Mon Sep 17 00:00:00 2001 From: Tiago Scholten Date: Sat, 12 Sep 2026 20:49:59 +0200 Subject: [PATCH] updated guild --- pre-commit | 4 +++- pyproject.toml | 2 +- src/fiber_package/action/request/list.py | 2 +- src/fiber_package/base.py | 2 +- src/fiber_package/committee/committee.py | 7 ++----- src/fiber_package/entity/associate.py | 2 -- src/fiber_package/entity/enums.py | 2 +- src/fiber_package/entity/member.py | 1 - src/fiber_package/entity/person.py | 4 ++-- src/fiber_package/guild/guild.py | 20 +++++++++++++++----- src/fiber_package/membership_tag.py | 2 +- 11 files changed, 27 insertions(+), 21 deletions(-) diff --git a/pre-commit b/pre-commit index f7b3d81..97126c0 100755 --- a/pre-commit +++ b/pre-commit @@ -1,4 +1,6 @@ -set -o pipefail +#! /bin/bash + +set -euo pipefail uv run mypy src/ uv run ruff check "$@" diff --git a/pyproject.toml b/pyproject.toml index a9f0e33..36f1cb1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,7 @@ dev = [ ] [tool.mypy] -disable_error_code = ["import-untyped"] +disable_error_code = ["import-untyped", "prop-decorator"] [tool.ruff.lint] select = [ diff --git a/src/fiber_package/action/request/list.py b/src/fiber_package/action/request/list.py index 82958ef..58f7db9 100644 --- a/src/fiber_package/action/request/list.py +++ b/src/fiber_package/action/request/list.py @@ -24,4 +24,4 @@ ListCommitteesResponse = list[BaseModel] class ListCommitteeEditionsRequest(BaseModel): committee: UUID7 -ListCommitteeEditionsResponse = list[BaseModel] \ No newline at end of file +ListCommitteeEditionsResponse = list[BaseModel] diff --git a/src/fiber_package/base.py b/src/fiber_package/base.py index 51cc8c8..e32d9ff 100644 --- a/src/fiber_package/base.py +++ b/src/fiber_package/base.py @@ -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) diff --git a/src/fiber_package/committee/committee.py b/src/fiber_package/committee/committee.py index 31da38e..42090e9 100644 --- a/src/fiber_package/committee/committee.py +++ b/src/fiber_package/committee/committee.py @@ -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 diff --git a/src/fiber_package/entity/associate.py b/src/fiber_package/entity/associate.py index c1eb8fa..78e3078 100644 --- a/src/fiber_package/entity/associate.py +++ b/src/fiber_package/entity/associate.py @@ -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 diff --git a/src/fiber_package/entity/enums.py b/src/fiber_package/entity/enums.py index 51d9982..5331ac3 100644 --- a/src/fiber_package/entity/enums.py +++ b/src/fiber_package/entity/enums.py @@ -15,4 +15,4 @@ class Study(StrEnum): bsc_dsai = "Bachelor Data Science & AI" msc_math = "Master Mathematics" msc_phys = "Master Physics" - min_dsai = "Minor Data Science & AI" \ No newline at end of file + min_dsai = "Minor Data Science & AI" diff --git a/src/fiber_package/entity/member.py b/src/fiber_package/entity/member.py index fef5f3f..7ef8f76 100644 --- a/src/fiber_package/entity/member.py +++ b/src/fiber_package/entity/member.py @@ -1,7 +1,6 @@ from pydantic import Field from .associate import AssociateModel -from .submodels import Address, LoginInfo from .enums import Study class MemberModel(AssociateModel): diff --git a/src/fiber_package/entity/person.py b/src/fiber_package/entity/person.py index 2b3c4d8..9c4019e 100644 --- a/src/fiber_package/entity/person.py +++ b/src/fiber_package/entity/person.py @@ -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 diff --git a/src/fiber_package/guild/guild.py b/src/fiber_package/guild/guild.py index 03e2822..664c066 100644 --- a/src/fiber_package/guild/guild.py +++ b/src/fiber_package/guild/guild.py @@ -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 diff --git a/src/fiber_package/membership_tag.py b/src/fiber_package/membership_tag.py index a817044..23bcb5f 100644 --- a/src/fiber_package/membership_tag.py +++ b/src/fiber_package/membership_tag.py @@ -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: