import uuid from dataclasses import dataclass from typing import Generic, List, Optional, Union from option import NONE, Option from tags import Tag, Tags from modules.fabric_metadata import QTaskFactoryMetadata from utils.types import A, C, Q, V from utils.utils import indent @dataclass class QTask(Generic[C, V, Q, A]): question: Q answer: A tags: Tags[C, V] = Tags() fabric_metadata: Option[QTaskFactoryMetadata[C, V]] = Option.maybe(NONE) id: uuid.UUID = uuid.uuid4() def __init__( self, question: Q, answer: A, tags: Optional[Union[Tags[C, V], List[Tag[C, V]]]] = None, ): self.question = question self.answer = answer if isinstance(tags, List): self.tags = Tags[C, V].from_list(tags) elif isinstance(tags, Tags): self.tags = tags def __str__(self): return f"Question:\n{indent(str(self.question))}\nAnswer:\n{indent(str(self.answer))}\nTags:\n{indent(str(self.tags))}"