def get(self, request, dataset): dataset = Dataset.objects.filter(slug=dataset).first() request = normalize_get_params(request) # This calls the passed in 'request' method on a Dataset and returns the response try: reqtype = request.GET['request'] if reqtype.lower() == 'getcapabilities': return TemplateResponse(request, 'wms/getcapabilities.xml', dict(gfi_formats=gfi_handler.FORMATS, dataset=dataset, server=Server.objects.first()), content_type='application/xml') else: layer = get_layer_from_request(dataset, request) if not layer: raise ValueError('Could not find a layer named "{}"'.format(request.GET.get('layers'))) if reqtype.lower() == 'getmap': request = enhance_getmap_request(dataset, layer, request) elif reqtype.lower() == 'getlegendgraphic': request = enhance_getlegendgraphic_request(dataset, layer, request) elif reqtype.lower() == 'getfeatureinfo': request = enhance_getfeatureinfo_request(dataset, layer, request) elif reqtype.lower() == 'getmetadata': request = enhance_getmetadata_request(dataset, layer, request) return getattr(dataset, reqtype.lower())(layer, request) except NotImplementedError: logger.exception('Returning a 500:') return HttpResponse('"{}" is not implemented for a {}'.format(reqtype, dataset.__class__.__name__), status=500, reason="Could not process inputs", content_type="application/json") except BaseException as e: logger.exception('Returning a 500:') return HttpResponse(str(e), status=500, reason="Could not process inputs", content_type="application/json")
def getlegendgraphic(self, layer, request): try: if 'filledcontours' in request.GET['image_type']: return glg_handler.filledcontour(request) elif 'contours' in request.GET['image_type']: return glg_handler.contour(request) elif 'vector' in request.GET['image_type']: return glg_handler.vector(request) else: return glg_handler.gradiant(request) except BaseException: logger.exception("Could not process GetLegendGraphic request") raise
def get(self, request, dataset): dataset = Dataset.objects.filter(slug=dataset).first() request = normalize_get_params(request) reqtype = request.GET['request'] # This calls the passed in 'request' method on a Dataset and returns the response try: if reqtype.lower() == 'getcapabilities': return TemplateResponse(request, 'wms/getcapabilities.xml', dict(dataset=dataset, server=Server.objects.first()), content_type='application/xml') else: layer = get_layer_from_request(dataset, request) if not layer: raise ValueError('Could not find a layer named "{}"'.format(request.GET.get('layers'))) if reqtype.lower() == 'getmap': request = enhance_getmap_request(dataset, layer, request) elif reqtype.lower() == 'getlegendgraphic': request = enhance_getlegendgraphic_request(dataset, layer, request) elif reqtype.lower() == 'getfeatureinfo': request = enhance_getfeatureinfo_request(dataset, layer, request) elif reqtype.lower() == 'getmetadata': request = enhance_getmetadata_request(dataset, layer, request) try: response = getattr(dataset, reqtype.lower())(layer, request) except AttributeError as e: logger.exception(e) return HttpResponse(str(e), status=500, reason="Could not process inputs", content_type="application/json") except NotImplementedError as e: return HttpResponse(str(e), status=500, reason="Could not process inputs", content_type="application/json") # Test formats, etc. before returning? return response except (AttributeError, ValueError) as e: logger.exception(str(e)) return HttpResponse(str(e), status=500, reason="Could not process inputs", content_type="application/json") except NotImplementedError as e: logger.exception(str(e)) return HttpResponse('"{}" is not implemented for a {}'.format(reqtype, dataset.__class__.__name__), status=500, reason="Could not process inputs", content_type="application/json")