Add AlchemyLocalDateTimeFilter
This commit is contained in:
parent
80d2912874
commit
b468bc4b2b
|
@ -565,6 +565,96 @@ class AlchemyDateTimeFilter(AlchemyDateFilter):
|
|||
return query.filter(self.column < time)
|
||||
|
||||
|
||||
class AlchemyLocalDateTimeFilter(AlchemyDateTimeFilter):
|
||||
"""
|
||||
SQLAlchemy filter for *local* datetime values. This assumes datetime
|
||||
values in the database are for local timezone, as opposed to UTC.
|
||||
"""
|
||||
|
||||
def filter_equal(self, query, value):
|
||||
"""
|
||||
Find all dateimes which fall on the given date.
|
||||
"""
|
||||
date = self.make_date(value)
|
||||
if not date:
|
||||
return query
|
||||
|
||||
start = datetime.datetime.combine(date, datetime.time(0))
|
||||
start = localtime(self.config, start, tzinfo=False)
|
||||
|
||||
stop = datetime.datetime.combine(date + datetime.timedelta(days=1), datetime.time(0))
|
||||
stop = localtime(self.config, stop, tzinfo=False)
|
||||
|
||||
return query.filter(self.column >= start)\
|
||||
.filter(self.column < stop)
|
||||
|
||||
def filter_not_equal(self, query, value):
|
||||
"""
|
||||
Find all dateimes which do *not* fall on the given date.
|
||||
"""
|
||||
date = self.make_date(value)
|
||||
if not date:
|
||||
return query
|
||||
|
||||
start = datetime.datetime.combine(date, datetime.time(0))
|
||||
start = localtime(self.config, start, tzinfo=False)
|
||||
|
||||
stop = datetime.datetime.combine(date + datetime.timedelta(days=1), datetime.time(0))
|
||||
stop = localtime(self.config, stop, tzinfo=False)
|
||||
|
||||
return query.filter(sa.or_(
|
||||
self.column < start,
|
||||
self.column <= stop))
|
||||
|
||||
def filter_greater_than(self, query, value):
|
||||
"""
|
||||
Find all datetimes which fall after the given date.
|
||||
"""
|
||||
date = self.make_date(value)
|
||||
if not date:
|
||||
return query
|
||||
|
||||
time = datetime.datetime.combine(date + datetime.timedelta(days=1), datetime.time(0))
|
||||
time = localtime(self.config, time, tzinfo=False)
|
||||
return query.filter(self.column >= time)
|
||||
|
||||
def filter_greater_equal(self, query, value):
|
||||
"""
|
||||
Find all datetimes which fall on or after the given date.
|
||||
"""
|
||||
date = self.make_date(value)
|
||||
if not date:
|
||||
return query
|
||||
|
||||
time = datetime.datetime.combine(date, datetime.time(0))
|
||||
time = localtime(self.config, time, tzinfo=False)
|
||||
return query.filter(self.column >= time)
|
||||
|
||||
def filter_less_than(self, query, value):
|
||||
"""
|
||||
Find all datetimes which fall before the given date.
|
||||
"""
|
||||
date = self.make_date(value)
|
||||
if not date:
|
||||
return query
|
||||
|
||||
time = datetime.datetime.combine(date, datetime.time(0))
|
||||
time = localtime(self.config, time, tzinfo=False)
|
||||
return query.filter(self.column < time)
|
||||
|
||||
def filter_less_equal(self, query, value):
|
||||
"""
|
||||
Find all datetimes which fall on or before the given date.
|
||||
"""
|
||||
date = self.make_date(value)
|
||||
if not date:
|
||||
return query
|
||||
|
||||
time = datetime.datetime.combine(date + datetime.timedelta(days=1), datetime.time(0))
|
||||
time = localtime(self.config, time, tzinfo=False)
|
||||
return query.filter(self.column < time)
|
||||
|
||||
|
||||
class AlchemyGPCFilter(AlchemyGridFilter):
|
||||
"""
|
||||
GPC filter for SQLAlchemy.
|
||||
|
|
Loading…
Reference in a new issue