mirror of
https://github.com/OpenBankProject/API-Manager.git
synced 2026-02-06 10:59:00 +00:00
84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Base filters
|
|
"""
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
from django.conf import settings
|
|
|
|
|
|
class BaseFilter(object):
|
|
"""Base for custom filter classes"""
|
|
filter_type = None
|
|
|
|
def __init__(self, context, request_get):
|
|
self.context = context
|
|
self.request_get = request_get
|
|
|
|
def _apply(self, data, filter_value):
|
|
"""
|
|
Actual application of filter
|
|
Needs to be implemented by child class!
|
|
"""
|
|
raise AttributeError('Not implemented yet!')
|
|
|
|
def apply(self, data):
|
|
"""
|
|
Apply filter to given data
|
|
Also setup of context variables for templates
|
|
"""
|
|
filter_all = 'active_{}_all'.format(self.filter_type)
|
|
self.context[filter_all] = True
|
|
filter_active_value = 'active_{}'.format(self.filter_type)
|
|
self.context[filter_active_value] = 'All'
|
|
|
|
if self.filter_type not in self.request_get:
|
|
return data
|
|
|
|
filter_value = self.request_get[self.filter_type]
|
|
if not filter_value or filter_value == 'All':
|
|
return data
|
|
|
|
self.context[filter_all] = False
|
|
self.context[filter_active_value] = filter_value
|
|
filter_active = 'active_{}_{}'.format(self.filter_type, filter_value)
|
|
self.context[filter_active] = True
|
|
return self._apply(data, filter_value)
|
|
|
|
|
|
class FilterTime(BaseFilter):
|
|
"""Filter items by datetime"""
|
|
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
|
|
|
|
now = datetime.utcnow()
|
|
filtered = []
|
|
print("FILTERED")
|
|
print(filtered)
|
|
for item in data:
|
|
item_date = datetime.strptime(
|
|
item[self.time_fieldname], settings.API_DATE_FORMAT_WITH_SECONDS )
|
|
if now - item_date <= delta:
|
|
filtered.append(item)
|
|
return filtered
|