Введение. Установка. Примеры программ

Введение

Пакет irbis представляет собой фреймворк для создания клиентских приложений для системы автоматизации библиотек ИРБИС64 на языке Python.

Пакет не содержит неуправляемого кода и не требует irbis64_client.dll. Успешно работает на 32-битных и 64-битных версиях операционных систем Windows, Linux и Mac OS X.

Основные возможности пакета:

  • Поиск и расформатирование записей.

  • Создание и модификация записей, сохранение записей в базе данных на сервере.

  • Работа с поисковым словарем: просмотр термов и постингов.

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

  • Импорт и экспорт записей в формате ISO 2709 и в обменном формате ИРБИС.

Поддерживаются Python, начиная с версии 3.6, и сервер ИРБИС64, начиная с 2014. Более ранние версии Python будут выдавать ошибки, т. к. в пакет использует конструкции, присущие Python 3.6. Аналогично обстоит дело и с более ранними версиями сервера ИРБИС64.

Установка

irbis загружен в централизованный репозиторий пакетов PyPI, поэтому можно установить его с помощью стандартного клиента pip, входящего в поставку Python:

pip install irbis --user --upgrade

или

python -m pip install irbis --user --upgrade

(оба способа эквивалентны).

Здесь --user означает установку только для текущего пользователя (без этого ключа установка будет выполняться для всех пользователей и может потребовать администраторских прав), а --upgrade - обновление пакета при необходимости. Если уже установлена последняя версия пакета, то pip просто сообщит об этом и завершит работу.

Также можно установить пакет, скачав необходимые файлы с репозитория GitHub: https://github.com/amironov73/PythonIrbis

Кроме того, доступны ночные dist-сборки на AppVeyor: https://ci.appveyor.com/project/AlexeyMironov/pythonirbis/build/artifacts

Примеры программ

Ниже прилагается пример простой программы. Сначала находятся и загружаются 10 первых библиографических записей, в которых автором является А. С. Пушкин. Показано нахождение значения поля с заданным тегом и подполя с заданным кодом. Также показано расформатирование записи в формат brief.

import irbis

# Подключаемся к серверу
client = irbis.Connection()
client.parse_connection_string('host=127.0.0.1;port=6666;' +
    'database=IBIS;user=librarian;password=secret;')
client.connect()

if not client.connected:
    print('Невозможно подключиться!')
    exit(1)

# Ищем все книги, автором которых является А. С. Пушкин
# Обратите внимание на двойные кавычки в тексте запроса
found = client.search('"A=ПУШКИН$"')
print(f'Найдено записей: {len(found)}')

# Чтобы не распечатывать все найденные записи, отберем только 10 первых
for mfn in found[:10]:
    # Получаем запись из базы данных
    record = client.read_record(mfn)

    # Извлекаем из записи интересующее нас поле и подполе
    title = record.fm(200, 'a')
    print('Заглавие:', title)

    # Форматируем запись средствами сервера
    description = client.format_record(irbis.BRIEF, mfn)
    print('Биб. описание:', description)

    print()  # Добавляем пустую строку

# Отключаемся от сервера
client.disconnect()

В следующей программе создается и отправляется на сервер 10 записей. Показано добавление в запись полей с подполями.

import irbis

# Подключаемся к серверу
client = irbis.Connection()
client.parse_connection_string('host=127.0.0.1;port=6666;' +
                               'database=IBIS;user=1;password=1;')
client.connect()

if not client.connected:
    print('Невозможно подключиться!')
    exit(1)

for i in range(10):
    # Создаем запись
    record = irbis.Record()

    # Наполняем её полями: первый автор
    record.add(700) \
        .add('a', 'Миронов') \
        .add('b', 'А. В.') \
        .add('g', 'Алексей Владимирович')

    # заглавие
    record.add(200) \
        .add('a', f'Работа с ИРБИС64: версия {i}.0') \
        .add('e', 'руководство пользователя')

    # выходные данные
    record.add(210) \
        .add('a', 'Иркутск') \
        .add('c', 'ИРНИТУ') \
        .add('d', '2018')

    # рабочий лист
    record.add(920, 'PAZK')

    # Отсылаем запись на сервер.
    # Обратно приходит запись, обработанная AUTOIN.GBL
    client.write_record(record)
    print(record)  # распечатываем обработанную запись
    print()

# Отключаемся от сервера
client.disconnect()