Я работаю на Snap! Проект C ++ , который управляет множеством пакетов со сложным набором зависимостей (см. Рисунок ниже).
В результате мне нужно, чтобы сборка пакета A была завершена, прежде чем я смогу запустить сборку пакета B. Я хотел бы хотя бы полуавтоматизировать процесс сборки, и для этого мне нужно будет знать, программно , что сборка пакета A завершена. Затем я могу проверить, что сборка сработала (что я знаю, как это сделать), и если да, то могу отправить исходники пакета B и начать сборку.
Я нашел страницы, посвященные Launchpad API , и загрузил сценарии python, которые они предлагают для доступа к серверу. Однако я не так хорош в python, и я не совсем уверен, какой вызов API мне нужно использовать.Я нашел эту огромную страницу , на которой, как я полагаю, были все вызовы, но я не смог найти простого примера того, как получить текущий статус сборки для конкретного проекта. Может быть getBuildQueueSizes
? Но просмотрев файлы проекта Python launchpadlib
, я не нашел в коде такого имени. Так что я не совсем уверен, как это работает.
Не могли бы вы поделиться с нами образцом кода, который выполняет хотя бы такую работу? Или место, где был бы пример на веб-сайте Launchpad.net?
На этом этапе мой скрипт подключается ... что мне делать дальше?
# See API here
# https://launchpad.net/+apidoc/devel.html
from launchpadlib.launchpad import Launchpad
from os.path import expanduser
home = expanduser('~')
cachedir = home + '/.launchpadlib/cache/'
launchpad = Launchpad.login_anonymously('snapcpp', 'production', cachedir, version='devel')
Если возможно, просто URI было бы замечательно. Из того, что я вижу здесь и там, можно было бы просто отправить HTTP GET
на URI и получить взамен JSON со всей необходимой информацией. Я не вижу, каким будет этот URI. Я пробовал несколько из того, что я видел в документации (с очень тяжелыми примерами ... НЕ):
https://api.launchpad.net/devel/snapcpp?ws.op=getBuildRecords&source_name=libtld
Это говорит мне, что getBuildRecords
не является командой. Однако в большинстве случаев я получаю 400 или 404. URL проекта работает, но все ссылки, показанные в JSON, не помогают:
https://api.launchpad.net/devel/snapcpp
Еще немного протестировав, я обнаружил, что могу искать некоторые сборки с помощью:
https://api.launchpad.net/devel/ubuntu/bionic?ws.op=getBuildRecords&source_name=lib
Но если я попытаюсь использовать имена своих проектов в качестве параметра source_name = ...
(также известного как «libtld» или «snapcpp»), он вернет пустой список. Этот последний URL также работает только с / ubuntu? ...
или с архитектурой / ubuntu / bionic / amd64? ...
. Но это не помогает.
Я думаю, что это ошибка, поэтому я сообщил об этом на Launchpad .
launchpadlib
является относительно тонким слоем по сравнению с базовым API Launchpad, а фактические операции реализованы в Launchpad . Таким образом, в исходном коде launchpadlib
вы, как правило, не найдете никаких упоминаний об отдельных методах API.
Ваша проблема в том, что вы задаете Launchpad вопросы о / snapcpp
(проект, который формально не имеет отношения к вашему PPA, что касается Launchpad) или о / ubuntu / bionic
(серия Ubuntu, в которой рассказывается только о сборках, являющихся частью официальной ОС), а не о вашем PPA. Правильный URL-адрес будет:
https://api.launchpad.net/devel/~snapcpp/+archive/ubuntu/ppa?ws.op=getBuildRecords&source_name=libtld
Или в коде на основе launchpadlib
примерно так:
archive = launchpad.load('/~snapcpp/+archive/ubuntu/ppa')
for build in archive.getBuildRecords(source_name='libtld'):
# do something with each build in turn