[python] Fixed downloading of hotels.

This commit is contained in:
Maksim Andrianov 2020-03-21 15:04:00 +03:00 committed by Vladimir Byko-Ianko
parent 33cbb9f6af
commit 17e6956d9f

View file

@ -1,3 +1,4 @@
import json
import logging
from functools import partial
from random import randint
@ -51,35 +52,39 @@ class BookingApi:
except requests.exceptions.ReadTimeout:
logging.exception("Timeout error.")
continue
if response.status_code == 200:
except requests.exceptions.SSLError:
logging.exception("SSL error.")
continue
code = response.status_code
try:
data = response.json()
except json.decoder.JSONDecodeError:
logging.exception(f"JSON decode error. "
f"Content: {response.content}")
continue
if code == 200:
return data["result"]
else:
self._handle_errors(response)
self._handle_http_errors(code, data)
raise AttemptsSpentError(f"{ATTEMPTS_COUNT} attempts were spent.")
except Exception as e:
if not self._event.is_set():
self._event.set()
raise e
def _handle_errors(self, response):
error_message = ""
data = response.json()
try:
error_message = ",".join(x["message"] for x in data["errors"])
except KeyError:
error_message = data
if response.status_code == 429:
def _handle_http_errors(self, code, data):
if code == 429:
self._event.clear()
wait_seconds = randint(*MINMAX_LIMIT_WAIT_AFTER_429_ERROR_SECONDS)
logging.warning(f"Http error {response.status_code}: {error_message}. "
logging.warning(f"Http error {code}: {data}. "
f"It waits {wait_seconds} seconds and tries again.")
sleep(wait_seconds)
self._event.set()
else:
raise HTTPError(
f"Http error with code {response.status_code}: {error_message}.")
f"Http error with code {code}: {data}.")
def _set_endpoints(self):
for endpoint in BookingApi.ENDPOINTS: