Commit 29d7ea98 authored by Paul Brown's avatar Paul Brown

add special DateTimeEqualFilter and TimeEqualFilter with overridden clean function, fix test

parent 048b4679
import warnings import warnings
import time
import datetime
from flask.ext.admin.babel import lazy_gettext from flask.ext.admin.babel import lazy_gettext
from flask.ext.admin.model import filters from flask.ext.admin.model import filters
...@@ -81,11 +83,24 @@ class FilterSmaller(BaseSQLAFilter): ...@@ -81,11 +83,24 @@ class FilterSmaller(BaseSQLAFilter):
# Customized type filters # Customized type filters
class BooleanEqualFilter(FilterEqual, filters.BaseBooleanFilter): class BooleanEqualFilter(FilterEqual, filters.BaseBooleanFilter):
pass pass
class BooleanNotEqualFilter(FilterNotEqual, filters.BaseBooleanFilter): class BooleanNotEqualFilter(FilterNotEqual, filters.BaseBooleanFilter):
pass pass
class DateTimeEqualFilter(FilterEqual, filters.BaseDateTimeFilter):
def clean(self, value):
return datetime.datetime.strptime(value, '%Y-%m-%d %H:%M:%S')
class TimeEqualFilter(FilterEqual, filters.BaseTimeFilter):
def clean(self, value):
timetuple = time.strptime(value, '%H:%M:%S')
return datetime.time(timetuple.tm_hour,
timetuple.tm_min,
timetuple.tm_sec)
# Base SQLA filter field converter # Base SQLA filter field converter
class FilterConverter(filters.BaseFilterConverter): class FilterConverter(filters.BaseFilterConverter):
...@@ -118,11 +133,19 @@ class FilterConverter(filters.BaseFilterConverter): ...@@ -118,11 +133,19 @@ class FilterConverter(filters.BaseFilterConverter):
@filters.convert('datetime') @filters.convert('datetime')
def conv_datetime(self, column, name, **kwargs): def conv_datetime(self, column, name, **kwargs):
return [f(column, name, data_type='datetimepicker', **kwargs) for f in self.numeric] #return [f(column, name, data_type='datetimepicker', **kwargs) for f in self.numeric]
return [DateTimeEqualFilter(column, name),
FilterNotEqual(column, name, data_type='datetimepicker', **kwargs),
FilterGreater(column, name, data_type='datetimepicker', **kwargs),
FilterSmaller(column, name, data_type='datetimepicker', **kwargs)]
@filters.convert('time') @filters.convert('time')
def conv_time(self, column, name, **kwargs): def conv_time(self, column, name, **kwargs):
return [f(column, name, data_type='timepicker', **kwargs) for f in self.numeric] #return [f(column, name, data_type='timepicker', **kwargs) for f in self.numeric]
return [TimeEqualFilter(column, name),
FilterNotEqual(column, name, data_type='timepicker', **kwargs),
FilterGreater(column, name, data_type='timepicker', **kwargs),
FilterSmaller(column, name, data_type='timepicker', **kwargs)]
@filters.convert('enum') @filters.convert('enum')
def conv_enum(self, column, name, options=None, **kwargs): def conv_enum(self, column, name, options=None, **kwargs):
......
...@@ -100,7 +100,7 @@ class BaseDateFilter(BaseFilter): ...@@ -100,7 +100,7 @@ class BaseDateFilter(BaseFilter):
""" """
Base Date filter. Uses client-side date picker control. Base Date filter. Uses client-side date picker control.
""" """
def __init__(self, name, options=None): def __init__(self, name, options=None, data_type=None):
super(BaseDateFilter, self).__init__(name, super(BaseDateFilter, self).__init__(name,
options, options,
data_type='datepicker') data_type='datepicker')
...@@ -112,9 +112,9 @@ class BaseDateFilter(BaseFilter): ...@@ -112,9 +112,9 @@ class BaseDateFilter(BaseFilter):
class BaseDateTimeFilter(BaseFilter): class BaseDateTimeFilter(BaseFilter):
""" """
Base DateTime filter. Uses client-side date picker control. Base DateTime filter. Uses client-side date time picker control.
""" """
def __init__(self, name, options=None): def __init__(self, name, options=None, data_type=None):
super(BaseDateTimeFilter, self).__init__(name, super(BaseDateTimeFilter, self).__init__(name,
options, options,
data_type='datetimepicker') data_type='datetimepicker')
...@@ -122,6 +122,20 @@ class BaseDateTimeFilter(BaseFilter): ...@@ -122,6 +122,20 @@ class BaseDateTimeFilter(BaseFilter):
def validate(self, value): def validate(self, value):
# TODO: Validation # TODO: Validation
return True return True
class BaseTimeFilter(BaseFilter):
"""
Base Time filter. Uses client-side time picker control.
"""
def __init__(self, name, options=None, data_type=None):
super(BaseTimeFilter, self).__init__(name,
options,
data_type='timepicker')
def validate(self, value):
# TODO: Validation
return True
def convert(*args): def convert(*args):
......
...@@ -488,7 +488,7 @@ def test_column_filters(): ...@@ -488,7 +488,7 @@ def test_column_filters():
ok_('datetime_obj2' not in data) ok_('datetime_obj2' not in data)
# time - equals # time - equals
rv = client.get('/admin/_datetime/?flt0_8=11%3A10%3A00') rv = client.get('/admin/_datetime/?flt0_8=11%3A10%3A09')
eq_(rv.status_code, 200) eq_(rv.status_code, 200)
data = rv.data.decode('utf-8') data = rv.data.decode('utf-8')
ok_('time_obj1' in data) ok_('time_obj1' in data)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment