""" Django Onegeo Core triggers. """ import logging from uuid import uuid4 from django.apps import apps from django.db.models.signals import post_save from django.dispatch import receiver from onegeo_suite.contrib.onegeo_dataset.models import Dataset from onegeo_suite.contrib.onegeo_resource.models import Resource from onegeo_suite.contrib.onegeo_geospatial.models import GeographicLayer from onegeo_suite.contrib.onegeo_geospatial.models import RasterLayer from onegeo_suite.contrib.onegeo_geospatial.models import VectorLayer from onegeo_suite.contrib.onegeo_geospatial.models import UnknownLayer logger = logging.getLogger(__name__) CKAN_ID_KEY = 'ckan_id' @receiver(post_save, sender=Dataset) @receiver(post_save, sender=Resource) def add_extra_kvp(sender, instance, created=None, **kwargs): if created: app_label = sender._meta.app_label model_name = sender._meta.model_name Extra = apps.get_model(app_label=app_label, model_name='Extra') attrs = { model_name: instance, 'key': CKAN_ID_KEY, 'value': uuid4().__str__(), } Extra.objects.create(**attrs) @receiver(post_save, sender=VectorLayer) @receiver(post_save, sender=RasterLayer) @receiver(post_save, sender=UnknownLayer) @receiver(post_save, sender=GeographicLayer) def add_extra_resource_ckan_uuid(sender, instance, created=None, **kwargs): Extra = apps.get_model(app_label='onegeo_geospatial', model_name='Extra') key = f'{CKAN_ID_KEY}_resource_wms' attrs = { 'geographiclayer': instance, 'key': key, 'value': uuid4().__str__(), } if not Extra.objects.filter(geographiclayer=instance, key=key).exists(): Extra.objects.create(**attrs) if instance.raster: key = f'{CKAN_ID_KEY}_resource_wcs' attrs = { 'geographiclayer': instance, 'key': key, 'value': uuid4().__str__(), } if not Extra.objects.filter(geographiclayer=instance, key=key).exists(): Extra.objects.create(**attrs) if instance.vector: key = f'{CKAN_ID_KEY}_resource_wfs' attrs = { 'geographiclayer': instance, 'key': key, 'value': uuid4().__str__(), } if not Extra.objects.filter(geographiclayer=instance, key=key).exists(): Extra.objects.create(**attrs)