Skip to content
Snippets Groups Projects
triggers.py 2.34 KiB
Newer Older
m431m's avatar
m431m committed
"""
Django Onegeo Core triggers.
m431m's avatar
m431m committed

"""


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
m431m's avatar
m431m committed
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
m431m's avatar
m431m committed


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)
m431m's avatar
m431m committed


@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)