Skip to main content

Async client for ALT Linux repository services (rdb API, packages parser, AppStream)

Project description

altrepo

Асинхронный Python-клиент для работы с сервисами репозитория ALT Linux. Библиотека предоставляет удобный интерфейс для доступа к данным о пакетах, задачах, мейнтейнерах и другой информации из экосистемы ALT Linux.

Возможности

  • REST API — полный клиент для rdb.altlinux.org/api: информация о пакетах, поиск, задачи, мейнтейнеры, баги, ACL, зависимости, эрраты, лицензии и многое другое
  • Парсер новостей — получение и разбор новостей из рассылки sisyphus-cybertalk: добавленные, обновлённые и удалённые пакеты, баги
  • Watch — отслеживание устаревших пакетов через watch.altlinux.org, как по отдельному мейнтейнеру, так и по всему репозиторию целиком
  • FTBFS — список пакетов с ошибками пересборки
  • AppStream — загрузка, кеширование и поиск по AppStream-метаданным пакетов

Установка

pip3 install altrepo

Быстрый старт

Минимальный пример для начала работы с библиотекой. Создаём клиент, инициализируем сессию и делаем запрос:

import asyncio
from altrepo import ALTRepo

async def main():
    client = ALTRepo()
    await client.init()

    result = await client.api.package.package_info("vim", branch="sisyphus")
    pkg = result.packages[0]
    print(f"{pkg.name} {pkg.version}-{pkg.release}")

    await client.close()

asyncio.run(main())

Примеры использования

Работа с API пакетов

Получение подробной информации о пакете и поиск по имени:

# Информация о конкретном пакете
result = await client.api.package.package_info("firefox", branch="sisyphus")
pkg = result.packages[0]
print(f"{pkg.name} {pkg.version}-{pkg.release} ({pkg.summary})")

# Поиск пакетов по подстроке в имени
result = await client.api.package.package_search("python3-module", branch="sisyphus")
for pkg in result.packages[:10]:
    print(f"  {pkg.name}: {pkg.summary}")

Задачи и мейнтейнеры

Поиск задач по мейнтейнеру или по имени пакета:

# Задачи мейнтейнера
result = await client.api.task.find_tasks(
    input=["fiersik"], branch="sisyphus", by_package=False
)
for task in result.tasks[:5]:
    print(f"  #{task.task_id} [{task.state}] {task.owner}")

# Баги мейнтейнера из Bugzilla
bugs = await client.api.bug.bugzilla_by_maintainer("fiersik")
if bugs:
    for bug in bugs.bugs[:5]:
        print(f"  #{bug.bug_id} {bug.status}: {bug.summary}")

Отслеживание устаревших пакетов

Библиотека поддерживает два режима работы с watch.altlinux.org:

# Устаревшие пакеты конкретного мейнтейнера
watch = await client.parser.packages.watch_by_maintainer("fiersik", "by-acl")
for pkg in watch[:5]:
    print(f"  {pkg.pkg_name}: {pkg.old_version} -> {pkg.new_version}")

# Полный список устаревших пакетов по всему репозиторию
# Каждая запись содержит имя мейнтейнера (или группы с префиксом @)
total = await client.parser.packages.watch_total()
print(f"Всего устаревших пакетов: {len(total)}")

Новости репозитория

Получение свежих новостей о пакетах из рассылки sisyphus-cybertalk:

# Свежие новости Sisyphus за сегодня
news = await client.parser.news.sisyphus()
if news:
    print(f"Добавлено: {len(news.added or [])}")
    print(f"Обновлено: {len(news.updated or [])}")
    print(f"Удалено: {len(news.removed or [])}")

# Агрегированные новости за произвольный период
from datetime import date
news = await client.parser.news.packages_by_range(
    date(2026, 3, 1), date(2026, 3, 10)
)

FTBFS — ошибки пересборки

ftbfs = await client.parser.packages.ftbfs()
print(f"Пакетов с ошибками пересборки: {len(ftbfs)}")
for pkg in ftbfs[:5]:
    print(f"  {pkg.name} {pkg.version} ({pkg.ftbfs_weeks} нед.)")

Конфигурация

Все URL-ы и настройки имеют разумные значения по умолчанию, поэтому для стандартного использования никакая дополнительная конфигурация не требуется. При необходимости любой параметр можно переопределить через ALTRepoConfig:

from altrepo import ALTRepo, ALTRepoConfig

config = ALTRepoConfig(
    api_base_url="https://rdb.altlinux.org/api",
    appstream_dir="/tmp/appstream",
    appstream_branches=["sisyphus", "p11", "p10"],
)
client = ALTRepo(config=config)

Если в вашем приложении уже есть aiohttp.ClientSession, её можно передать при инициализации, чтобы не создавать лишних соединений:

import aiohttp

session = aiohttp.ClientSession()
client = ALTRepo()
await client.init(session=session)

Лицензия

AGPL-3.0-or-later

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

altrepo-0.2.0.tar.gz (25.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

altrepo-0.2.0-py3-none-any.whl (28.3 kB view details)

Uploaded Python 3

File details

Details for the file altrepo-0.2.0.tar.gz.

File metadata

  • Download URL: altrepo-0.2.0.tar.gz
  • Upload date:
  • Size: 25.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.13.11 Linux/6.18.9-6.18-alt1

File hashes

Hashes for altrepo-0.2.0.tar.gz
Algorithm Hash digest
SHA256 dca522bbd2ff24c7f878083986ce17e3d3c62f0b9bcd51485cd1550fdc1a55f1
MD5 253faeb84e0fe400fe0393b176276e5b
BLAKE2b-256 5b0d284613c48ea4a371d87a60ad8753f1307ec2faecfd5a7ace75b7f09c4f28

See more details on using hashes here.

File details

Details for the file altrepo-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: altrepo-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 28.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.13.11 Linux/6.18.9-6.18-alt1

File hashes

Hashes for altrepo-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a9ea5e855c561bfc691c19275d25340dcf05ec1f450d73c751c94821946c610a
MD5 40ebe791e993e1a4e11c2f21e99fa4ce
BLAKE2b-256 3075de6b8eb3fd6dec7fcf9ce8881e835faa71d0118e373b9888e5510ccfe919

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page