From 8ce84e1012e80c83dfeb5e77f6149c408eadc448 Mon Sep 17 00:00:00 2001 From: "Chris J. Karr" Date: Sat, 29 Apr 2017 21:46:05 +0000 Subject: [PATCH] Extract secondary identifier extraction to reflective mechanism. * Start process_bundles job after export. --- generators/__init__.py | 0 generators/pdk_app_event.py | 6 ++++++ generators/pdk_withings_device.py | 6 ++++++ models.py | 21 ++++++++++++++++----- views.py | 5 +++++ 5 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 generators/__init__.py create mode 100644 generators/pdk_app_event.py create mode 100644 generators/pdk_withings_device.py diff --git a/generators/__init__.py b/generators/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/generators/pdk_app_event.py b/generators/pdk_app_event.py new file mode 100644 index 0000000..15afe18 --- /dev/null +++ b/generators/pdk_app_event.py @@ -0,0 +1,6 @@ + +def extract_secondary_identifier(properties): + if 'event_name' in properties: + return properties['event_name'] + + return None diff --git a/generators/pdk_withings_device.py b/generators/pdk_withings_device.py new file mode 100644 index 0000000..447184f --- /dev/null +++ b/generators/pdk_withings_device.py @@ -0,0 +1,6 @@ + +def extract_secondary_identifier(properties): + if 'datastream' in properties: + return properties['datastream'] + + return None diff --git a/models.py b/models.py index ee33fd0..f568e01 100644 --- a/models.py +++ b/models.py @@ -12,6 +12,7 @@ from django.db import connection from django.db.models.signals import post_delete from django.dispatch.dispatcher import receiver +from django.utils.text import slugify def generator_label(identifier): for app in settings.INSTALLED_APPS: @@ -29,6 +30,8 @@ def generator_label(identifier): return identifier +def generator_slugify(str_obj): + return slugify(str_obj.replace('.', ' ')).replace('-', '_') def install_supports_jsonfield(): return connection.pg_version >= 90400 @@ -54,13 +57,21 @@ def fetch_secondary_identifier(self): if self.secondary_identifier is not None: return self.secondary_identifier else: - if self.generator_identifier == 'pdk-app-event': - props = self.fetch_properties() + for app in settings.INSTALLED_APPS: + generator_name = generator_slugify(self.generator_identifier) - self.secondary_identifier = props['event_name'] - self.save() + try: + generator = importlib.import_module(app + '.generators.' + generator_name) - return self.secondary_identifier + identifier = generator.extract_secondary_identifier(self.fetch_properties()) + + if identifier is not None: + self.secondary_identifier = identifier + self.save() + + return self.secondary_identifier + except ImportError: + pass return None diff --git a/views.py b/views.py index 8638558..22e05a0 100644 --- a/views.py +++ b/views.py @@ -6,6 +6,7 @@ import os from django.conf import settings +from django.core.management import call_command from django.http import HttpResponse, HttpResponseNotAllowed, JsonResponse, HttpResponseNotFound, \ FileResponse from django.shortcuts import render_to_response @@ -106,6 +107,8 @@ def add_data_bundle(request): bundle.save() + call_command('process_bundles') + return response elif request.method == 'POST': response = HttpResponse(json.dumps(response, indent=2), \ @@ -141,6 +144,8 @@ def add_data_bundle(request): data_file.content_file.save(value.name, value) data_file.save() + call_command('process_bundles') + return response elif request.method == 'OPTIONS': response = HttpResponse('', content_type='text/plain', status=200)