2016-11-09 13:54:47 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
2016-11-21 13:55:35 +00:00
|
|
|
"""
|
|
|
|
|
Base filters
|
|
|
|
|
"""
|
2016-11-09 13:54:47 +00:00
|
|
|
|
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
|
|
|
|
|
|
from django.conf import settings
|
|
|
|
|
|
2016-11-21 13:55:35 +00:00
|
|
|
|
2016-11-09 13:54:47 +00:00
|
|
|
class BaseFilter(object):
|
2016-11-21 13:55:35 +00:00
|
|
|
"""Base for custom filter classes"""
|
|
|
|
|
filter_type = None
|
|
|
|
|
|
2016-11-09 13:54:47 +00:00
|
|
|
def __init__(self, context, request_get):
|
|
|
|
|
self.context = context
|
|
|
|
|
self.request_get = request_get
|
|
|
|
|
|
|
|
|
|
def _apply(self, data, filter_value):
|
2016-11-21 13:55:35 +00:00
|
|
|
"""
|
|
|
|
|
Actual application of filter
|
|
|
|
|
Needs to be implemented by child class!
|
|
|
|
|
"""
|
2016-11-09 13:54:47 +00:00
|
|
|
raise AttributeError('Not implemented yet!')
|
|
|
|
|
|
|
|
|
|
def apply(self, data):
|
2016-11-21 13:55:35 +00:00
|
|
|
"""
|
|
|
|
|
Apply filter to given data
|
|
|
|
|
Also setup of context variables for templates
|
|
|
|
|
"""
|
2016-11-09 13:54:47 +00:00
|
|
|
filter_all = 'active_{}_all'.format(self.filter_type)
|
|
|
|
|
self.context[filter_all] = True
|
2016-11-19 11:18:59 +00:00
|
|
|
filter_active_value = 'active_{}'.format(self.filter_type)
|
|
|
|
|
self.context[filter_active_value] = 'All'
|
2016-11-09 13:54:47 +00:00
|
|
|
|
2017-11-09 11:26:55 +00:00
|
|
|
if self.filter_type not in self.request_get:
|
2016-11-09 13:54:47 +00:00
|
|
|
return data
|
|
|
|
|
|
2016-11-19 11:18:59 +00:00
|
|
|
filter_value = self.request_get[self.filter_type]
|
|
|
|
|
if not filter_value or filter_value == 'All':
|
2016-11-09 13:54:47 +00:00
|
|
|
return data
|
|
|
|
|
|
|
|
|
|
self.context[filter_all] = False
|
2016-11-19 11:18:59 +00:00
|
|
|
self.context[filter_active_value] = filter_value
|
2016-11-09 13:54:47 +00:00
|
|
|
filter_active = 'active_{}_{}'.format(self.filter_type, filter_value)
|
|
|
|
|
self.context[filter_active] = True
|
|
|
|
|
return self._apply(data, filter_value)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FilterTime(BaseFilter):
|
2016-11-21 13:55:35 +00:00
|
|
|
"""Filter items by datetime"""
|
2016-11-09 13:54:47 +00:00
|
|
|
filter_type = 'time'
|
|
|
|
|
|
|
|
|
|
def __init__(self, context, request_get, time_fieldname):
|
|
|
|
|
super().__init__(context, request_get)
|
|
|
|
|
self.time_fieldname = time_fieldname
|
|
|
|
|
|
|
|
|
|
def _apply(self, data, filter_value):
|
|
|
|
|
if filter_value == 'minute':
|
|
|
|
|
delta = timedelta(minutes=1)
|
|
|
|
|
elif filter_value == 'hour':
|
|
|
|
|
delta = timedelta(hours=1)
|
|
|
|
|
elif filter_value == 'day':
|
|
|
|
|
delta = timedelta(days=1)
|
|
|
|
|
elif filter_value == 'week':
|
|
|
|
|
delta = timedelta(days=7)
|
|
|
|
|
elif filter_value == 'month':
|
|
|
|
|
delta = timedelta(days=30)
|
|
|
|
|
elif filter_value == 'year':
|
|
|
|
|
delta = timedelta(days=365)
|
|
|
|
|
else:
|
|
|
|
|
return data
|
|
|
|
|
|
2018-01-23 22:31:51 +00:00
|
|
|
now = datetime.utcnow()
|
2016-11-09 13:54:47 +00:00
|
|
|
filtered = []
|
2018-07-19 14:45:10 +00:00
|
|
|
print("FILTERED")
|
|
|
|
|
print(filtered)
|
2016-11-09 13:54:47 +00:00
|
|
|
for item in data:
|
|
|
|
|
item_date = datetime.strptime(
|
2023-03-26 21:50:07 +00:00
|
|
|
item[self.time_fieldname], settings.API_DATE_FORMAT_WITH_SECONDS )
|
2016-11-09 13:54:47 +00:00
|
|
|
if now - item_date <= delta:
|
|
|
|
|
filtered.append(item)
|
|
|
|
|
return filtered
|