@@ -21,6 +21,30 @@ def parse_date(date):
2121 return datetime .datetime .strptime (date .split ("T" )[0 ], RELIEFWEB_DATETIME_FORMAT )
2222
2323
24+ def _post_reliefweb (query_params , url , context ):
25+ try :
26+ response = requests .post (url , data = query_params )
27+ response .raise_for_status ()
28+ return response .json ()
29+ except requests .HTTPError as exc :
30+ status_code = exc .response .status_code if exc .response else None
31+ if status_code == 410 :
32+ logger .warning (
33+ "ReliefWeb API returned 410 Gone for %s. Skipping %s prefetch. URL: %s" ,
34+ DISASTER_API ,
35+ context ,
36+ url ,
37+ )
38+ return None
39+ raise
40+ except requests .RequestException :
41+ logger .exception ("ReliefWeb API request failed for %s. URL: %s" , context , url )
42+ raise
43+ except ValueError :
44+ logger .exception ("ReliefWeb API returned invalid JSON for %s. URL: %s" , context , url )
45+ raise
46+
47+
2448def _crises_event_prefetch ():
2549 query_params = json .dumps (
2650 {
@@ -42,9 +66,9 @@ def _crises_event_prefetch():
4266 url = DISASTER_API
4367 data = {}
4468 while True :
45- response = requests . post ( url , data = query_params )
46- response . raise_for_status ()
47- response = response . json ()
69+ response = _post_reliefweb ( query_params , url , "crises_event" )
70+ if response is None :
71+ return {}
4872
4973 for disaster in response ["data" ]:
5074 disaster = disaster ["fields" ]
@@ -90,9 +114,9 @@ def _epidemics_prefetch():
90114 url = DISASTER_API
91115 data = {}
92116 while True :
93- response = requests . post ( url , data = query_params )
94- response . raise_for_status ()
95- response = response . json ()
117+ response = _post_reliefweb ( query_params , url , "epidemics" )
118+ if response is None :
119+ return {}
96120
97121 for epidemic in response ["data" ]:
98122 epidemic = epidemic ["fields" ]
0 commit comments