update to structure again
This commit is contained in:
parent
82fc4ec94b
commit
a86b37d7c8
11
src/fiber_package/association.py
Normal file
11
src/fiber_package/association.py
Normal file
@ -0,0 +1,11 @@
|
||||
from fiber_package.base import FiberBaseModel
|
||||
from fiber_package.refs import EntityRefList, CommitteeRefList, GuildRefList
|
||||
from enum import StrEnum
|
||||
|
||||
|
||||
class AssociationModel(FiberBaseModel):
|
||||
full_name: str
|
||||
# short name used for visibility strings (think: DLF, Kaiser, CNB, etc...)
|
||||
tag: str
|
||||
|
||||
|
||||
@ -2,8 +2,8 @@ from enum import StrEnum
|
||||
|
||||
class Membership(StrEnum):
|
||||
member = "member"
|
||||
activity_goer = "activity_goer"
|
||||
alumn = "alumn"
|
||||
extern = "extern"
|
||||
|
||||
class LanguageOption(StrEnum):
|
||||
nl = "NL"
|
||||
@ -12,16 +12,4 @@ class LanguageOption(StrEnum):
|
||||
class Gender(StrEnum):
|
||||
male = "m"
|
||||
female = "f"
|
||||
nonbinary = "n"
|
||||
|
||||
class HonoraryStatus(StrEnum):
|
||||
merit = "merit"
|
||||
honorary = "honorary"
|
||||
|
||||
class OnlineAlmanacField(StrEnum):
|
||||
address = "address"
|
||||
birth_date = "birth_date"
|
||||
email = "email"
|
||||
phone_number = "phone_number"
|
||||
study = "study"
|
||||
gender = "gender"
|
||||
nonbinary = "n"
|
||||
@ -2,22 +2,10 @@
|
||||
from .person import PersonModel
|
||||
from .enums import HonoraryStatus, Gender
|
||||
|
||||
class FormerMemberModel(PersonModel):
|
||||
title: str | None = None
|
||||
gender: Gender | None = None
|
||||
honorary_status: HonoraryStatus | None = None
|
||||
# TODO: picture, study_start (year, month?), study_end
|
||||
|
||||
# company emails?
|
||||
|
||||
class AlumnModel(FormerMemberModel):
|
||||
# membership: Literal[Membership.alumn] = Membership.alumn
|
||||
|
||||
class AlumnModel(PersonModel):
|
||||
graduated: bool = False
|
||||
receive_spam_mail: bool = True
|
||||
|
||||
class ExternalModel(PersonModel):
|
||||
# membership: Literal[Membership.extern] = Membership.extern
|
||||
pass
|
||||
# TODO... payment???
|
||||
# TODO require login info??
|
||||
|
||||
@ -2,28 +2,29 @@ from pydantic import model_validator, EmailStr
|
||||
from typing import Self, Literal
|
||||
|
||||
from fiber_package.base import FiberBaseModel
|
||||
from .enums import Membership, LanguageOption
|
||||
from fiber_package.membership_tag import MembershipTag
|
||||
from .enums import LanguageOption
|
||||
from .submodels import Address
|
||||
|
||||
class PersonModel(FiberBaseModel):
|
||||
collection_name: Literal["entity"] = "entity"
|
||||
|
||||
membership: Membership
|
||||
memberships: list[MembershipTag]
|
||||
first_name: str
|
||||
tussenvoegsels: str | None = None # only in Dutch names
|
||||
infix_name: str | None = None # tussenvoegsel in Dutch names
|
||||
last_name: str
|
||||
full_name: str | None = None # first_name + tussenvoegsels + last_name
|
||||
email: EmailStr
|
||||
language: LanguageOption
|
||||
|
||||
# TODO: phone number
|
||||
address: Address | None = None
|
||||
phone_number: str | None = None
|
||||
|
||||
@model_validator(mode="after")
|
||||
def generate_full_name(self) -> Self:
|
||||
full_name = self.first_name
|
||||
if self.tussenvoegsels:
|
||||
full_name += " " + self.tussenvoegsels
|
||||
if self.infix_name:
|
||||
full_name += " " + self.infix_name
|
||||
full_name += " " + self.last_name
|
||||
self.full_name = full_name
|
||||
return self
|
||||
|
||||
19
src/fiber_package/membership_tag.py
Normal file
19
src/fiber_package/membership_tag.py
Normal file
@ -0,0 +1,19 @@
|
||||
from typing import Annotated
|
||||
from pydantic import AfterValidator
|
||||
|
||||
from entity.member import MembershipTag
|
||||
|
||||
BARE_TAGS = ["public"]
|
||||
|
||||
def validate_visibility_tag(v: str) -> str:
|
||||
if v in BARE_TAGS:
|
||||
return v
|
||||
_, _, status = v.partition(":")
|
||||
if status in MembershipType:
|
||||
return v
|
||||
raise ValueError(f"Invalid visibility tag: {v!r}")
|
||||
|
||||
VisibilityTag = Annotated[str, AfterValidator(validate_visibility_tag)]
|
||||
|
||||
def generate_tag(association_tag: str, membership_tag: MembershipTag):
|
||||
return association_tag + ":" + membership_tag
|
||||
@ -26,8 +26,9 @@ class RefList[C: str]:
|
||||
def __contains__(self, item: UUID7) -> bool:
|
||||
return item in self.uuids
|
||||
|
||||
SystemRef = Ref[Literal["system"]]
|
||||
SystemRefList = RefList[Literal["system"]]
|
||||
|
||||
AssociationRef = Ref[Literal["association"]]
|
||||
AssociationRefList = RefList[Literal["association"]]
|
||||
|
||||
EntityRef = Ref[Literal["entity"]]
|
||||
EntityRefList = RefList[Literal["entity"]]
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
from fiber_package.base import FiberBaseModel
|
||||
from fiber_package.refs import SystemRefList, EntityRefList
|
||||
from fiber_package.refs import AssociationRefList, EntityRefList
|
||||
|
||||
class RootGroupModel(FiberBaseModel):
|
||||
associations: SystemRefList
|
||||
associations: AssociationRefList
|
||||
sys_admins: EntityRefList
|
||||
@ -1,15 +0,0 @@
|
||||
from fiber_package.base import FiberBaseModel
|
||||
from fiber_package.refs import EntityRefList, CommitteeRefList, GuildRefList
|
||||
|
||||
|
||||
class AssociationModel(FiberBaseModel):
|
||||
full_name: str
|
||||
members: EntityRefList
|
||||
committees: CommitteeRefList
|
||||
guilds: GuildRefList
|
||||
|
||||
|
||||
# TODO: also add former_members, alumns, etc... ?
|
||||
# events: GroupList
|
||||
# activities: GroupList
|
||||
# mailings: GroupList
|
||||
Loading…
x
Reference in New Issue
Block a user