Quizard/modules/task/__init__.py
2025-04-23 01:46:29 +03:00

44 lines
1.2 KiB
Python

import uuid
from dataclasses import dataclass, field
from typing import TYPE_CHECKING, Generic, override
from option import Option
from modules.tag import Tag, Tags
from modules.utils.types import A, C, Q, V
from modules.utils.utils import indent
if TYPE_CHECKING:
from modules.task.factory.metadata import QTaskFactoryMetadata
@dataclass
class QTask(Generic[C, V, Q, A]):
question: Q
answer: A
tags: Tags[C, V]
id: uuid.UUID
factory_metadata: Option["QTaskFactoryMetadata[C, V]"] = Option[
"QTaskFactoryMetadata[C, V]"
].maybe(None)
def __init__(
self,
question: Q,
answer: A = None,
tags: Tags[C, V] | list[Tag[C, V]] | Tag[C, V] | None = None,
):
self.question = question
self.answer = answer
if isinstance(tags, Tag):
self.tags = Tags[C, V]([tags])
if isinstance(tags, list):
self.tags = Tags[C, V](tags)
elif isinstance(tags, Tags):
self.tags = tags
self.id = uuid.uuid4()
@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))}"