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 time
import datetime
from flask.ext.admin.babel import lazy_gettext
from flask.ext.admin.model import filters
......@@ -87,6 +89,19 @@ class BooleanNotEqualFilter(FilterNotEqual, filters.BaseBooleanFilter):
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
class FilterConverter(filters.BaseFilterConverter):
strings = (FilterEqual, FilterNotEqual, FilterLike, FilterNotLike)
......@@ -118,11 +133,19 @@ class FilterConverter(filters.BaseFilterConverter):
@filters.convert('datetime')
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')
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')
def conv_enum(self, column, name, options=None, **kwargs):
......
......@@ -100,7 +100,7 @@ class BaseDateFilter(BaseFilter):
"""
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,
options,
data_type='datepicker')
......@@ -112,9 +112,9 @@ class BaseDateFilter(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,
options,
data_type='datetimepicker')
......@@ -124,6 +124,20 @@ class BaseDateTimeFilter(BaseFilter):
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):
"""
Decorator for field to filter conversion routine.
......
......@@ -488,7 +488,7 @@ def test_column_filters():
ok_('datetime_obj2' not in data)
# 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)
data = rv.data.decode('utf-8')
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