mirror of
https://github.com/OpenBankProject/API-Manager.git
synced 2026-02-06 09:26:49 +00:00
64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
from django.conf import settings
|
|
|
|
class BaseFilter(object):
|
|
def __init__(self, context, request_get):
|
|
self.context = context
|
|
self.request_get = request_get
|
|
|
|
def _apply(self, data, filter_value):
|
|
raise AttributeError('Not implemented yet!')
|
|
|
|
def apply(self, data):
|
|
filter_all = 'active_{}_all'.format(self.filter_type)
|
|
self.context[filter_all] = True
|
|
|
|
if not self.filter_type in self.request_get:
|
|
return data
|
|
|
|
filter_value = self.request_get[self.filter_type].lower()
|
|
if not filter_value or filter_value == 'all':
|
|
return data
|
|
|
|
self.context[filter_all] = False
|
|
filter_active = 'active_{}_{}'.format(self.filter_type, filter_value)
|
|
self.context[filter_active] = True
|
|
return self._apply(data, filter_value)
|
|
|
|
|
|
|
|
class FilterTime(BaseFilter):
|
|
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.now()
|
|
filtered = []
|
|
for item in data:
|
|
item_date = datetime.strptime(
|
|
item[self.time_fieldname], settings.API_DATETIMEFORMAT)
|
|
if now - item_date <= delta:
|
|
filtered.append(item)
|
|
return filtered
|