fix coverage query with no parameters (#528)
* fix file dump, update docs * fix file dump, update docs * fix file dump, update docs * support data read by file or network
This commit is contained in:
@@ -45,6 +45,10 @@ capable of handling.
|
||||
name: GRIB
|
||||
mimetype: application/x-grib2
|
||||
|
||||
.. note::
|
||||
The rasterio provider ``format.name`` directive **requires** a valid
|
||||
`GDAL raster driver short name`_.
|
||||
|
||||
xarray
|
||||
^^^^^^^^
|
||||
|
||||
@@ -89,3 +93,4 @@ Data access examples
|
||||
.. _`rasterio`: https://rasterio.readthedocs.io
|
||||
.. _`xarray`: https://xarray.pydata.org
|
||||
.. _`NetCDF`: https://en.wikipedia.org/wiki/NetCDF
|
||||
.. _`GDAL raster driver short name`: https://gdal.org/drivers/raster/index.html
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
#
|
||||
# =================================================================
|
||||
|
||||
import io
|
||||
import logging
|
||||
|
||||
import rasterio
|
||||
@@ -36,6 +35,7 @@ import rasterio.mask
|
||||
|
||||
from pygeoapi.provider.base import (BaseProvider, ProviderConnectionError,
|
||||
ProviderQueryError)
|
||||
from pygeoapi.util import read_data
|
||||
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
@@ -178,9 +178,8 @@ class RasterioProvider(BaseProvider):
|
||||
shapes = []
|
||||
|
||||
if not bands and not subsets and format_ != 'json':
|
||||
LOGGER.debug('No parameters specified, returning native file')
|
||||
with io.open(self.data, 'rb') as fh:
|
||||
return fh.read()
|
||||
LOGGER.debug('No parameters specified, returning native data')
|
||||
return read_data(self.data)
|
||||
|
||||
if (self._coverage_properties['x_axis_label'] in subsets and
|
||||
self._coverage_properties['y_axis_label'] in subsets):
|
||||
|
||||
@@ -37,6 +37,7 @@ from pygeoapi.provider.base import (BaseProvider,
|
||||
ProviderConnectionError,
|
||||
ProviderNoDataError,
|
||||
ProviderQueryError)
|
||||
from pygeoapi.util import read_data
|
||||
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
@@ -183,6 +184,10 @@ class XarrayProvider(BaseProvider):
|
||||
:returns: coverage data as dict of CoverageJSON or native format
|
||||
"""
|
||||
|
||||
if not range_subset and not subsets and format_ != 'json':
|
||||
LOGGER.debug('No parameters specified, returning native data')
|
||||
return read_data(self.data)
|
||||
|
||||
if len(range_subset) < 1:
|
||||
range_subset = self.fields
|
||||
|
||||
|
||||
@@ -32,11 +32,13 @@
|
||||
import base64
|
||||
from datetime import date, datetime, time
|
||||
from decimal import Decimal
|
||||
import io
|
||||
import json
|
||||
import logging
|
||||
import mimetypes
|
||||
import os
|
||||
import re
|
||||
from urllib.request import urlopen
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
@@ -335,3 +337,21 @@ def get_provider_default(providers):
|
||||
|
||||
LOGGER.debug('Default provider: {}'.format(default['type']))
|
||||
return default
|
||||
|
||||
|
||||
def read_data(path):
|
||||
"""
|
||||
helper function to read data (file or networrk)
|
||||
"""
|
||||
|
||||
LOGGER.debug('Attempting to read {}'.format(path))
|
||||
scheme = urlparse(path).scheme
|
||||
|
||||
if scheme in ['', 'file']:
|
||||
LOGGER.debug('local file on disk')
|
||||
with io.open(path, 'rb') as fh:
|
||||
return fh.read()
|
||||
else:
|
||||
LOGGER.debug('network file')
|
||||
with urlopen(path) as r:
|
||||
return r.read()
|
||||
|
||||
@@ -158,3 +158,9 @@ def test_get_provider_default():
|
||||
assert pd['name'] == 'CSV'
|
||||
|
||||
pd = util.get_provider_default(d['resources']['obs']['providers'])
|
||||
|
||||
|
||||
def test_read_data():
|
||||
data = util.read_data(get_test_file_path('pygeoapi-test-config.yml'))
|
||||
|
||||
assert isinstance(data, bytes)
|
||||
|
||||
Reference in New Issue
Block a user