16.3.6 Уточнение запросов

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

mi.pattern(tag_name, mode, pattern)

Два основных способа сужения области действия запроса: 1. задать более чем один тег для уточнения, например, имя и версию; 2. отфильтровать результаты запроса, используя богатые возможности типизации шаблонов. Параметр mode указывает на тип шаблона, который будет использоваться. Тип может быть одним из следующих:

Тип

Означает

rpm.RPMMIRE_DEFAULT

То же, что регулярное выражение, но с добавлением \., .*, и ^..$

rpm.RPMMIRE_GLOB

Шаблон в стиле globe с использованием fnmatch

rpm.RPMMIRE_REGEX

Регулярные выражения с использованием regcomp

rpm.RPMMIRE_STRCMP

Сравнение строк с использованием strcmp

Например, для запроса всех пакетов, имена которых начинаются на py, используем следующий код:

import rpm

ts = rpm.TransactionSet()

mi = ts.dbMatch()

mi.pattern('name', rpm.RPMMIRE_GLOB, 'py*' )

for h in mi:

# Do something with the header...

Следующий пример (rpmglobe.py) показывает запрос в стиле glob.

#!/usr/bin/python

# Acts like rpm -q and lists the N-V-R for installed packages

# that match a given name using a glob-like syntax

#

# Usage:

# python rpmglob.py "package_fragment*"

import rpm, sys

ts = rpm.TransactionSet()

mi = ts.dbMatch()

if not mi:

print "No packages found."

else:

mi.pattern('name', rpm.RPMMIRE_GLOB, sys.argv[1] )

for h in mi:

print "%s-%s-%s" % (h['name'], h['version'], h['release'])

При запуске скрипта увидим следующее:

$ python rpmglob.py "py*"

pyxf86config-0.3.1-2

python-devel-2.2.1-17

pygtk2-devel-1.99.12-7

pygtk2-libglade-1.99.12-7

pygtk2-1.99.12-7

pyOpenSSL-0.5.0.91-1

python-optik-1.3-2

python-docs-2.2.1-17

python-2.2.1-17

python-tools-2.2.1-17

Кроме работы с БД RPM функционал Python API позволяет непосредственно анализировать файлы rpm-пакетов.

Далее - Чтение хэдера из файла пакета
Назад - Вывод информации о пакете
Содержание