Skip to content

Commit 4f3370e

Browse files
committed
Update based on reviews
1 parent a9088cd commit 4f3370e

File tree

2 files changed

+67
-50
lines changed

2 files changed

+67
-50
lines changed

integrations/client/test_delphi_epidata.py

Lines changed: 56 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -236,56 +236,69 @@ def raise_for_status(self): pass
236236

237237
Epidata.debug = True
238238

239-
with self.subTest(name='test multiple GET'):
240-
with self.assertLogs('delphi_epidata_client', level='INFO') as logs:
241-
get.reset_mock()
242-
get.return_value = MockResponse(b'{"key": "value"}', 200)
243-
Epidata._request_with_retry("test_endpoint1", params={"key1": "value1"})
244-
Epidata._request_with_retry("test_endpoint2", params={"key2": "value2"})
245-
246-
output = logs.output
247-
self.assertEqual(len(output), 4) # [request, response, request, response]
248-
self.assertIn("Sending GET request to URL: http://delphi_web_epidata/epidata/test_endpoint1/", output[0])
249-
self.assertIn("params: {'key1': 'value1'}", output[0])
250-
self.assertIn("Received 200 response (16 bytes)", output[1])
251-
self.assertIn("Sending GET request to URL: http://delphi_web_epidata/epidata/test_endpoint2/", output[2])
252-
self.assertIn("params: {'key2': 'value2'}", output[2])
253-
self.assertIn("Received 200 response (16 bytes)", output[3])
254-
255-
with self.subTest(name='test GET and POST'):
256-
with self.assertLogs('delphi_epidata_client', level='INFO') as logs:
257-
get.reset_mock()
258-
get.return_value = MockResponse(b'{"key": "value"}', 414)
259-
post.reset_mock()
260-
post.return_value = MockResponse(b'{"key": "value"}', 200)
261-
Epidata._request_with_retry("test_endpoint3", params={"key3": "value3"})
262-
263-
output = logs.output
264-
self.assertEqual(len(output), 4) # [request, response, request, response]
265-
self.assertIn("Sending GET request to URL: http://delphi_web_epidata/epidata/test_endpoint3/", output[0])
266-
self.assertIn("params: {'key3': 'value3'}", output[0])
267-
self.assertIn("Received 414 response (16 bytes)", output[1])
268-
self.assertIn("Sending POST request to URL: http://delphi_web_epidata/epidata/test_endpoint3/", output[2])
269-
self.assertIn("params: {'key3': 'value3'}", output[2])
270-
self.assertIn("Received 200 response (16 bytes)", output[3])
271-
272-
Epidata.debug = False
239+
try:
240+
with self.subTest(name='test multiple GET'):
241+
with self.assertLogs('delphi_epidata_client', level='INFO') as logs:
242+
get.reset_mock()
243+
get.return_value = MockResponse(b'{"key": "value"}', 200)
244+
Epidata._request_with_retry("test_endpoint1", params={"key1": "value1"})
245+
Epidata._request_with_retry("test_endpoint2", params={"key2": "value2"})
246+
247+
output = logs.output
248+
self.assertEqual(len(output), 4) # [request, response, request, response]
249+
self.assertIn("Sending GET request", output[0])
250+
self.assertIn("\"url\": \"http://delphi_web_epidata/epidata/test_endpoint1/\"", output[0])
251+
self.assertIn("\"params\": {\"key1\": \"value1\"}", output[0])
252+
self.assertIn("Received response", output[1])
253+
self.assertIn("\"status_code\": 200", output[1])
254+
self.assertIn("\"len\": 16", output[1])
255+
self.assertIn("Sending GET request", output[2])
256+
self.assertIn("\"url\": \"http://delphi_web_epidata/epidata/test_endpoint2/\"", output[2])
257+
self.assertIn("\"params\": {\"key2\": \"value2\"}", output[2])
258+
self.assertIn("Received response", output[3])
259+
self.assertIn("\"status_code\": 200", output[3])
260+
self.assertIn("\"len\": 16", output[3])
261+
262+
with self.subTest(name='test GET and POST'):
263+
with self.assertLogs('delphi_epidata_client', level='INFO') as logs:
264+
get.reset_mock()
265+
get.return_value = MockResponse(b'{"key": "value"}', 414)
266+
post.reset_mock()
267+
post.return_value = MockResponse(b'{"key": "value"}', 200)
268+
Epidata._request_with_retry("test_endpoint3", params={"key3": "value3"})
269+
270+
output = logs.output
271+
self.assertEqual(len(output), 3) # [request, response, request, response]
272+
self.assertIn("Sending GET request", output[0])
273+
self.assertIn("\"url\": \"http://delphi_web_epidata/epidata/test_endpoint3/\"", output[0])
274+
self.assertIn("\"params\": {\"key3\": \"value3\"}", output[0])
275+
self.assertIn("Received 414 response, retrying as POST request", output[1])
276+
self.assertIn("\"url\": \"http://delphi_web_epidata/epidata/test_endpoint3/\"", output[1])
277+
self.assertIn("\"params\": {\"key3\": \"value3\"}", output[1])
278+
self.assertIn("Received response", output[2])
279+
self.assertIn("\"status_code\": 200", output[2])
280+
self.assertIn("\"len\": 16", output[2])
281+
finally: # make sure this global is always reset
282+
Epidata.debug = False
273283

274284
@patch('requests.post')
275285
@patch('requests.get')
276286
def test_sandbox(self, get, post):
277287
"""Test that in debug + sandbox mode request params are correctly logged, but no queries are sent."""
278288
Epidata.debug = True
279289
Epidata.sandbox = True
280-
with self.assertLogs('delphi_epidata_client', level='INFO') as logs:
281-
Epidata.covidcast('src', 'sig', 'day', 'county', 20200414, '01234')
282-
output = logs.output
283-
self.assertEqual(len(output), 1)
284-
self.assertIn("Sending GET request to URL: http://delphi_web_epidata/epidata/covidcast/", output[0])
285-
get.assert_not_called()
286-
post.assert_not_called()
287-
Epidata.debug = False
288-
Epidata.sandbox = False
290+
try:
291+
with self.assertLogs('delphi_epidata_client', level='INFO') as logs:
292+
Epidata.covidcast('src', 'sig', 'day', 'county', 20200414, '01234')
293+
output = logs.output
294+
self.assertEqual(len(output), 1)
295+
self.assertIn("Sending GET request", output[0])
296+
self.assertIn("\"url\": \"http://delphi_web_epidata/epidata/covidcast/\"", output[0])
297+
get.assert_not_called()
298+
post.assert_not_called()
299+
finally: # make sure these globals are always reset
300+
Epidata.debug = False
301+
Epidata.sandbox = False
289302

290303
def test_geo_value(self):
291304
"""test different variants of geo types: single, *, multi."""

src/client/delphi_epidata.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,18 +79,24 @@ def _request_with_retry(endpoint, params={}):
7979
"""Make request with a retry if an exception is thrown."""
8080
request_url = f"{Epidata.BASE_URL}/{endpoint}/"
8181
if Epidata.debug:
82-
Epidata.logger.info(f"Sending GET request to URL: {request_url} | params: {params} | headers: {_HEADERS}")
82+
Epidata.logger.info("Sending GET request", url=request_url, params=params, headers=_HEADERS)
8383
if Epidata.sandbox:
84-
return
84+
resp = requests.Response()
85+
resp._content = b'true'
86+
return resp
8587
start_time = time.time()
8688
req = requests.get(request_url, params, auth=Epidata.auth, headers=_HEADERS)
8789
if req.status_code == 414:
8890
if Epidata.debug:
89-
Epidata.logger.info(f"Received {req.status_code} response ({len(req.content)} bytes) in {(time.time() - start_time):.3f} seconds")
90-
Epidata.logger.info(f"Sending POST request to URL: {request_url} | params: {params} | headers: {_HEADERS}")
91+
Epidata.logger.info("Received 414 response, retrying as POST request", url=request_url, params=params, headers=_HEADERS)
9192
req = requests.post(request_url, params, auth=Epidata.auth, headers=_HEADERS)
9293
if Epidata.debug:
93-
Epidata.logger.info(f"Received {req.status_code} response ({len(req.content)} bytes) in {(time.time() - start_time):.3f} seconds")
94+
Epidata.logger.info(
95+
"Received response",
96+
status_code=req.status_code,
97+
len=len(req.content),
98+
time=round(time.time() - start_time, 4)
99+
)
94100
# handle 401 and 429
95101
req.raise_for_status()
96102
return req
@@ -105,8 +111,6 @@ def _request(endpoint, params={}):
105111
"""
106112
try:
107113
result = Epidata._request_with_retry(endpoint, params)
108-
if Epidata.sandbox:
109-
return
110114
except Exception as e:
111115
return {"result": 0, "message": "error: " + str(e)}
112116
if params is not None and "format" in params and params["format"] == "csv":

0 commit comments

Comments
 (0)