Выполните HTTP GET с timeout, проверьте статус, разберите JSON и проверьте обязательные поля вместе со структурой dependencies.
Получение информации о пакетах через HTTP
Выполните HTTP GET с timeout, проверьте статус, разберите JSON и проверьте обязательные поля вместе со структурой dependencies.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Разработайте программу, которая загружает JSON‑документ с указанного веб‑ресурса. Ожидаемый формат получаемых данных выглядит следующим образом:
{
"name": "package-01",
"version": "3.2.1",
"dependencies": [
{
"package": "package-sub-01",
"version": "3.4.6"
}
]
}
Ваша задача – реализовать код, который выполнит запрос, получит ответ и сможет корректно обработать полученную структуру.
Ответ
Выполните HTTP GET с timeout, проверьте статус, разберите JSON и проверьте обязательные поля вместе со структурой dependencies.
import requests
def load_package(url):
response = requests.get(url, timeout=(3, 10))
response.raise_for_status()
data = response.json()
if not isinstance(data, dict):
raise ValueError('Ожидался объект')
if not all(isinstance(data.get(k), str) for k in ('name', 'version')):
raise ValueError('Некорректные name/version')
dependencies = data.get('dependencies')
if not isinstance(dependencies, list):
raise ValueError('Ожидался список dependencies')
for dependency in dependencies:
if not isinstance(dependency, dict) or not all(
isinstance(dependency.get(k), str) for k in ('package', 'version')
):
raise ValueError('Некорректная зависимость')
return data
Сетевые ошибки и некорректный JSON должны обрабатываться вызывающим кодом. Для недоверенных адресов нужны ограничения допустимых серверов и размера ответа; приведённый пример предполагает доверенный ресурс.