From 6f87c0488fc1bf5b39b80d54bd8c3b8e3adff381 Mon Sep 17 00:00:00 2001 From: Rizky Maulana Nugraha Date: Fri, 11 May 2018 17:11:17 +0700 Subject: [PATCH] Add more EQ Feature filters for PDC InAWARE - Add since_last_days filter - Add since_last_hours filter --- .../development/roles/pycharm/tasks/main.yml | 2 +- .../roles/pycharm/vars/2016.3/Ubuntu.yml | 3 -- .../roles/pycharm/vars/2017.1/MacOSX.yml | 3 -- .../roles/pycharm/vars/2017.1/Ubuntu.yml | 3 -- .../roles/pycharm/vars/2017.2/MacOSX.yml | 3 -- .../roles/pycharm/vars/2017.2/Ubuntu.yml | 3 -- .../roles/pycharm/vars/2017.3/MacOSX.yml | 3 -- .../roles/pycharm/vars/2017.3/Ubuntu.yml | 3 -- .../vars/{2016.3 => generic}/MacOSX.yml | 2 +- .../roles/pycharm/vars/generic/Ubuntu.yml | 3 ++ deployment/ansible/development/site.yml | 3 +- .../realtime/filters/earthquake_filter.py | 51 +++++++++++++++++++ django_project/realtime/views/earthquake.py | 4 ++ 13 files changed, 62 insertions(+), 24 deletions(-) delete mode 100644 deployment/ansible/development/roles/pycharm/vars/2016.3/Ubuntu.yml delete mode 100644 deployment/ansible/development/roles/pycharm/vars/2017.1/MacOSX.yml delete mode 100644 deployment/ansible/development/roles/pycharm/vars/2017.1/Ubuntu.yml delete mode 100644 deployment/ansible/development/roles/pycharm/vars/2017.2/MacOSX.yml delete mode 100644 deployment/ansible/development/roles/pycharm/vars/2017.2/Ubuntu.yml delete mode 100644 deployment/ansible/development/roles/pycharm/vars/2017.3/MacOSX.yml delete mode 100644 deployment/ansible/development/roles/pycharm/vars/2017.3/Ubuntu.yml rename deployment/ansible/development/roles/pycharm/vars/{2016.3 => generic}/MacOSX.yml (66%) create mode 100644 deployment/ansible/development/roles/pycharm/vars/generic/Ubuntu.yml diff --git a/deployment/ansible/development/roles/pycharm/tasks/main.yml b/deployment/ansible/development/roles/pycharm/tasks/main.yml index d6fee3fc..e2996266 100644 --- a/deployment/ansible/development/roles/pycharm/tasks/main.yml +++ b/deployment/ansible/development/roles/pycharm/tasks/main.yml @@ -1,7 +1,7 @@ --- - name: gather os specific variables include_vars: - file: "{{ pycharm_version }}/{{ ansible_distribution }}.yml" + file: "generic/{{ ansible_distribution }}.yml" - name: customize /etc/hosts become: yes diff --git a/deployment/ansible/development/roles/pycharm/vars/2016.3/Ubuntu.yml b/deployment/ansible/development/roles/pycharm/vars/2016.3/Ubuntu.yml deleted file mode 100644 index d38189af..00000000 --- a/deployment/ansible/development/roles/pycharm/vars/2016.3/Ubuntu.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- - -pycharm_settings_path: '/home/{{ remote_user }}/.PyCharm2016.3/config' diff --git a/deployment/ansible/development/roles/pycharm/vars/2017.1/MacOSX.yml b/deployment/ansible/development/roles/pycharm/vars/2017.1/MacOSX.yml deleted file mode 100644 index 00eb795f..00000000 --- a/deployment/ansible/development/roles/pycharm/vars/2017.1/MacOSX.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- - -pycharm_settings_path: '/Users/{{ remote_user }}/Library/Preferences/PyCharm2017.1' diff --git a/deployment/ansible/development/roles/pycharm/vars/2017.1/Ubuntu.yml b/deployment/ansible/development/roles/pycharm/vars/2017.1/Ubuntu.yml deleted file mode 100644 index 0a19b0e2..00000000 --- a/deployment/ansible/development/roles/pycharm/vars/2017.1/Ubuntu.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- - -pycharm_settings_path: '/home/{{ remote_user }}/.PyCharm2017.1/config' diff --git a/deployment/ansible/development/roles/pycharm/vars/2017.2/MacOSX.yml b/deployment/ansible/development/roles/pycharm/vars/2017.2/MacOSX.yml deleted file mode 100644 index 3291a05b..00000000 --- a/deployment/ansible/development/roles/pycharm/vars/2017.2/MacOSX.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- - -pycharm_settings_path: '/Users/{{ remote_user }}/Library/Preferences/PyCharm2017.2' diff --git a/deployment/ansible/development/roles/pycharm/vars/2017.2/Ubuntu.yml b/deployment/ansible/development/roles/pycharm/vars/2017.2/Ubuntu.yml deleted file mode 100644 index 2f83e063..00000000 --- a/deployment/ansible/development/roles/pycharm/vars/2017.2/Ubuntu.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- - -pycharm_settings_path: '/home/{{ remote_user }}/.PyCharm2017.2/config' diff --git a/deployment/ansible/development/roles/pycharm/vars/2017.3/MacOSX.yml b/deployment/ansible/development/roles/pycharm/vars/2017.3/MacOSX.yml deleted file mode 100644 index f217167f..00000000 --- a/deployment/ansible/development/roles/pycharm/vars/2017.3/MacOSX.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- - -pycharm_settings_path: '/Users/{{ remote_user }}/Library/Preferences/PyCharm2017.3' diff --git a/deployment/ansible/development/roles/pycharm/vars/2017.3/Ubuntu.yml b/deployment/ansible/development/roles/pycharm/vars/2017.3/Ubuntu.yml deleted file mode 100644 index 5ceb9c1c..00000000 --- a/deployment/ansible/development/roles/pycharm/vars/2017.3/Ubuntu.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- - -pycharm_settings_path: '/home/{{ remote_user }}/.PyCharm2017.3/config' diff --git a/deployment/ansible/development/roles/pycharm/vars/2016.3/MacOSX.yml b/deployment/ansible/development/roles/pycharm/vars/generic/MacOSX.yml similarity index 66% rename from deployment/ansible/development/roles/pycharm/vars/2016.3/MacOSX.yml rename to deployment/ansible/development/roles/pycharm/vars/generic/MacOSX.yml index 49830505..cc07571a 100644 --- a/deployment/ansible/development/roles/pycharm/vars/2016.3/MacOSX.yml +++ b/deployment/ansible/development/roles/pycharm/vars/generic/MacOSX.yml @@ -1,3 +1,3 @@ --- -pycharm_settings_path: '/Users/{{ remote_user }}/Library/Preferences/PyCharm2016.3' +pycharm_settings_path: '/Users/{{ remote_user }}/Library/Preferences/PyCharm{{ pycharm_version }}' diff --git a/deployment/ansible/development/roles/pycharm/vars/generic/Ubuntu.yml b/deployment/ansible/development/roles/pycharm/vars/generic/Ubuntu.yml new file mode 100644 index 00000000..a0c8da28 --- /dev/null +++ b/deployment/ansible/development/roles/pycharm/vars/generic/Ubuntu.yml @@ -0,0 +1,3 @@ +--- + +pycharm_settings_path: '/home/{{ remote_user }}/.PyCharm{{ pycharm_version }}/config' diff --git a/deployment/ansible/development/site.yml b/deployment/ansible/development/site.yml index 3c0827d7..b97b9610 100644 --- a/deployment/ansible/development/site.yml +++ b/deployment/ansible/development/site.yml @@ -16,6 +16,7 @@ 2017.1 2017.2 2017.3 + 2018.1 If not using Pycharm, just skip. - default: '2017.3' + default: '2018.1' private: no diff --git a/django_project/realtime/filters/earthquake_filter.py b/django_project/realtime/filters/earthquake_filter.py index 20433e7c..b0e210f1 100644 --- a/django_project/realtime/filters/earthquake_filter.py +++ b/django_project/realtime/filters/earthquake_filter.py @@ -1,11 +1,54 @@ # coding=utf-8 +import datetime + import django_filters +import pytz +import six +from django_filters.fields import Lookup + from realtime.models.earthquake import Earthquake __author__ = 'Rizky Maulana Nugraha "lucernae" ' __date__ = '23/06/15' +class DateTimeDurationFilter(django_filters.NumberFilter): + """Used to filter DateTime field based on duration.""" + + def filter(self, qs, value): + if isinstance(value, Lookup): + lookup = six.text_type(value.lookup_type) + value = value.value + else: + lookup = self.lookup_type + if value in ([], (), {}, None, ''): + return qs + + # Handle duration values + parsed_name = lookup.split('__') + today = pytz.utc.fromutc(datetime.datetime.utcnow()) + if len(parsed_name) == 2: + duration_field = parsed_name[1] + duration_lookup = parsed_name[0] + if duration_field == 'days': + duration_value = today - datetime.timedelta(days=int(value)) + elif duration_field == 'hours': + duration_value = today - datetime.timedelta(hours=int(value)) + else: + duration_value = today + + qs = self.get_method(qs)( + **{'%s__%s' % (self.name, duration_lookup): duration_value}) + + else: + qs = self.get_method(qs)( + **{'%s__%s' % (self.name, lookup): value}) + + if self.distinct: + qs = qs.distinct() + return qs + + class EarthquakeFilter(django_filters.FilterSet): max_magnitude = django_filters.NumberFilter(name='magnitude', @@ -14,6 +57,13 @@ class EarthquakeFilter(django_filters.FilterSet): lookup_type='gte') max_time = django_filters.DateTimeFilter(name='time', lookup_type='lte') min_time = django_filters.DateTimeFilter(name='time', lookup_type='gte') + + # filter by recent days or hours + since_last_days = DateTimeDurationFilter( + name='time', lookup_type='gte__days') + since_last_hours = DateTimeDurationFilter( + name='time', lookup_type='gte__hours') + max_depth = django_filters.NumberFilter(name='depth', lookup_type='lte') min_depth = django_filters.NumberFilter(name='depth', lookup_type='gte') @@ -32,4 +82,5 @@ class Meta: 'min_time', 'max_depth', 'min_depth', 'maximum_magnitude', 'minimum_magnitude', 'start_date', 'end_date', + 'since_last_days', 'since_last_hours', 'location_description'] diff --git a/django_project/realtime/views/earthquake.py b/django_project/realtime/views/earthquake.py index 94aa1834..a39903f5 100644 --- a/django_project/realtime/views/earthquake.py +++ b/django_project/realtime/views/earthquake.py @@ -104,6 +104,8 @@ class EarthquakeList(mixins.ListModelMixin, mixins.CreateModelMixin, * max_magnitude or maximum_magnitude * min_time or time_start * max_time or time_end + * since_last_days (latest EQ since the last d days) + * since_last_hours (latest EQ since the last h hours) * location_description * in_bbox filled with BBox String in the format SWLon,SWLat,NELon,NELat this is used as geographic box filter @@ -327,6 +329,8 @@ class EarthquakeFeatureList(EarthquakeList): * max_magnitude or maximum_magnitude * min_time or time_start * max_time or time_end + * since_last_days (latest EQ since the last d days) + * since_last_hours (latest EQ since the last h hours) * location_description * felt shakes * in_bbox filled with BBox String in the format SWLon,SWLat,NELon,NELat