"""Base class for ticket classes.""" from typing import Any, Dict from pydantic import BaseModel, Field from abc import ABC, abstractmethod class TicketFieldAttribute(BaseModel): field_name: str = Field(description="Human-readable field name") field: str = Field(description="JIRA field ID/key") class Task(BaseModel): # A very flexible approach for now. Might want to be more strict in the future. data: Dict[str, Any] = Field(default_factory=dict, description="Task data") class TicketBase(ABC): @abstractmethod async def read_attributes(self) -> list[TicketFieldAttribute]: ... @abstractmethod async def read_tasks(self) -> list[Task]: ... @abstractmethod async def write_tasks(self, tasklist: list[Task]) -> None: ...