def _response_callback(**kwargs): content = kwargs['content'] status = kwargs['status'] content_type = kwargs['content_type'] # Replace Proxy URL content_type_list = [ 'application/xml', 'text/xml', 'text/plain', 'application/json', 'text/json' ] try: if re.findall(r"(?=(\b" + '|'.join(content_type_list) + r"\b))", content_type): _gn_proxy_url = urljoin(settings.SITEURL, '/gs/') if isinstance(content, bytes): content = content.decode('UTF-8') content = content\ .replace(ogc_server_settings.LOCATION, _gn_proxy_url)\ .replace(ogc_server_settings.PUBLIC_LOCATION, _gn_proxy_url) except Exception as e: logger.exception(e) if 'affected_layers' in kwargs and kwargs['affected_layers']: for layer in kwargs['affected_layers']: geoserver_post_save_local(layer) return HttpResponse(content=content, status=status, content_type=content_type)
def on_geoserver_messages(self, body, message): # logger.debug("on_geoserver_messages: RECEIVED MSG - body: %r" % (body,)) layer_id = body.get("id") geoserver_post_save_local(layer_id) # Not sure if we need to send ack on this fanout version. message.ack() logger.info("on_geoserver_messages: finished") self._check_message_limit()
def on_geoserver_messages(self, body, message): # logger.debug("on_geoserver_messages: RECEIVED MSG - body: %r" % (body,)) layer_id = body.get("id") geoserver_post_save_local(layer_id) # Not sure if we need to send ack on this fanout version. message.ack() logger.info("on_geoserver_messages: finished") self._check_message_limit()
def _response_callback(**kwargs): status = kwargs.get('status') content = kwargs.get('content') content_type = kwargs.get('content_type') response_headers = kwargs.get('response_headers', None) content_type_list = [ 'application/xml', 'text/xml', 'text/plain', 'application/json', 'text/json' ] if content: if not content_type: if isinstance(content, bytes): content = content.decode('UTF-8') if (re.match(r'^<.+>$', content)): content_type = 'application/xml' elif (re.match(r'^({|[).+(}|])$', content)): content_type = 'application/json' else: content_type = 'text/plain' # Replace Proxy URL try: if isinstance(content, bytes): try: _content = content.decode('UTF-8') except UnicodeDecodeError: _content = content else: _content = content if re.findall(f"(?=(\\b{'|'.join(content_type_list)}\\b))", content_type): _gn_proxy_url = urljoin(settings.SITEURL, '/gs/') content = _content\ .replace(ogc_server_settings.LOCATION, _gn_proxy_url)\ .replace(ogc_server_settings.PUBLIC_LOCATION, _gn_proxy_url) for _ows_endpoint in list( dict.fromkeys( re.findall(rf'{_gn_proxy_url}w\ws', content, re.IGNORECASE))): content = content.replace(_ows_endpoint, f'{_gn_proxy_url}ows') except Exception as e: logger.exception(e) if 'affected_datasets' in kwargs and kwargs['affected_datasets']: for layer in kwargs['affected_datasets']: geoserver_post_save_local(layer) _response = HttpResponse(content=content, status=status, content_type=content_type) return fetch_response_headers(_response, response_headers)
def on_geoserver_messages(self, body, message): # logger.debug("on_geoserver_messages: RECEIVED MSG - body: %r" % (body,)) layer_id = body.get("id") try: layer = _wait_for_layer(layer_id) except Layer.DoesNotExist as err: logger.exception(err) return geoserver_post_save_local(layer) # Not sure if we need to send ack on this fanout version. message.ack() logger.info("on_geoserver_messages: finished") self._check_message_limit()
def on_geoserver_messages(self, body, message): logger.debug("on_geoserver_messages: RECEIVED MSG - body: %r" % (body, )) layer_id = body.get("id") try: layer = _wait_for_layer(layer_id) except Layer.DoesNotExist as err: logger.debug(err) return try: geoserver_post_save_local(layer) except Exception, err: logger.error("Cannot handle geoserver message: %s", err, exc_info=err)
def on_geoserver_messages(self, body, message): logger.debug("on_geoserver_messages: RECEIVED MSG - body: %r" % (body,)) layer_id = body.get("id") try: layer = _wait_for_layer(layer_id) except Layer.DoesNotExist as err: logger.debug(err) return # try: geoserver_post_save_local(layer) # except Exception, err: # logger.error("Cannot handle geoserver message: %s", err, exc_info=err) # Not sure if we need to send ack on this fanout version. message.ack() logger.debug("on_geoserver_messages: finished") self._check_message_limit()
def test_save_and_delete_signals(self): """Test that GeoServer Signals methods work as espected""" layers = Layer.objects.all()[:2].values_list('id', flat=True) test_perm_layer = Layer.objects.get(id=layers[0]) self.client.login(username='******', password='******') if check_ogc_backend(geoserver.BACKEND_PACKAGE): from geonode.geoserver.signals import (geoserver_pre_delete, geoserver_post_save, geoserver_post_save_local) # Handle Layer Save and Upload Signals geoserver_post_save(test_perm_layer, sender=Layer) geoserver_post_save_local(test_perm_layer) # Check instance bbox and links self.assertIsNotNone(test_perm_layer.bbox) self.assertIsNotNone(test_perm_layer.srid) self.assertIsNotNone(test_perm_layer.link_set) self.assertEquals(len(test_perm_layer.link_set.all()), 7) # Layer Manipulation from geonode.geoserver.upload import geoserver_upload from geonode.geoserver.signals import gs_catalog from geonode.geoserver.helpers import ( check_geoserver_is_up, get_sld_for, fixup_style, set_layer_style, get_store, set_attributes_from_geoserver, set_styles, create_gs_thumbnail, cleanup) check_geoserver_is_up() admin_user = get_user_model().objects.get(username="******") saved_layer = geoserver_upload( test_perm_layer, os.path.join(gisdata.VECTOR_DATA, "san_andres_y_providencia_poi.shp"), admin_user, test_perm_layer.name, overwrite=True) self.assertIsNotNone(saved_layer) _log(saved_layer) workspace, name = test_perm_layer.alternate.split(':') self.assertIsNotNone(workspace) self.assertIsNotNone(name) ws = gs_catalog.get_workspace(workspace) self.assertIsNotNone(ws) store = get_store(gs_catalog, name, workspace=ws) _log("1. ------------ %s " % store) self.assertIsNotNone(store) # Save layer attributes set_attributes_from_geoserver(test_perm_layer) # Save layer styles set_styles(test_perm_layer, gs_catalog) # set SLD sld = test_perm_layer.default_style.sld_body if test_perm_layer.default_style else None if sld: _log("2. ------------ %s " % sld) set_layer_style(test_perm_layer, test_perm_layer.alternate, sld) fixup_style(gs_catalog, test_perm_layer.alternate, None) self.assertIsNone(get_sld_for(gs_catalog, test_perm_layer)) _log("3. ------------ %s " % get_sld_for(gs_catalog, test_perm_layer)) create_gs_thumbnail(test_perm_layer, overwrite=True) self.assertIsNotNone(test_perm_layer.get_thumbnail_url()) self.assertTrue(test_perm_layer.has_thumbnail()) # Handle Layer Delete Signals geoserver_pre_delete(test_perm_layer, sender=Layer) # Check instance has been removed from GeoServer also from geonode.geoserver.views import get_layer_capabilities self.assertIsNone(get_layer_capabilities(test_perm_layer)) # Cleaning Up test_perm_layer.delete() cleanup(test_perm_layer.name, test_perm_layer.uuid)
def test_save_and_delete_signals(self): """Test that GeoServer Signals methods work as espected""" layers = Layer.objects.all()[:2].values_list('id', flat=True) test_perm_layer = Layer.objects.get(id=layers[0]) self.client.login(username='******', password='******') if check_ogc_backend(geoserver.BACKEND_PACKAGE): from geonode.geoserver.signals import (geoserver_pre_delete, geoserver_post_save, geoserver_post_save_local) # Handle Layer Save and Upload Signals geoserver_post_save(test_perm_layer, sender=Layer) geoserver_post_save_local(test_perm_layer) # Check instance bbox and links self.assertIsNotNone(test_perm_layer.bbox) self.assertIsNotNone(test_perm_layer.srid) self.assertIsNotNone(test_perm_layer.link_set) self.assertEquals(len(test_perm_layer.link_set.all()), 9) # Layer Manipulation from geonode.geoserver.upload import geoserver_upload from geonode.geoserver.signals import gs_catalog from geonode.geoserver.helpers import (check_geoserver_is_up, get_sld_for, fixup_style, set_layer_style, get_store, set_attributes_from_geoserver, set_styles, create_gs_thumbnail, cleanup) check_geoserver_is_up() admin_user = get_user_model().objects.get(username="******") saved_layer = geoserver_upload( test_perm_layer, os.path.join( gisdata.VECTOR_DATA, "san_andres_y_providencia_poi.shp"), admin_user, test_perm_layer.name, overwrite=True ) self.assertIsNotNone(saved_layer) _log(saved_layer) workspace, name = test_perm_layer.alternate.split(':') self.assertIsNotNone(workspace) self.assertIsNotNone(name) ws = gs_catalog.get_workspace(workspace) self.assertIsNotNone(ws) store = get_store(gs_catalog, name, workspace=ws) _log("1. ------------ %s " % store) self.assertIsNotNone(store) # Save layer attributes set_attributes_from_geoserver(test_perm_layer) # Save layer styles set_styles(test_perm_layer, gs_catalog) # set SLD sld = test_perm_layer.default_style.sld_body if test_perm_layer.default_style else None if sld: _log("2. ------------ %s " % sld) set_layer_style(test_perm_layer, test_perm_layer.alternate, sld) fixup_style(gs_catalog, test_perm_layer.alternate, None) self.assertIsNone(get_sld_for(gs_catalog, test_perm_layer)) _log("3. ------------ %s " % get_sld_for(gs_catalog, test_perm_layer)) create_gs_thumbnail(test_perm_layer, overwrite=True) self.assertIsNotNone(test_perm_layer.get_thumbnail_url()) self.assertTrue(test_perm_layer.has_thumbnail()) # Handle Layer Delete Signals geoserver_pre_delete(test_perm_layer, sender=Layer) # Check instance has been removed from GeoServer also from geonode.geoserver.views import get_layer_capabilities self.assertIsNone(get_layer_capabilities(test_perm_layer)) # Cleaning Up test_perm_layer.delete() cleanup(test_perm_layer.name, test_perm_layer.uuid)