From ae48ac700804bca6fc954da572f1c8aadeb73447 Mon Sep 17 00:00:00 2001 From: Alfredos-Panagiotis Damkalis Date: Tue, 22 Sep 2020 09:22:18 +0300 Subject: [PATCH] Move app's signals and methods to seperate file Signed-off-by: Alfredos-Panagiotis Damkalis --- db/base/__init__.py | 2 ++ db/base/apps.py | 11 +++++++++++ db/base/models.py | 40 --------------------------------------- db/base/signals.py | 46 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 40 deletions(-) create mode 100644 db/base/apps.py create mode 100644 db/base/signals.py diff --git a/db/base/__init__.py b/db/base/__init__.py index e69de29..d143722 100644 --- a/db/base/__init__.py +++ b/db/base/__init__.py @@ -0,0 +1,2 @@ +"""SatNOGS DB Base app initialization""" +default_app_config = 'db.base.apps.BaseConfig' # pylint: disable=C0103 diff --git a/db/base/apps.py b/db/base/apps.py new file mode 100644 index 0000000..a492528 --- /dev/null +++ b/db/base/apps.py @@ -0,0 +1,11 @@ +"""SatNOGS DB Base app config""" +from django.apps import AppConfig + + +class BaseConfig(AppConfig): + """Set configuration of the SatNOGS DB Base app""" + name = 'db.base' + verbose_name = "Base" + + def ready(self): + from db.base import signals # noqa: F401; pylint: disable=C0415,W0611 diff --git a/db/base/models.py b/db/base/models.py index ebbebd0..1ffe5f9 100644 --- a/db/base/models.py +++ b/db/base/models.py @@ -3,7 +3,6 @@ import logging from os import path from uuid import uuid4 -import h5py import satnogsdecoders from django.conf import settings from django.contrib.auth import get_user_model @@ -13,14 +12,11 @@ from django.core.validators import MaxLengthValidator, MaxValueValidator, \ MinLengthValidator, MinValueValidator, URLValidator from django.db import models from django.db.models import OuterRef, Subquery -from django.db.models.signals import post_save, pre_save from django.utils.timezone import now from django_countries.fields import CountryField from markdown import markdown from shortuuidfield import ShortUUIDField -from db.base.helpers import gridsquare - LOGGER = logging.getLogger('db') DATA_SOURCES = ['manual', 'network', 'sids'] @@ -62,35 +58,6 @@ def _name_payload_frame(instance, filename): # pylint: disable=W0613 return path.join(folder, filename) -def _gen_observer(sender, instance, created, **kwargs): # pylint: disable=W0613 - post_save.disconnect(_gen_observer, sender=DemodData) - try: - qth = gridsquare(instance.lat, instance.lng) - except Exception: # pylint: disable=W0703 - instance.observer = 'Unknown' - else: - instance.observer = '{0}-{1}'.format(instance.station, qth) - instance.save() - post_save.connect(_gen_observer, sender=DemodData) - - -def _set_is_decoded(sender, instance, **kwargs): # pylint: disable=W0613 - """Returns true if payload_decoded has data""" - instance.is_decoded = instance.payload_decoded != '' - - -def _extract_network_obs_id(sender, instance, created, **kwargs): # pylint: disable=W0613 - post_save.disconnect(_extract_network_obs_id, sender=Artifact) - try: - with h5py.File(instance.artifact_file, 'r') as h5_file: - instance.network_obs_id = h5_file.attrs["observation_id"] - except OSError as error: - LOGGER.warning(error) - - instance.save() - post_save.connect(_extract_network_obs_id, sender=Artifact) - - class Mode(models.Model): """A satellite transmitter RF mode. For example: FM""" name = models.CharField(max_length=25, unique=True) @@ -666,10 +633,6 @@ class DemodData(models.Model): return None -post_save.connect(_gen_observer, sender=DemodData) -pre_save.connect(_set_is_decoded, sender=DemodData) - - class ExportedFrameset(models.Model): """Model for exported frames.""" created = models.DateTimeField(auto_now_add=True) @@ -689,6 +652,3 @@ class Artifact(models.Model): def __str__(self): return 'artifact-{0}'.format(self.id) - - -post_save.connect(_extract_network_obs_id, sender=Artifact) diff --git a/db/base/signals.py b/db/base/signals.py new file mode 100644 index 0000000..dd05b04 --- /dev/null +++ b/db/base/signals.py @@ -0,0 +1,46 @@ +"""Django signals for SatNOGS DB""" +import logging + +import h5py +from django.db.models.signals import post_save, pre_save + +from db.base.helpers import gridsquare +from db.base.models import Artifact, DemodData + +LOGGER = logging.getLogger('db') + + +def _gen_observer(sender, instance, created, **kwargs): # pylint: disable=W0613 + post_save.disconnect(_gen_observer, sender=DemodData) + try: + qth = gridsquare(instance.lat, instance.lng) + except Exception: # pylint: disable=W0703 + instance.observer = 'Unknown' + else: + instance.observer = '{0}-{1}'.format(instance.station, qth) + instance.save() + post_save.connect(_gen_observer, sender=DemodData) + + +def _set_is_decoded(sender, instance, **kwargs): # pylint: disable=W0613 + """Returns true if payload_decoded has data""" + instance.is_decoded = instance.payload_decoded != '' + + +def _extract_network_obs_id(sender, instance, created, **kwargs): # pylint: disable=W0613 + post_save.disconnect(_extract_network_obs_id, sender=Artifact) + try: + with h5py.File(instance.artifact_file, 'r') as h5_file: + instance.network_obs_id = h5_file.attrs["observation_id"] + except OSError as error: + LOGGER.warning(error) + + instance.save() + post_save.connect(_extract_network_obs_id, sender=Artifact) + + +pre_save.connect(_set_is_decoded, sender=DemodData) + +post_save.connect(_gen_observer, sender=DemodData) + +post_save.connect(_extract_network_obs_id, sender=Artifact)