Skip to content

Commit a4adb18

Browse files
committed
Enable filter available stations by name
1 parent bf4941e commit a4adb18

File tree

2 files changed

+26
-57
lines changed

2 files changed

+26
-57
lines changed

disdrodb/api/io.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ def _check_data_sources(base_dir, product, data_sources):
192192
idx_invalid = np.where(np.isin(data_sources, list_dir, invert=True))[0]
193193
if len(idx_invalid) > 0:
194194
invalid_data_sources = data_sources[idx_invalid].tolist()
195-
raise ValueError(f"These data sources are invalid: {invalid_data_sources}.")
195+
raise ValueError(f"These data sources does not exist: {invalid_data_sources}.")
196196
# Return data_sources list
197197
data_sources = data_sources.tolist()
198198
return data_sources
@@ -223,7 +223,7 @@ def _check_campaign_names(base_dir, product, campaign_names):
223223
idx_invalid = np.where(np.isin(campaign_names, list_campaign_names, invert=True))[0]
224224
if len(idx_invalid) > 0:
225225
invalid_campaign_names = campaign_names[idx_invalid].tolist()
226-
raise ValueError(f"These campaign names are invalid: {invalid_campaign_names}.")
226+
raise ValueError(f"These campaign names does not exist: {invalid_campaign_names}.")
227227
# Return campaign_names list
228228
campaign_names = campaign_names.tolist()
229229
return campaign_names
@@ -276,6 +276,7 @@ def available_stations(
276276
product,
277277
data_sources=None,
278278
campaign_names=None,
279+
station_names=None,
279280
return_tuple=True,
280281
base_dir=None,
281282
):
@@ -293,6 +294,8 @@ def available_stations(
293294
product=product,
294295
campaign_names=campaign_names,
295296
)
297+
if isinstance(station_names, str):
298+
station_names = [station_names]
296299

297300
# If data_source is None, first retrieve all stations
298301
if data_sources is None:
@@ -304,18 +307,18 @@ def available_stations(
304307
data_sources=data_sources,
305308
product=product,
306309
)
307-
# Then, if campaign_name is not None, subset by campaign_name
310+
# If campaign_names is not None, subset by campaign_names
308311
if campaign_names is not None:
309312
list_info = [info for info in list_info if info[1] in campaign_names]
310313

314+
# If station_names is not None, subset by station_names
315+
if station_names is not None:
316+
list_info = [info for info in list_info if info[2] in station_names]
317+
318+
# Return list with the tuple (data_source, campaign_name, station_name)
311319
if return_tuple:
312320
return list_info
313321

314-
# TODO:
315-
# - Filter by station names !
316-
# - Add check_station_names
317-
# - Simplify available_stations
318-
319-
# TODO: ENSURE THAT NO DUPLICATED STATION NAMES ?
322+
# - Return list with the name of the available stations
320323
list_stations = [info[2] for info in list_info]
321324
return list_stations

disdrodb/metadata/search.py

Lines changed: 14 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -178,58 +178,24 @@ def _get_list_metadata_with_data(base_dir, data_sources=None, campaign_names=Non
178178
product="RAW",
179179
data_sources=data_sources,
180180
campaign_names=campaign_names,
181+
station_names=station_names,
181182
)
182183

183-
# If no stations available, raise an error
184-
if len(list_info) == 0:
185-
raise ValueError("No stations are available !")
186-
187-
if isinstance(station_names, str):
188-
station_names = [station_names]
189-
190-
### This solution is slow !
191-
# if isinstance(station_names, type(None)):
192-
# station_names = [station_name for _, _, station_name in list_info]
193-
# metadata_filepaths = [
194-
# define_metadata_filepath(
195-
# product="Raw",
196-
# data_source=data_source,
197-
# campaign_name=campaign_name,
198-
# station_name=station_name,
199-
# base_dir=base_dir,
200-
# check_exists=False,
201-
# )
202-
# for data_source, campaign_name, station_name in list_info if station_name in station_names
203-
# ]
204-
205-
# Get metadata filepaths
206-
if isinstance(station_names, list):
207-
metadata_filepaths = [
208-
define_metadata_filepath(
209-
product="Raw",
210-
data_source=data_source,
211-
campaign_name=campaign_name,
212-
station_name=station_name,
213-
base_dir=base_dir,
214-
check_exists=False,
215-
)
216-
for data_source, campaign_name, station_name in list_info
217-
if station_name in station_names
218-
]
219-
else:
220-
metadata_filepaths = [
221-
define_metadata_filepath(
222-
product="Raw",
223-
data_source=data_source,
224-
campaign_name=campaign_name,
225-
station_name=station_name,
226-
base_dir=base_dir,
227-
check_exists=False,
228-
)
229-
for data_source, campaign_name, station_name in list_info
230-
]
184+
# Retrieve metadata filepaths
185+
metadata_filepaths = [
186+
define_metadata_filepath(
187+
product="RAW",
188+
data_source=data_source,
189+
campaign_name=campaign_name,
190+
station_name=station_name,
191+
base_dir=base_dir,
192+
check_exists=False,
193+
)
194+
for data_source, campaign_name, station_name in list_info
195+
]
231196

232197
# If no stations available, raise an error
233198
if len(metadata_filepaths) == 0:
234199
raise ValueError("No stations are available !")
200+
235201
return sorted(metadata_filepaths)

0 commit comments

Comments
 (0)