Архив документации OpenNet.ru / Раздел "Документация для Linux" / Индекс

16.3.3 Работа с хэдером пакета

16.3.3.1 Класс hdr
Получить запись из объекта хэдера можно, используя возможности Python для работы со словарями. Это гораздо удобнее, чем вызов headerGetEntry в C-программе. Базовый синтаксис доступа к записи:

value = h['tag_name']

Например, для получения имени пакета делаем так:

name = h['name']

Также можно использовать стек предопределенных имен тэгов, которые использует C API. Эти константы определены в модуле rpm и их можно задействовать таким образом:

name = h[rpm.RPMTAG_NAME]

Для записей хэдера, содержащих массив строк, например, список файлов пакета, данные, возвращаемые методом будут представлять собой список Python:

print "Files:"

files = h['FILENAMES']

for name in files:

print name

Кроме того, можно использовать file info для организации более компактного кода. Например:

print "Files:"

fi = h.fiFromHeader()

print fi

Зависимости, возможности, несовместимости и конфликты всякий раз получаются как три отдельных, но ссылающихся друг на друга списка. Например, три списка для зависимостей, три для возможностей и так далее. Эту информацию можно извлекать, используя сет зависимости таким образом:

print h.dsFromHeader('providename')

print h.dsFromHeader('requirename')

print h.dsFromHeader('obsoletename')

print h.dsFromHeader('conflictname')

16.3.3.2 Вывод информации с помощью sprintf
Кроме возможностей Python по работе со словарями для форматирования вывода можно использовать метод sprintf, при этом применяется в точности такой же синтаксис, как для установки формата запросов при запуске утилиты rpm в режиме запросов:

h.sprintf("%{tag_name}")

Можно добавлять специальные директивы форматирования к имени тега:

print "Header signature: ", h.sprintf("%{DSAHEADER:pgpsig}")

print "%-20s: %s" % ('Installed on', h.sprintf("%{INSTALLTID:date}") )

Эти подходы можно включать в пользовательские функции, выводящие записи хэдера со специфическим форматированием:

def nvr(h):

return h.sprintf("%{NAME}-%{VERSION}-%{RELEASE}")

Далее - Запросы о конкретных пакетах
Назад - Запросы к БД RPM
Содержание


Архив документации на OpenNet.ru