from typing import Any from db_schema.schemas.slz import ContentFailureLog from flask_admin.contrib.sqla.filters import BaseSQLAFilter from sqlalchemy import inspect from sqlalchemy.orm import Query, Session from delphi_slz_admin.modelviews import BaseFilterById, BaseModelView class FilterContentStatusId(BaseFilterById): def __init__(self, **kwargs: Any) -> None: self.column = ContentFailureLog.content_status_id self.name = 'Content Status ID' super().__init__(self.column, self.name, **kwargs) class FilterJobIdLike(BaseSQLAFilter): def __init__(self, **kwargs: Any) -> None: self.column = ContentFailureLog.job_id self.name = 'Job ID' super().__init__(self.column, self.name, **kwargs) def apply(self, query: Query, value: str, alias: Any = None) -> Query: return query.filter(self.column.like(f'%{value}%')) def operation(self) -> str: return 'like' class ContentFailureLogModelView(BaseModelView): column_list = [c_attr.key for c_attr in inspect(ContentFailureLog).mapper.column_attrs] column_sortable_list = column_list column_filters = [ FilterContentStatusId(), FilterJobIdLike(), ] def __init__(self, session: Session, **kwargs: Any) -> None: self.model = ContentFailureLog super().__init__(self.model, session, **kwargs)