Skip to content

Commit f8221b4

Browse files
authored
Merge pull request #46 from rodekruis/fix/various
Fix/various
2 parents 8339e5a + 67c5b3b commit f8221b4

File tree

3 files changed

+28
-13
lines changed

3 files changed

+28
-13
lines changed

retrievalpipeline/config/somalia.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def extreme_heat_data_request(self) -> EcmwfDataRequest:
9797
"year": [
9898
f"{year}"
9999
for year in range(
100-
self.datetime_config.recent_start_year, self.datetime_config.baseline_end_year + 1
100+
self.datetime_config.recent_start_year, self.datetime_config.recent_end_year + 1
101101
)
102102
],
103103
"month": [f"{m:02d}" for m in range(1, 13)],

retrievalpipeline/extract/extractors/api_json_extractor.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import time
12
from collections.abc import Iterable, Iterator
23
from typing import Any
34

@@ -46,13 +47,28 @@ def get_data(
4647
Returns:
4748
list of pydantic models (of type specified in the initiation).
4849
"""
49-
try:
50-
response = self.get_response(api_url, params, headers)
51-
json_data = self.get_data_from_response(response)
52-
except ApiResponseError as err:
53-
logger.warning(err)
50+
max_retries = 5
51+
sleep_seconds = 10
52+
53+
for attempt in range(1, max_retries + 1):
54+
try:
55+
response = self.get_response(api_url, params, headers)
56+
json_data = self.get_data_from_response(response)
57+
except ApiResponseError as err:
58+
if attempt < max_retries:
59+
logger.warning(
60+
f"""Attempt {attempt}/{max_retries} failed for {api_url}: {err}.
61+
Retrying in {sleep_seconds} seconds""",
62+
)
63+
time.sleep(sleep_seconds)
64+
continue
65+
else:
66+
logger.warning(f"All {max_retries} attempts failed for {api_url}: {err}")
67+
68+
if json_data:
69+
return list(self.validate_and_parse(json_data))
70+
else:
5471
return []
55-
return list(self.validate_and_parse(json_data))
5672

5773
def get_response(
5874
self, api_url: str, params: dict[str, str] | None = None, headers: dict[str, str] | None = None

retrievalpipeline/extract/extractors/ipc.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,11 @@ def get_available_data(self, data_type: str) -> gpd.GeoDataFrame:
188188
def get_metadata(self, anl_id: str) -> pd.DataFrame:
189189
"""Collect metadata from IPC based on analysis ID."""
190190
metadata_frames = []
191-
for iso2 in self.country_codes_iso2:
192-
try:
193-
metadata = self.get_available_metadata_iso2(iso2, self.types, [anl_id])
194-
metadata_frames.append(metadata)
195-
except Exception as e:
196-
logger.warning(f"Failed to get metadata for {iso2}: {e}")
191+
try:
192+
metadata = self.get_available_metadata_iso2(self.country_codes_iso2, self.types, [anl_id])
193+
metadata_frames.append(metadata)
194+
except Exception as e:
195+
logger.warning(f"Failed to get metadata for {self.country_codes_iso2}: {e}")
197196

198197
return pd.concat(metadata_frames, ignore_index=True)
199198

0 commit comments

Comments
 (0)