Quizard/modules/task.py

36 lines
1010 B
Python

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))}"