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:
Tom Kralidis
2020-09-11 15:19:11 -04:00
committed by GitHub
parent 4d2f229c88
commit 2fb20c59f6
5 changed files with 39 additions and 4 deletions
@@ -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
+3 -4
View File
@@ -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):
+5
View File
@@ -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
+20
View File
@@ -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()
+6
View File
@@ -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)