예제 #1
0
파일: models.py 프로젝트: GeoNode/geonode
def pre_delete_layer(instance, sender, **kwargs):
    """
    Remove any associated style to the layer, if it is not used by other layers.
    Default style will be deleted in post_delete_layer
    """
    if instance.remote_service is not None and instance.remote_service.method == INDEXED:
        # we need to delete the maplayers here because in the post save layer.remote_service is not available anymore
        # REFACTOR
        from geonode.maps.models import MapLayer
        logger.debug(
            "Going to delete associated maplayers for [%s]",
            instance.alternate.encode('utf-8'))
        MapLayer.objects.filter(
            name=instance.alternate,
            ows_url=instance.ows_url).delete()
        return

    logger.debug(
        "Going to delete the styles associated for [%s]",
        instance.alternate.encode('utf-8'))
    ct = ContentType.objects.get_for_model(instance)
    OverallRating.objects.filter(
        content_type=ct,
        object_id=instance.id).delete()

    default_style = instance.default_style
    for style in instance.styles.all():
        if style.layer_styles.all().count() == 1:
            if style != default_style:
                style.delete()

    # Delete object permissions
    remove_object_permissions(instance)
예제 #2
0
def pre_delete_layer(instance, sender, **kwargs):
    """
    Remove any associated style to the layer, if it is not used by other layers.
    Default style will be deleted in post_delete_layer
    """
    if instance.remote_service is not None and instance.remote_service.method == INDEXED:
        # we need to delete the maplayers here because in the post save layer.remote_service is not available anymore
        # REFACTOR
        from geonode.maps.models import MapLayer
        logger.debug("Going to delete associated maplayers for [%s]",
                     instance.alternate.encode('utf-8'))
        MapLayer.objects.filter(name=instance.alternate,
                                ows_url=instance.ows_url).delete()
        return

    logger.debug("Going to delete the styles associated for [%s]",
                 instance.alternate.encode('utf-8'))
    ct = ContentType.objects.get_for_model(instance)
    OverallRating.objects.filter(content_type=ct,
                                 object_id=instance.id).delete()
    default_style = instance.default_style
    for style in instance.styles.all():
        if style.layer_styles.all().count() == 1:
            if style != default_style:
                style.delete()

    # Delete object permissions
    remove_object_permissions(instance)
예제 #3
0
def post_save_service(instance, sender, **kwargs):
    """Get information from catalogue"""
    resources = ResourceBase.objects.filter(id=instance.resourcebase_ptr.id)
    LOGGER.warn(f'*** POST SAVING SERVICE "{instance.uuid}"')
    if resources.exists():
        # Update the Catalog
        try:
            catalogue = get_catalogue()
            catalogue.create_record(instance)
            record = catalogue.get_record(instance.uuid)
        except EnvironmentError as err:
            if err.errno == errno.ECONNREFUSED:
                LOGGER.warning(
                    f'Could not connect to catalogue to save information for layer "{instance.name}"',
                    err)
                return
            else:
                raise err

        if not record:
            LOGGER.exception(
                f'Metadata record for service {instance.title} does not exist, check the catalogue signals.'
            )
            return

        # generate an XML document
        if instance.metadata_uploaded and instance.metadata_uploaded_preserve:
            md_doc = etree.tostring(dlxml.fromstring(instance.metadata_xml))
        else:
            LOGGER.info(f'Rebuilding metadata document for "{instance.uuid}"')
            template = getattr(settings, 'CATALOG_SERVICE_METADATA_TEMPLATE',
                               'xml/service-template.xml')
            md_doc = create_metadata_document(instance, template)

        try:
            csw_anytext = catalogue.catalogue.csw_gen_anytext(md_doc)
        except Exception as e:
            LOGGER.exception(e)
            csw_anytext = ''

        for r in resources:
            if instance.is_published:
                anonymous_group = Group.objects.get(name='anonymous')
                assign_perm('view_resourcebase', anonymous_group, r)
            else:
                remove_object_permissions(r)

        resources.update(metadata_xml=md_doc, csw_anytext=csw_anytext)
    else:
        LOGGER.warn(
            f'*** The resource selected does not exists or or more than one is selected "{instance.uuid}"'
        )
예제 #4
0
def pre_delete_layer(instance, sender, **kwargs):
    """
    Remove any associated style to the layer, if it is not used by other layers.
    Default style will be deleted in post_delete_layer
    """
    if instance.remote_service is not None and instance.remote_service.method == INDEXED:
        # we need to delete the maplayers here because in the post save layer.remote_service is not available anymore
        # REFACTOR
        from geonode.maps.models import MapLayer
        logger.debug(
            "Going to delete associated maplayers for [%s]",
            instance.alternate)
        MapLayer.objects.filter(
            name=instance.alternate,
            ows_url=instance.ows_url).delete()
        return

    logger.debug(
        "Going to delete the styles associated for [%s]",
        instance.alternate)
    ct = ContentType.objects.get_for_model(instance)
    OverallRating.objects.filter(
        content_type=ct,
        object_id=instance.id).delete()

    default_style = instance.default_style
    for style in instance.styles.all():
        if style.layer_styles.all().count() == 1:
            if style != default_style:
                style.delete()

    if 'geonode.upload' in settings.INSTALLED_APPS and \
            settings.UPLOADER['BACKEND'] == 'geonode.importer':
        from geonode.upload.models import Upload
        # Need to call delete one by one in ordee to invoke the
        #  'delete' overridden method
        for upload in Upload.objects.filter(layer_id=instance.id):
            upload.delete()

    # Delete object permissions
    remove_object_permissions(instance)
예제 #5
0
파일: models.py 프로젝트: alunix/geonode
def pre_delete_document(instance, sender, **kwargs):
    remove_object_permissions(instance.get_self_resource())
예제 #6
0
파일: models.py 프로젝트: sud0su/cacip-dev
def pre_delete_map(instance, sender, **kwrargs):
    ct = ContentType.objects.get_for_model(instance)
    OverallRating.objects.filter(content_type=ct,
                                 object_id=instance.id).delete()
    remove_object_permissions(instance.get_self_resource())
예제 #7
0
파일: models.py 프로젝트: kalxas/geonode
def pre_delete_map(instance, sender, **kwrargs):
    ct = ContentType.objects.get_for_model(instance)
    OverallRating.objects.filter(
        content_type=ct,
        object_id=instance.id).delete()
    remove_object_permissions(instance.get_self_resource())
예제 #8
0
def pre_delete_service(instance, sender, **kwargs):
    remove_object_permissions(instance)
예제 #9
0
파일: models.py 프로젝트: GeoNode/geonode
def pre_delete_document(instance, sender, **kwargs):
    remove_object_permissions(instance.get_self_resource())