36 lines
1010 B
Python
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))}"
|