Получение информации о пакетах через HTTP

Выполните HTTP GET с timeout, проверьте статус, разберите JSON и проверьте обязательные поля вместе со структурой dependencies.

Короткий ответ

Что ответить на собеседовании

Выполните 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 должны обрабатываться вызывающим кодом. Для недоверенных адресов нужны ограничения допустимых серверов и размера ответа; приведённый пример предполагает доверенный ресурс.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее