From 5e7f72ea2fbaad8cdbe7cea846f70959694ffd7e Mon Sep 17 00:00:00 2001 From: Tiago Scholten Date: Wed, 14 Oct 2026 21:31:33 +0200 Subject: [PATCH] added new union types --- src/fiber_package/communication/activity.py | 15 +++++--------- src/fiber_package/signup/answer/types.py | 10 ++++++++++ src/fiber_package/signup/element/types.py | 22 +++++++++++++++++++++ src/fiber_package/signup/signup.py | 4 ++-- 4 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 src/fiber_package/signup/answer/types.py create mode 100644 src/fiber_package/signup/element/types.py diff --git a/src/fiber_package/communication/activity.py b/src/fiber_package/communication/activity.py index 9e9af96..60fb0b8 100644 --- a/src/fiber_package/communication/activity.py +++ b/src/fiber_package/communication/activity.py @@ -1,5 +1,5 @@ -from typing import Literal, Self, Annotated -from pydantic import model_validator, Field +from typing import Literal, Self +from pydantic import model_validator from datetime import datetime @@ -11,14 +11,9 @@ from fiber_package.refs import SignupRefList from fiber_package.signup.signup import SignupModel from fiber_package.signup.util import validate_answer -from fiber_package.signup.element.form_base_text import FormBaseText from fiber_package.signup.element.form_base_question import FormBaseQuestion -# Special type which uses enum category to decide type! -FieldUnionType = Annotated[ - FormBaseText | FormBaseQuestion, - Field(discriminator="category") -] +from fiber_package.signup.element.types import FormElementUnion, FormTextUnion class ActivityModel(CommunicationModel): category: Literal[CommunicationCategory.activity] @@ -31,7 +26,7 @@ class ActivityModel(CommunicationModel): payment_info: ActivityPaymentInfo | None = None - form: list[FieldUnionType] + form: list[FormElementUnion] signups: SignupRefList = SignupRefList([], "signup") @@ -51,7 +46,7 @@ class ActivityModel(CommunicationModel): question_dict: dict[str, FormBaseQuestion] = {} for element in self.form: - if isinstance(element, FormBaseText): + if isinstance(element, FormTextUnion): continue # so we know it is istance of FormBaseQuestion answerable.add(element.name) diff --git a/src/fiber_package/signup/answer/types.py b/src/fiber_package/signup/answer/types.py new file mode 100644 index 0000000..8f9effd --- /dev/null +++ b/src/fiber_package/signup/answer/types.py @@ -0,0 +1,10 @@ +from typing import Annotated + +from pydantic import Field + +from .answer_open_questions import AnswerOpenQuestions + +AnswerUnion = Annotated[ + AnswerOpenQuestions, + Field(discriminator="category") +] diff --git a/src/fiber_package/signup/element/types.py b/src/fiber_package/signup/element/types.py new file mode 100644 index 0000000..77a6f4b --- /dev/null +++ b/src/fiber_package/signup/element/types.py @@ -0,0 +1,22 @@ +from typing import Annotated + +from pydantic import Field + +from .form_open_questions import FormOpenQuestions +from .form_text import FormText +from .form_title import FormTitle + +FormTextUnion = Annotated[ + FormText | FormTitle, + Field(discriminator="category") +] + +FormQuestionUnion = Annotated[ + FormOpenQuestions, + Field(discriminator="category") +] + +FormElementUnion = Annotated[ + FormTextUnion | FormQuestionUnion, + Field(discriminator="category") +] diff --git a/src/fiber_package/signup/signup.py b/src/fiber_package/signup/signup.py index 6b13f63..8690685 100644 --- a/src/fiber_package/signup/signup.py +++ b/src/fiber_package/signup/signup.py @@ -3,7 +3,7 @@ from typing import Literal from fiber_package.base import FiberBaseModel from fiber_package.refs import EntityRef, ActivityRef -from fiber_package.signup.answer.answer_base import AnswerBase +from fiber_package.signup.answer.types import AnswerUnion class SignupModel(FiberBaseModel): collection_name: Literal["signup"] = "signup" @@ -11,6 +11,6 @@ class SignupModel(FiberBaseModel): attendee: EntityRef activity: ActivityRef - answers: list[AnswerBase] + answers: list[AnswerUnion] # TODO: signed_up, is_reserve, payment, confirmed, ....