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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dca522bbd2ff24c7f878083986ce17e3d3c62f0b9bcd51485cd1550fdc1a55f1
|
|
| MD5 |
253faeb84e0fe400fe0393b176276e5b
|
|
| BLAKE2b-256 |
5b0d284613c48ea4a371d87a60ad8753f1307ec2faecfd5a7ace75b7f09c4f28
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9ea5e855c561bfc691c19275d25340dcf05ec1f450d73c751c94821946c610a
|
|
| MD5 |
40ebe791e993e1a4e11c2f21e99fa4ce
|
|
| BLAKE2b-256 |
3075de6b8eb3fd6dec7fcf9ce8881e835faa71d0118e373b9888e5510ccfe919
|