39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
import uuid
|
|
from dataclasses import dataclass
|
|
from typing import Generic, override
|
|
|
|
from option import Option
|
|
|
|
from modules.tag import Tag, Tags
|
|
from modules.task.factory.metadata import QTaskFactoryMetadata
|
|
from modules.utils.types import A, C, Q, V
|
|
from modules.utils.utils import indent
|
|
|
|
|
|
@dataclass
|
|
class QTask(Generic[C, V, Q, A]):
|
|
question: Q
|
|
answer: A
|
|
tags: Tags[C, V]
|
|
factory_metadata: Option[QTaskFactoryMetadata[C, V]] = Option[
|
|
QTaskFactoryMetadata[C, V]
|
|
].maybe(None)
|
|
id: uuid.UUID = uuid.uuid4()
|
|
|
|
def __init__(
|
|
self,
|
|
question: Q,
|
|
answer: A,
|
|
tags: Tags[C, V] | list[Tag[C, V]] | None = None,
|
|
):
|
|
self.question = question
|
|
self.answer = answer
|
|
if isinstance(tags, list):
|
|
self.tags = Tags[C, V](tags)
|
|
elif isinstance(tags, Tags):
|
|
self.tags = tags
|
|
|
|
@override
|
|
def __str__(self) -> str:
|
|
return f"Question:\n{indent(str(self.question))}\nAnswer:\n{indent(str(self.answer))}\nTags:\n{indent(str(self.tags))}"
|