Skip to content

Commit fe877d1

Browse files
RousseauLambertLPLouis-Philippe Rousseau Lambert
and
Louis-Philippe Rousseau Lambert
authored
update to time resolution and rmv unused code (#390)
flake8 fix Co-authored-by: Louis-Philippe Rousseau Lambert <[email protected]>
1 parent 3ecea66 commit fe877d1

File tree

4 files changed

+84
-99
lines changed

4 files changed

+84
-99
lines changed

msc_pygeoapi/provider/candcsu6_xarray.py

+12-21
Original file line numberDiff line numberDiff line change
@@ -208,9 +208,7 @@ def query(self, properties=[], subsets={},
208208

209209
data = self._data[[*properties_]]
210210

211-
if any([self._coverage_properties['x_axis_label'] in subsets,
212-
self._coverage_properties['y_axis_label'] in subsets,
213-
self._coverage_properties['time_axis_label'] in subsets,
211+
if any([self._coverage_properties['time_axis_label'] in subsets,
214212
bbox,
215213
datetime_ is not None]):
216214

@@ -225,27 +223,20 @@ def query(self, properties=[], subsets={},
225223
query_params[key] = slice(val[0], val[1])
226224

227225
if bbox:
228-
if all([self._coverage_properties['x_axis_label'] in subsets,
229-
self._coverage_properties['y_axis_label'] in subsets,
230-
len(bbox) > 0]):
231-
msg = 'bbox and subsetting by coordinates are exclusive'
232-
LOGGER.warning(msg)
233-
raise ProviderQueryError(msg)
234-
else:
235-
query_params[self._coverage_properties['x_axis_label']] = \
236-
slice(bbox[0], bbox[2])
226+
query_params[self._coverage_properties['x_axis_label']] = \
227+
slice(bbox[0], bbox[2])
237228

238-
self._coverage_properties['time_axis_label']
229+
self._coverage_properties['time_axis_label']
239230

240-
lat = self._data.coords[self.y_field]
241-
lat_field = self._coverage_properties['y_axis_label']
231+
lat = self._data.coords[self.y_field]
232+
lat_field = self._coverage_properties['y_axis_label']
242233

243-
if lat.values[1] > lat.values[0]:
244-
query_params[lat_field] = \
245-
slice(bbox[1], bbox[3])
246-
else:
247-
query_params[lat_field] = \
248-
slice(bbox[3], bbox[1])
234+
if lat.values[1] > lat.values[0]:
235+
query_params[lat_field] = \
236+
slice(bbox[1], bbox[3])
237+
else:
238+
query_params[lat_field] = \
239+
slice(bbox[3], bbox[1])
249240

250241
if datetime_ is not None:
251242
if 'avg_30years' in self.data:

msc_pygeoapi/provider/cangrd_rasterio.py

+52-42
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
from pygeoapi.provider.base import (ProviderConnectionError,
4545
ProviderQueryError)
4646

47-
from pygeoapi.provider.rasterio_ import (RasterioProvider)
47+
from pygeoapi.provider.rasterio_ import RasterioProvider
4848

4949
LOGGER = logging.getLogger(__name__)
5050

@@ -101,33 +101,30 @@ def get_fields(self):
101101
:returns: CIS JSON object of rangetype metadata
102102
"""
103103

104-
# parameter = _get_parameter_metadata(
105-
# self._data.profile['driver'], self._data.tags(i))
106-
107-
var_dict = {'TMEAN': {'units': '[C]',
108-
'name': 'Mean temperature [C]',
109-
'id': 'tmean'},
110-
'TMAX': {'units': '[C]',
111-
'name': 'Maximum temperature [C]',
112-
'id': 'tmax'},
113-
'TMIN': {'units': '[C]',
114-
'name': 'Minimum temperature [C]',
115-
'id': 'tmin'},
116-
'PCP': {'units': '[%]',
117-
'name': 'Total precipitation [%]',
118-
'id': 'pcp'},
119-
}
104+
self.var_dict = {'TMEAN': {'units': '[C]',
105+
'name': 'Mean temperature [C]',
106+
'id': 'tmean'},
107+
'TMAX': {'units': '[C]',
108+
'name': 'Maximum temperature [C]',
109+
'id': 'tmax'},
110+
'TMIN': {'units': '[C]',
111+
'name': 'Minimum temperature [C]',
112+
'id': 'tmin'},
113+
'PCP': {'units': '[%]',
114+
'name': 'Total precipitation [%]',
115+
'id': 'pcp'},
116+
}
120117

121118
if 'trend' in self.data:
122119
var_key = ['TMEAN', 'PCP']
123120
else:
124-
var_key = var_dict.keys()
121+
var_key = self.var_dict.keys()
125122

126123
for var in var_key:
127124
self.data = self.data.replace('TMEAN*', f'{var}*')
128125
with rasterio.open(self.data) as _data:
129126

130-
units = var_dict[var]['units']
127+
units = self.var_dict[var]['units']
131128
dtype = self._data.dtypes[0]
132129
nodataval = self._data.nodatavals[0]
133130
dtype2 = dtype
@@ -136,8 +133,8 @@ def get_fields(self):
136133
dtype2 = 'number'
137134
elif dtype.startswith('int'):
138135
dtype2 = 'integer'
139-
self._fields[var_dict[var]['id']] = {
140-
'title': var_dict[var]['name'],
136+
self._fields[self.var_dict[var]['id']] = {
137+
'title': self.var_dict[var]['name'],
141138
'type': dtype2,
142139
"x-ogc-unit": units,
143140
'_meta': {
@@ -170,16 +167,6 @@ def query(self, properties=['TMEAN'], subsets={}, bbox=[],
170167
}
171168
shapes = []
172169

173-
x = self._coverage_properties['x_axis_label']
174-
y = self._coverage_properties['y_axis_label']
175-
176-
if all([x in subsets,
177-
y in subsets,
178-
len(bbox) > 0]):
179-
msg = 'bbox and subsetting by coordinates are exclusive'
180-
LOGGER.warning(msg)
181-
raise ProviderQueryError(msg)
182-
183170
if len(bbox) > 0:
184171
minx, miny, maxx, maxy = bbox
185172

@@ -227,13 +214,12 @@ def query(self, properties=['TMEAN'], subsets={}, bbox=[],
227214
]]
228215
}]
229216

230-
if properties[0].upper() != 'TMEAN':
231-
var = properties[0].upper()
232-
try:
233-
self.data = self.get_file_list(var)[-1]
234-
except IndexError as err:
235-
LOGGER.error(err)
236-
raise ProviderQueryError(err)
217+
var = properties[0].upper()
218+
try:
219+
self.data = self.get_file_list(var)[-1]
220+
except IndexError as err:
221+
LOGGER.error(err)
222+
raise ProviderQueryError(err)
237223

238224
if 'season' in subsets:
239225
seasonal = subsets['season']
@@ -341,7 +327,7 @@ def query(self, properties=['TMEAN'], subsets={}, bbox=[],
341327
miny2,
342328
maxx2,
343329
maxy2]
344-
return self.gen_covjson(out_meta, out_image)
330+
return self.gen_covjson(out_meta, out_image, var)
345331
else:
346332
if date_file_list:
347333
LOGGER.debug('Serializing data in memory')
@@ -400,16 +386,16 @@ def _get_coverage_properties(self):
400386
if 'monthly' not in self.data:
401387
begin = search('_{:d}.tif', begin_file)[0]
402388
end = search('_{:d}.tif', end_file)[0]
403-
period = 'year'
389+
period = 'P1Y'
404390
else:
405391
begin = search('_{:d}-{:d}.tif', begin_file)
406392
begin = f'{begin[0]}-{begin[1]:02}'
407393

408394
end = search('_{:d}-{:d}.tif', end_file)
409395
end = f'{end[0]}-{end[1]:02}'
410-
period = 'month'
396+
period = 'P1M'
411397

412-
properties['restime'] = {'value': 1, 'period': period}
398+
properties['restime'] = period
413399
properties['time_range'] = [begin, end]
414400

415401
properties['uad'] = self.get_coverage_domainset()
@@ -443,3 +429,27 @@ def get_file_list(self, variable, datetime_=None):
443429
return query_file
444430
else:
445431
return file_path_
432+
433+
def gen_covjson(self, metadata, data, var):
434+
"""
435+
Helper function to normalize coverage properties
436+
437+
:returns: `dict` of coverage properties
438+
"""
439+
440+
cj = super().gen_covjson(metadata, data)
441+
442+
pm = self.var_dict[var]
443+
parameter = {}
444+
445+
parameter[pm['id']] = {
446+
'type': 'Parameter',
447+
'description': pm['name'],
448+
'unit': {
449+
'symbol': pm['units']
450+
}
451+
}
452+
453+
cj['parameters'] = parameter
454+
455+
return cj

msc_pygeoapi/provider/climate_xarray.py

+15-22
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,11 @@ def get_time_resolution(self):
257257
self.monthly_data = ['monthly_ens', 'SPEI', '_P1M']
258258

259259
if any(month in self.data for month in self.monthly_data):
260-
period = 'month'
260+
period = 'P1M'
261261
else:
262-
period = 'year'
262+
period = 'P1Y'
263263

264-
return {'value': 1, 'period': period}
264+
return period
265265

266266
else:
267267
return None
@@ -423,28 +423,21 @@ def query(self, properties=[], subsets={},
423423

424424
query_params = {}
425425

426-
if bbox:
427-
if all([self._coverage_properties['x_axis_label'] in subsets,
428-
self._coverage_properties['y_axis_label'] in subsets,
429-
len(bbox) > 0]):
430-
msg = 'bbox and subsetting by coordinates are exclusive'
431-
LOGGER.warning(msg)
432-
raise ProviderQueryError(msg)
433-
else:
434-
query_params[self._coverage_properties['x_axis_label']] = \
435-
slice(bbox[0], bbox[2])
426+
if bbox and len(bbox) > 0:
427+
query_params[self._coverage_properties['x_axis_label']] = \
428+
slice(bbox[0], bbox[2])
436429

437-
self._coverage_properties['time_axis_label']
430+
self._coverage_properties['time_axis_label']
438431

439-
lat = self._data.coords[self.y_field]
440-
lat_field = self._coverage_properties['y_axis_label']
432+
lat = self._data.coords[self.y_field]
433+
lat_field = self._coverage_properties['y_axis_label']
441434

442-
if lat.values[1] > lat.values[0]:
443-
query_params[lat_field] = \
444-
slice(bbox[1], bbox[3])
445-
else:
446-
query_params[lat_field] = \
447-
slice(bbox[3], bbox[1])
435+
if lat.values[1] > lat.values[0]:
436+
query_params[lat_field] = \
437+
slice(bbox[1], bbox[3])
438+
else:
439+
query_params[lat_field] = \
440+
slice(bbox[3], bbox[1])
448441

449442
if datetime_ is not None:
450443
if 'avg_20years' in self.data:

msc_pygeoapi/provider/spei_xarray.py

+5-14
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,7 @@ def query(self, properties=['spei'], subsets={},
139139

140140
data = self._data[[*properties]]
141141

142-
if any([self._coverage_properties['x_axis_label'] in subsets,
143-
self._coverage_properties['y_axis_label'] in subsets,
144-
self._coverage_properties['time_axis_label'] in subsets,
142+
if any([self._coverage_properties['time_axis_label'] in subsets,
145143
bbox,
146144
datetime_ is not None]):
147145

@@ -158,17 +156,10 @@ def query(self, properties=['spei'], subsets={},
158156
query_params[key] = slice(val[0], val[1])
159157

160158
if bbox:
161-
if all([self._coverage_properties['x_axis_label'] in subsets,
162-
self._coverage_properties['y_axis_label'] in subsets,
163-
len(bbox) > 0]):
164-
msg = 'bbox and subsetting by coordinates are exclusive'
165-
LOGGER.warning(msg)
166-
raise ProviderQueryError(msg)
167-
else:
168-
query_params[self._coverage_properties['x_axis_label']] = \
169-
slice(bbox[0], bbox[2])
170-
query_params[self._coverage_properties['y_axis_label']] = \
171-
slice(bbox[3], bbox[1])
159+
query_params[self._coverage_properties['x_axis_label']] = \
160+
slice(bbox[0], bbox[2])
161+
query_params[self._coverage_properties['y_axis_label']] = \
162+
slice(bbox[3], bbox[1])
172163

173164
if datetime_ is not None:
174165
if self._coverage_properties['time_axis_label'] in subsets:

0 commit comments

Comments
 (0)