"""Custom types used by greatday."""
from __future__ import annotations
from dataclasses import dataclass
import enum
from typing import Any, Dict, Literal, Protocol, TypeVar
from magodo.types import AbstractTodo
from sqlalchemy.future import Engine
from typing_extensions import TypedDict
T = TypeVar("T", bound=AbstractTodo)
[docs]class SavedQueryGroup(TypedDict):
"""Represents a single saved query group."""
default: str
queries: Dict[str, str]
SavedQueryGroupMap = Dict[str, SavedQueryGroup]
YesNoDefault = Literal["n", "default", "y"]
[docs]class CreateEngineType(Protocol):
"""The type of a `db.create_engine()` callable."""
def __call__(self, url: str, /, **kwargs: Any) -> Engine:
"""The function's call signature."""
[docs]class DescOperator(enum.Enum):
"""Used to determine the type of description constraint specified."""
CONTAINS = enum.auto()
NOT_CONTAINS = enum.auto()
[docs]@dataclass(frozen=True)
class DescFilter:
"""Represents a description query filter (e.g. '"foo"' or '!"bar"')."""
value: str
case_sensitive: bool | None = None
op: DescOperator = DescOperator.CONTAINS