# -*- coding: utf-8 -*- from typing import Any, Union import abc from enum import Enum, auto from jwutils.log import * from jwutils.Cmds import Cmds from jwutils.db.DataBase import DataBase from jwutils.db.Session import Session class ResType(Enum): # export Statement = auto() Scalars = auto() One = auto() First = auto() Pages = auto() class QueryResult(abc.ABC): # export def __init__(self, session: Session, query: Any) -> None: self.__query = query self.__session = session @property def db(self) -> DataBase: return self.__query.db @property def query(self) -> DataBase: return self.__query @property def session(self) -> DataBase: return self.__session @property def schema(self): return self.__query.db.schema def rows(self) -> list[Any]: return self._cast(ResType.Scalars) def pages(self, per_page=20, page=1) -> Any: return self._cast(ResType.Pages, per_page=per_page, page=page) def one(self) -> Any: return self._cast(ResType.One) def first(self) -> Any: return self._cast(ResType.First) @property def statement(self) -> Any: return self._cast(ResType.Statement) # -- pure virtuals @abc.abstractmethod def _cast(self, session: Session, res_type: ResType, **kwargs) -> Union[Any|list[Any]]: pass