from datetime import date, datetime from flask_admin.contrib.sqla import filters from flask_admin.model import filters as model_filters from flask_admin.model import typefmt from src.models import Artist, Label, WeeklyReport from src.utils import datetime_formatter DEFAULT_FORMATTERS = dict(typefmt.BASE_FORMATTERS) DEFAULT_FORMATTERS.update({date: datetime_formatter}) EXPORT_FORMATTERS = dict(typefmt.EXPORT_FORMATTERS) EXPORT_FORMATTERS.update({date: datetime_formatter}) class EqualFilter(filters.BaseSQLAFilter, model_filters.BaseDateFilter): filter_mapper = { Artist: Artist.updated_at, Label: Label.updated_at, WeeklyReport: WeeklyReport.drop_off_date } def __init__(self, column, name, options=None, data_type=None): super().__init__(column, name, options, data_type) def operation(self): return filters.lazy_gettext('equals') def apply(self, query, value, alias=None): today_min = datetime.min.time() today_max = datetime.max.time() start_date = datetime.combine(value, today_min) end_date = datetime.combine(value, today_max) value = start_date, end_date return filters.DateBetweenFilter.apply(self, query, value) class Converter(filters.FilterConverter): datetime_filters = ( EqualFilter, filters.DateTimeBetweenFilter, filters.DateGreaterFilter, filters.DateSmallerFilter, ) strings = ( filters.FilterLike, filters.FilterNotLike, filters.FilterEqual, ) class LabelFilterConverter(Converter): bool_filters = (filters.BooleanEqualFilter,)