Разберите JSON, извлеките dependencies и вызовите функцию загрузки для каждой пары package/version. Не угадывайте сигнатуру загрузчика: передайте его зависимостью с явно оговорённым контрактом.
Получение зависимостей пакета из JSON
Разберите JSON, извлеките dependencies и вызовите функцию загрузки для каждой пары package/version. Не угадывайте сигнатуру загрузчика: передайте его зависимостью с явно оговорённым контрактом.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте функцию, которая:
- Принимает JSON‑строку в качестве аргумента.
- Проходит по массиву
dependencies. - Для каждой найденной зависимости загружает соответствующий JSON, используя предоставленную функцию скачивания пакета.
json_payload = """
{
"name": "package-01",
"version": "3.2.1",
"dependencies": [
{
"package": "package-sub-01",
"version": "3.4.6"
}
]
}
"""
Ответ
Разберите JSON, извлеките dependencies и вызовите функцию загрузки для каждой пары package/version. Не угадывайте сигнатуру загрузчика: передайте его зависимостью с явно оговорённым контрактом.
Предположим, download_package(name, version) возвращает JSON-строку:
import json
def load_dependencies(payload, download_package):
package = json.loads(payload)
dependencies = package.get('dependencies', [])
if not isinstance(dependencies, list):
raise ValueError('dependencies must be a list')
result = []
for dependency in dependencies:
name, version = dependency['package'], dependency['version']
if not isinstance(name, str) or not isinstance(version, str):
raise ValueError('Invalid dependency')
result.append(json.loads(download_package(name, version)))
return result
Это загрузка непосредственных зависимостей, не транзитивного графа. Для рекурсивного обхода нужны visited по (name, version), защита от циклов, лимиты и стратегия конфликтов версий. Загруженные данные не следует автоматически исполнять.