Прочие (вспомогательные) классы и функции

FoundLine

Строка найденной записи, может содержать результат расформатирования найденной записи. Содержит два поля:

Поле

Тип

Значение

mfn

int

MFN найденной записи

description

str

Результат расформатирования записи (опционально)

Пример применения см. раздел SearchParameters в данной главе.

IniFile, IniSection и IniLine

INI-файл, состоящий из секций, которые в свою очередь состоят из строк вида «ключ=значение».

Клиент получает свой INI-файл при подключении к серверу. Он хранится в свойстве ini_file класса Connection.

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
ini = client.ini_file
dbnnamecat = ini.get_value('Main', 'DBNNAMECAT')
print(f"DBNNAMECAT={dbnnamecat}")
client.disconnect()

Также можно прочитать произвольный INI-файл с сервера ИРБИС64 с помощью метода read_ini_file:

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
ini = client.read_ini_file('3.RDR.KO.INI')
number = ini.get_value('SEARCH', 'ItemNumb')
print(f"Число элементов={number}")
client.disconnect()

TreeFile и TreeNode

TRE-файл – древовидный текстовый справочник. Состоит из узлов, каждый из которых может быть либо узлом самого верхнего уровня, либо дочерним по отношению к узлу более высокого уровня. Уровень узла определяется величиной отступа, с которым соответствующая строка записана в файле справочника.

Класс TreeNode соответствует узлу дерева. Содержит следующие поля:

Поле

Тип

Назначение

children

list

Список дочерних узлов (может быть пустым).

value

str

Текстовое значение узла (не может быть пустым).

level

int

Уровень узла (0 = узел самого верхнего уровня).

Класс TreeFile описывает TRE-файл в целом. Содержит следующие поля:

Поле

Тип

Назначение

roots

list

Список узлов самого верхнего уровня (корневых).

Прочитать древовидный справочник из текстового файла можно с помощью функции load_tree_file:

import irbis

tree = irbis.load_tree_file(r'C:\IRBIS64\Datai\IBIS\ii.tre')
print(tree.roots[0].value)

Загрузить TRE-файл с сервера ИРБИС64 можно с помощью функции read_tree_file:

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
tree = client.read_tree_file('2.IBIS.II.tre')
print(tree.roots[0].value)
client.disconnect()

DatabaseInfo

Информация о базе данных ИРБИС. Класс содержит следующие поля:

Поле

Тип

Назначение

name

str

Имя базы данных (непустое).

description

str

Описание в произвольной форме (может быть пустым).

max_mfn

int

Максимальный MFN.

logically_deleted

list

Перечень MFN логически удалённых записей (может быть пустым).

physically_deleted

list

Перечень MFN физически удалённых записей (может быть пустым).

nonactualized

list

Перечень MFN неактуализированных записей (может быть пустым).

database_locked

bool

Флаг: база заблокирована на ввод.

read_only

bool

Флаг: база доступна только для чтения.

Получение информации о конкретной базе данных (заполняются только поля max_mfn, logically_deleted, physically_deleted, nonactualized, database_locked):

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
info = client.get_database_info('IBIS')
print(f"Удалённых записей: {len(info.logically_deleted)}")
client.disconnect()

Получить список баз данных, доступных для данного АРМ, можно с помощью метода list_databases (заполняются только поля name, description, read_only).

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
databases = client.list_databases('1..dbnam2.mnu')
for db in databases:
    print(f"{db.name} => {db.description}")
client.disconnect()

ProcessInfo

Информация о запущенном на ИРБИС-сервере процессе.

VersionInfo

Информация о версии ИРБИС-сервера.

ClientInfo

Информация о клиенте, подключенном к серверу ИРБИС (не обязательно о текущем).

UserInfo

Информация о зарегистрированном пользователе системы (по данным client_m.mnu). Определены следующие поля:

Поле

Тип

Назначение

number

str

Номер по порядку в списке.

name

str

Логин пользователя.

password

str

Пароль.

cataloger

str

Доступность АРМ «Каталогизатор».

reader

str

Доступность АРМ «Читатель».

circulation

str

Доступность АРМ «Книговыдача».

acquisitions

str

Доступность АРМ «Комплектатор».

provision

str

Доступность АРМ «Книгообеспеченность».

administrator

str

Доступность АРМ «Администратор».

Если строка доступа к АРМ пустая, то доступ пользователя к соответствующему АРМ запрещен.

Получить список зарегистрированных в системе пользователей можно с помощью метода list_users:

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
users = client.list_users()
for user in users:
    print(f"{user.name} => {user.password}")
client.disconnect()

Обновить список зарегистрированных пользователей можно с помощью метода update_user_list:

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
users = client.list_users()
checkhov = irbis.UserInfo()
checkhov.number = str(len(users))
checkhov.name = 'Чехов'
checkhov.password = 'Каштанка'
checkhov.cataloger = 'irbisc_chekhov.ini'
users.append(checkhov)
client.update_user_list(users)
client.disconnect()

TableDefinition

Данные для метода print_table.

ServerStat

Статистика работы ИРБИС-сервера.

PostingParameters

Параметры для запроса постингов с сервера. Содержит следующие поля:

Поле

Тип

Значение

database

str

Имя базы данных

first

int

Номер первого постинга (нумерация с 1)

fmt

str

Опциональный формат

number

int

Количество затребуемых постингов

terms

list

Список терминов, для которых требуются постинги

Получить список постингов с сервера можно с помощью функции read_postings. Класс PostingParameters предоставляет возможность тонко настроить эту функцию:

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
params = irbis.PostingParameters()
params.database = 'IBIS'  # Имя базы данных
params.first = 1  # Постинги, начиная с первого
params.number = 10  # Требуем до 10 постингов
params.terms = ['K=БЕТОН']  # Термины
postings = client.read_postings(params)
for posting in postings:
    print(f"MFN={posting.mfn}, TAG={posting.tag}, OCC={posting.occurrence}")
client.disconnect()

TermParameters

Параметры для запроса терминов с сервера. Содержит следующие поля:

Поле

Тип

Значение

database

str

Имя базы данных

number

int

Количество затребуемых терминов

reverse

bool

Выдавать термины в обратном порядке?

start

str

Стартовый термин

format

str

Опциональный формат

Получить список терминов с сервера можно с помощью функции read_terms. Класс TermParameters предоставляет возможность тонко настроить эту функцию:

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
params = irbis.TermParameters()
params.database = 'IBIS'  # Имя базы данных
params.number = 10  # Требуем выдать до 10 терминов
params.reverse = True  # В обратном порядке
params.start = 'K=БЕТОН'
terms = client.read_terms(params)
for term in terms:
    print(f"{term.text} => {term.count}")
client.disconnect()

TermInfo

Информация о термине поискового словаря. Содержит всего два поля:

Поле

Тип

Значение

count

int

Количество постингов (вхождений) термина в поисковом словаре

text

str

Собственно значение термина

Имейте в виду, что термин может входить в одну и ту же запись несколько раз, и все эти вхождения будут отражены в словаре.

Получить список терминов с сервера можно с помощью функции read_terms.

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
terms = client.read_terms(('K=БЕТОН', 10))
for term in terms:
    print(f"{term.text} => {term.count}")
client.disconnect()

TermPosting

Постинг (вхождение) термина в поисковом индексе. Содержит следующие поля:

Поле

Тип

Значение

mfn

int

MFN записи

tag

int

Метка поля

occurrence

int

Повторение поля

count

int

Позиция в поле

text

str

Опциональный результат расформатирования

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
postings = client.read_postings('K=БЕТОН')
for posting in postings:
    print(f"MFN={posting.mfn}, TAG={posting.tag}, OCC={posting.occurrence}")
client.disconnect()

SearchParameters

Параметры для поиска записей (методы search и search_ex). Содержит следующие поля:

Поле | Тип | Значение по умолчанию | Назначение ———== ==-== ==——————-== ==——— database | str | None | Имя базы данных (опционально) expression | str | None | Выражение для поиска по словарю (быстрый поиск) first | int | 1 | Индекс первой из возвращаемых записей format | str | None | Опциональный формат для найденных записей max_mfn | int | 0 | Максимальный MFN для поиска (опционально) min_mfn | int | 0 | Минимальный MFN для поиска (опционально) number | int | 0 | Количество возвращаемых записей (0 = все) sequential | str | None | Выражение для последовательного поиска (медленный поиск)

Если имя базы данных не задано, подразумевается текущая база данных, к которой подключен клиент.

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
params = irbis.SearchParameters()
params.database = 'IBIS'  # По какой базе ищем
params.expression = '"A=ПУШКИН$"'  # Поиск по словарю
params.number = 10  # Выдать не больше 10 записей
params.format = '@brief'  # Форматирование найденных записей
# Последовательнсый поиск среди отобранных по словарю записей
params.sequential = "if v200^a:'Сказки' then '1' else '0' fi"
found = client.search_ex(params)
for line in found:
    record = client.read_record(line.mfn)
    print(record.fm(200, 'a'))
    # Получаем расформатированную запись
    print(line.description)

SearchScenario

Сценарий поиска. Содержит следующие поля:

Поле

Тип

Значение

name

str

Наименование поискового атрибута (автор, заглавие и т. п.)

prefix

str

Префикс соответствующих терминов в поисковом словаре (может быть пустым)

type

int

Тип словаря для соответствующего поиска

menu

str

Имя файла справочника (меню)

old

str

Имя формата (без расширения)

correction

str

Способ корректировки по словарю

truncation

bool

Исходное положение переключателя «усечение»

hint

str

Текст подсказки/предупреждения

mod_by_dic_auto

str

Параметр пока не задействован

logic

int

Применимые логические операторы

advance

str

Правила автоматического расширения поиска на основе авторитетного файла или тезауруса

format

str

Имя формата показа документов

Нестандартные сценарии поиска можно загрузить с сервера с помощью метода read_search_scenario:

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
scenarios = client.read_search_scenario('2.IBIS.SEARCH.INI')
print(f"Всего сценариев поиска: {len(scenarios)}")
for scenario in scenarios:
    print(f"{scenario.name} => {scenario.prefix}")
client.disconnect()

Стандартный сценарий поиска содержится в INI-файле, полученном клиентом с сервера при подключении:

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
scenarios = irbis.SearchScenario.parse(client.ini_file)
print(f"Всего сценариев поиска: {len(scenarios)}")
for scenario in scenarios:
    print(f"{scenario.name} => {scenario.prefix}")
client.disconnect()

ParFile

PAR-файл – содержит пути к файлам базы данных ИРБИС. Определены следующие поля:

Поле

Тип

Значение

xrf

str

Путь к XRF-файлу

mst

str

Путь к MST-файлу

cnt

str

Путь к CNT-файлу

n01

str

Путь к N01-файлу

n02

str

В ИРБИС64 не используется

l01

str

Путь к L01-файлу

l02

str

В ИРБИС64 не используется

ifp

str

Путь к IFP-файлу

any

str

В ИРБИС64 не используется

pft

str

Путь к PFT-файлам

ext

str

Путь к полнотекстовым файлам

Как правило, все поля, кроме ext, имеют одно и то же значение, т. к. вся база данных, кроме полнотекстовых файлов, хранится в одной и той же директории.

Загрузить PAR-файл из локального текстового файла можно с помощью функции load_par_file:

import irbis

par = irbis.load_par_file(r'C:\IRBIS64\DataI\IBIS.par')
# Получаем путь к MST-файлу
print(par.mst)

Загрузить PAR-файл с сервера ИРБИС64 можно с помощью функции read_par_file:

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
par = client.read_par_file('1..IBIS.par')
# Получаем путь к MST-файлу
print(par.mst)
client.disconnect()

OptFile и OptLine

OPT-файл – файл оптимизации рабочих листов и форматов показа.

Типичный OPT-файл выглядит так:

920
5
PAZK  PAZK42
PVK   PVK42
SPEC  SPEC42
J     !RPJ51
NJ    !NJ31
NJP   !NJ31
NJK   !NJ31
AUNTD AUNTD42
ASP   ASP42
MUSP  MUSP
SZPRF SZPRF
BOUNI BOUNI
IBIS  IBIS
+++++ PAZK42
*****

Класс OptLine представляет одну строку в OPT-файле. Содержит следующие поля.

Поле

Тип

Значение

pattern

str

Шаблон для имени рабочего листа (см. ниже).

worksheet

str

Имя соответствующего WS-файла (без расширения).

Шаблон для имени может содержать символ „+“, означающий «любой символ, в том числе его отсутствие».

Класс OptFile представляет OPT-файл в целом. Содержит следующие поля.

Поле

Тип

Значение

lines

list

Список строк (OptLine).

length

int

Длина шаблона в символах.

tag

int

Метка поля в записи, хранящего имя рабочиего листа.

Определены следующие методы:

  • def parse(self, text) – разбор текстового представления OPT-файла.

  • def resolve_worksheet(self, tag: str) -> Optional[str] – поиск имени WS-файла для указанного значения (например, «SPEC»). Если соответствующего имени не найдено, возвращается None.

  • def save(self, filename) – сохранение в текстовый файл с указанным именем.

Прочитать OPT-файл из локального файла можно с помощью функции load_opt_file:

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
opt = irbis.load_opt_file(r"C:\IRBIS64\Datai\IBIS\WS31.opt")
record = client.read_record(123)
worklist = record.fm(opt.tag)
ws_name = opt.resolve_worksheet(worklist)
print(f"WS name: {ws_name}")
client.disconnect()

Загрузить OPT-файл с сервера можно с помощью функции read_opt_file:

import irbis

client = irbis.Connection()
client.connect('host', 6666, 'librarian', 'secret')
opt = client.read_opt_file('2.IBIS.WS31.opt')
record = client.read_record(123)
worklist = record.fm(opt.tag)
ws_name = opt.resolve_worksheet(worklist)
print(f"WS name: {ws_name}")
client.disconnect()

GblStatement и GblSettings

Классы для глобальной корректировки базы данных.

ClientQuery

Клиентский запрос. Инфраструктурный класс.

ServerResponse

Ответ сервера. Инфраструктурный класс.