updated guild
This commit is contained in:
parent
3ca01ede8f
commit
f9fd4db33c
@ -1,4 +1,6 @@
|
|||||||
set -o pipefail
|
#! /bin/bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
uv run mypy src/
|
uv run mypy src/
|
||||||
uv run ruff check "$@"
|
uv run ruff check "$@"
|
||||||
|
|||||||
@ -19,7 +19,7 @@ dev = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[tool.mypy]
|
[tool.mypy]
|
||||||
disable_error_code = ["import-untyped"]
|
disable_error_code = ["import-untyped", "prop-decorator"]
|
||||||
|
|
||||||
[tool.ruff.lint]
|
[tool.ruff.lint]
|
||||||
select = [
|
select = [
|
||||||
|
|||||||
@ -6,4 +6,4 @@ from .refs import CollectionName
|
|||||||
class FiberBaseModel(BaseModel):
|
class FiberBaseModel(BaseModel):
|
||||||
uuid: UUID7
|
uuid: UUID7
|
||||||
collection_name: CollectionName
|
collection_name: CollectionName
|
||||||
last_change: datetime = Field(default_factory=lambda: datetime.now())
|
last_change: datetime = Field(default_factory=datetime.now)
|
||||||
|
|||||||
@ -3,8 +3,7 @@ from pydantic import model_validator, UUID7, computed_field
|
|||||||
from fiber_package.refs import (
|
from fiber_package.refs import (
|
||||||
CommitteeEditionRef,
|
CommitteeEditionRef,
|
||||||
CommitteeEditionRefList,
|
CommitteeEditionRefList,
|
||||||
EntityRefList,
|
EntityRefList
|
||||||
AssociationRef
|
|
||||||
)
|
)
|
||||||
from fiber_package.base import FiberBaseModel
|
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):
|
class CommitteeModel(FiberBaseModel):
|
||||||
collection_name: Literal["committee"] = "committee"
|
collection_name: Literal["committee"] = "committee"
|
||||||
|
|
||||||
association_tag: str
|
|
||||||
|
|
||||||
short_name: str
|
short_name: str
|
||||||
full_name_en: str
|
full_name_en: str
|
||||||
full_name_nl: str
|
full_name_nl: str
|
||||||
description_en: str = ""
|
description_en: str = ""
|
||||||
description_nl: str = ""
|
description_nl: str = ""
|
||||||
|
association_tag: str
|
||||||
committee_type: CommitteeType
|
committee_type: CommitteeType
|
||||||
|
|
||||||
active: bool = True
|
active: bool = True
|
||||||
|
|
||||||
ldap_id: int | None = None
|
ldap_id: int | None = None
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
from pydantic import Field
|
|
||||||
|
|
||||||
from .person import PersonModel
|
from .person import PersonModel
|
||||||
from .submodels import Address, LoginInfo
|
from .submodels import Address, LoginInfo
|
||||||
from .enums import Study
|
|
||||||
|
|
||||||
# An associate is someone who frequents activities & receives weekly mailing
|
# An associate is someone who frequents activities & receives weekly mailing
|
||||||
# However this person is not a full member, so no GMM rights
|
# However this person is not a full member, so no GMM rights
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
from pydantic import Field
|
from pydantic import Field
|
||||||
|
|
||||||
from .associate import AssociateModel
|
from .associate import AssociateModel
|
||||||
from .submodels import Address, LoginInfo
|
|
||||||
from .enums import Study
|
from .enums import Study
|
||||||
|
|
||||||
class MemberModel(AssociateModel):
|
class MemberModel(AssociateModel):
|
||||||
|
|||||||
@ -27,7 +27,7 @@ class PersonModel(FiberBaseModel):
|
|||||||
date_of_birth: date | None = None
|
date_of_birth: date | None = None
|
||||||
|
|
||||||
|
|
||||||
@computed_field
|
@computed_field # type: ignore[prop-decorator]
|
||||||
@property
|
@property
|
||||||
def underage(self) -> bool:
|
def underage(self) -> bool:
|
||||||
if self.date_of_birth is None:
|
if self.date_of_birth is None:
|
||||||
@ -50,5 +50,5 @@ class PersonModel(FiberBaseModel):
|
|||||||
|
|
||||||
# Needed for dates, as pymongo cannot handle them
|
# Needed for dates, as pymongo cannot handle them
|
||||||
@field_serializer("date_of_birth", when_used="always")
|
@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
|
return value.isoformat() if value else None
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
from pydantic import model_validator
|
from pydantic import model_validator, Field, UUID7
|
||||||
from fiber_package.refs import EntityRefList, EntityRef
|
from fiber_package.refs import EntityRefList
|
||||||
|
|
||||||
from datetime import date
|
from datetime import date
|
||||||
|
|
||||||
@ -18,17 +18,20 @@ Removing old members from last_active is done in fiber
|
|||||||
class GuildModel(FiberBaseModel):
|
class GuildModel(FiberBaseModel):
|
||||||
collection_name: Literal["guild"] = "guild"
|
collection_name: Literal["guild"] = "guild"
|
||||||
|
|
||||||
|
short_name: str
|
||||||
full_name_en: str
|
full_name_en: str
|
||||||
full_name_nl: str
|
full_name_nl: str
|
||||||
description_en: str
|
description_en: str
|
||||||
description_nl: str
|
description_nl: str
|
||||||
|
association_tag: str
|
||||||
|
|
||||||
|
ldap_id: int | None = None
|
||||||
|
|
||||||
members: EntityRefList
|
members: EntityRefList
|
||||||
previous_members: EntityRefList
|
previous_members: EntityRefList
|
||||||
|
guild_masters: list[UUID7]
|
||||||
|
|
||||||
guild_masters: EntityRefList
|
last_active: dict[UUID7, date] = Field(default_factory=dict)
|
||||||
|
|
||||||
last_active: dict[EntityRef, date]
|
|
||||||
|
|
||||||
@model_validator(mode='after')
|
@model_validator(mode='after')
|
||||||
def current_members_not_previous(self) -> Self:
|
def current_members_not_previous(self) -> Self:
|
||||||
@ -45,3 +48,10 @@ class GuildModel(FiberBaseModel):
|
|||||||
if master not in self.members:
|
if master not in self.members:
|
||||||
raise ValueError("All guild masters must be members!")
|
raise ValueError("All guild masters must be members!")
|
||||||
return self
|
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
|
||||||
|
|||||||
@ -8,7 +8,7 @@ class Membership(StrEnum):
|
|||||||
member = "member"
|
member = "member"
|
||||||
associate = "associate"
|
associate = "associate"
|
||||||
alumn = "alumn"
|
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"
|
extern = "extern"
|
||||||
|
|
||||||
def validate_visibility_tag(v: str) -> str:
|
def validate_visibility_tag(v: str) -> str:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user