Документация API плагинов

Определяет различные абстрактные основные классы, которые можно разделить на подклассы, для создания эффективных плагинов. К полезным классам относятся:

Плагин

class calibre.customize.Plugin(plugin_path)[исходный код]

Плагин calibre. Среди полезных членов:

  • self.installation_type: Сохраняет способ установки плагина.

  • self.plugin_path: Сохраняет путь к содержащему его ZIP-файлу

    этот плагин или None, если это встроенный плагин

  • self.site_customization: Сохраняет введенную строку настройки

    пользователем.

Методы, которые необходимо переопределить в подклассах:

Полезные методы:

supported_platforms = []

Список платформ, на которых работает этот плагин. Например: ['windows', 'osx', 'linux']

name = 'Trivial Plugin'

Название этого плагина. Вы должны установить для него что-то другое, кроме Trivial Plugin, чтобы он работал.

version = (1, 0, 0)

Версия этого плагина в виде трех кортежей (основная, дополнительная, ревизия)

description = 'Ничего не делает'

Короткая строка, описывающая, что делает этот плагин

author = 'Неизвестный'

Автор этого плагина

priority = 1

Если для одного типа файла существует несколько подключаемых модулей, они запускаются в порядке убывания приоритета. Плагины с более высоким приоритетом будут запущены первыми. Максимально возможный приоритет - sys.maxsize. Приоритет по умолчанию = 1.

minimum_calibre_version = (0, 4, 118)

Минимальная требуемая для этого плагина версия calibre

installation_type = None

Способ установки этого плагина

can_be_disabled = True

При False пользователь не сможет отключить этот плагин. Используйте с осторожностью.

type = 'Основной'

Тип плагина. Используется для категоризации в графической оболочке.

initialize()[исходный код]

Вызывается один раз при инициализации подключаемых модулей calibre. Плагины повторно инициализируются каждый раз, когда добавляется новый плагин. Также обратите внимание, что если плагин запускается в рабочем процессе, например, для добавления книг, то плагин будет инициализирован для каждого нового рабочего процесса.

Выполните здесь любую инициализацию конкретного плагина, например, извлечение ресурсов из ZIP-файла плагина. Путь к ZIP-файлу доступен как self.plugin_path.

Обратите внимание, что на данном этапе self.site_customization сейчас недоступен.

config_widget()[исходный код]

Реализуйте этот метод и save_settings() в своем плагине, чтобы использовать настраиваемое диалоговое окно конфигурации, а не полагаться на простую настройку по умолчанию на основе строк.

Этот метод, если он реализован, должен возвращать QWidget. Виджет может иметь необязательный метод validate(), который не принимает аргументов и вызывается сразу после того, как пользователь нажимает кнопку ОК. Изменения применяются тогда и только тогда, когда метод возвращает True.

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

save_settings(config_widget)[исходный код]

Сохраните настройки, указанные пользователем, с помощью config_widget.

Параметры

config_widget – Виджет, возвращаемый config_widget().

do_user_config(parent=None)[исходный код]

Этот метод показывает диалог конфигурации для этого плагина. Он возвращает True, если пользователь нажимает OK, в противном случае - False. Изменения применяются автоматически.

load_resources(names)[исходный код]

Если этот плагин поставляется в виде ZIP-файла (плагин, добавленный пользователем), этот метод позволит вам загружать ресурсы из ZIP-файла.

Например, чтобы загрузить изображение:

pixmap = QPixmap()
pixmap.loadFromData(self.load_resources(['images/icon.png'])['images/icon.png'])
icon = QIcon(pixmap)
Параметры

names – Список путей к ресурсам в ZIP-файле с использованием разделителя /

Результат

Словарь вида {name: file_contents}. Любые имена, которые не были найдены в ZIP-файле, не будут представлены в словаре.

customization_help(gui=False)[исходный код]

Вернуть строку с информацией о том, как настроить этот плагин. По умолчанию вызывается NotImplementedError, что указывает на то, что плагин не требует настройки.

Если вы повторно реализуете этот метод в своем подклассе, пользователю будет предложено ввести строку в качестве настройки для этого плагина. Строка настройки будет доступна как self.site_customization.

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

Параметры

gui – Если True, вернуть HTML-справку, иначе вернуть текстовую справку.

temporary_file(suffix)[исходный код]

Возвращает файловый объект, который является временным файлом в файловой системе. Этот файл останется доступным даже после закрытия и будет удален только при завершении работы интерпретатора. Используйте член name возвращаемого объекта, чтобы получить полный путь к созданному временному файлу

Параметры

suffix – Суффикс временного файла.

cli_main(args)[исходный код]

Этот метод является основной точкой входа для интерфейса командной строки ваших плагинов. Он вызывается, когда пользователь делает: calibre-debug -r «Plugin Name». Любые переданные аргументы присутствуют в переменной args.

FileTypePlugin

class calibre.customize.FileTypePlugin(plugin_path)[исходный код]

Базовые классы: calibre.customize.Plugin

Плагин, связанный с определенным набором типов файлов.

file_types = {}

Набор типов файлов, для которых следует запускать этот плагин. Используйте „*“ для всех типов файлов. Например: {'lit', 'mobi', 'prc'}

on_import = False

Если True, этот плагин запускается при добавлении книг в базу данных

on_postimport = False

Если True, этот плагин запускается после добавления книг в базу данных. В этом случае вызываются методы плагина postimport и postadd.

on_preprocess = False

Если True, этот плагин запускается непосредственно перед конвертацией.

on_postprocess = False

Если True, этот плагин запускается после конвертации в финальный файл, созданный плагином вывода конвертации.

run(path_to_ebook)[исходный код]

Запустить плагин. Должен быть реализован в подклассах. Он должен выполнить все необходимые изменения в электронной книге и вернуть абсолютный путь к измененной электронной книге. Если никаких изменений не требуется, он должен вернуть путь к исходной электронной книге. Если обнаружена ошибка, должно возникнуть исключение. Реализация по умолчанию просто возвращает путь к исходной электронной книге. Обратите внимание, что путь к исходному файлу (до запуска плагинов любого типа файла доступен как self.original_path_to_file).

Изменённый файл электронной книги должен быть создан с помощью метода temporary_file()

Параметры

path_to_ebook – Абсолютный путь к электронной книге.

Результат

Абсолютный путь к изменённой электронной книге.

postimport(book_id, book_format, db)[исходный код]

Вызывается пост-импортом, т.е. после того, как файл книги был добавлен в базу данных. Обратите внимание, что это отличается от postadd(), который вызывается при первом создании записи книги. Этот метод вызывается всякий раз, когда новый файл добавляется к записи книги. Полезно для изменения записи книги на основе содержимого вновь добавленного файла.

Параметры
  • book_id – Идентификатор базы данных добавленной книги.

  • book_format – Тип файла добавленной книги.

  • db – Библиотека базы данных.

postadd(book_id, fmt_map, db)[исходный код]

Вызывается post add, т.е. после того, как книга была добавлена ​​в БД. Обратите внимание, что это отличается от postimport(), который вызывается после того, как в книгу был добавлен отдельный файл книги. postadd() вызывается только тогда, когда вся запись книги, возможно, с более чем одним файлом книги, была создана впервые. Это полезно, если вы хотите изменить запись книги в базе данных при первом добавлении книги в calibre

Параметры
  • book_id – Идентификатор базы данных добавленной книги.

  • fmt_map – Сопоставление формата файла с путем, из которого был добавлен формат файла. Обратите внимание, что это может указывать, а может и не указывать на существующий файл, поскольку иногда файлы добавляются в виде потоков. В этом случае это может быть фиктивное значение или несуществующий путь.

  • db – База данных библиотеки

Плагины метаданных

class calibre.customize.MetadataReaderPlugin(*args, **kwargs)[исходный код]

Базовые классы: calibre.customize.Plugin

Плагин, реализующий чтение метаданных из набора типов файлов.

file_types = {}

Набор типов файлов, для которых следует запускать этот плагин. Например: set(['lit', 'mobi', 'prc'])

get_metadata(stream, type)[исходный код]

Возвращает метаданные для файла, представленного потоком (объект, подобный файлу, который поддерживает чтение). Вызывает исключение при ошибке во входных данных.

Параметры

type – Тип файла. Гарантированно будет одной из записей в file_types.

Результат

Объект calibre.ebooks.metadata.book.Metadata

class calibre.customize.MetadataWriterPlugin(*args, **kwargs)[исходный код]

Базовые классы: calibre.customize.Plugin

Плагин, реализующий чтение метаданных из набора типов файлов.

file_types = {}

Набор типов файлов, для которых следует запускать этот плагин. Например: set(['lit', 'mobi', 'prc'])

set_metadata(stream, mi, type)[исходный код]

Установить метаданные для файла, представленного потоком (объект, подобный файлу, который поддерживает чтение). Вызвать исключение при ошибке во входных данных.

Параметры
  • type – Тип файла. Гарантированно будет одной из записей в file_types.

  • mi – Объект calibre.ebooks.metadata.book.Metadata

Плагины каталогизации

class calibre.customize.CatalogPlugin(plugin_path)[исходный код]

Базовые классы: calibre.customize.Plugin

Плагин, реализующий генератор каталогов.

file_types = {}

Тип выходного файла, для которого следует запустить этот плагин. Например: „epub“ или „xml“.

cli_options = []

Параметры CLI парсера, специфичные для этого плагина, объявленные как namedtuple Option:

из коллекций импортировать namedtuple Option = namedtuple(„Option“, „option, default, dest, help“) cli_options = [Option(“–catalog-title“, default = „My Catalog“, dest = „catalog_title“, help = (_(„Title of generated catalog. nDefault:“) + » „» + „%default“ + «“»))] cli_options parsed в calibre.db.cli.cmd_catalog:option_parser()

initialize()[исходный код]

Если подключаемый модуль не является встроенным, скопируйте файлы .ui и .py подключаемого модуля из ZIP-файла в $TMPDIR. Вкладка будет динамически сгенерирована и добавлена ​​в диалог Параметры каталога в calibre.gui2.dialogs.catalog.py:Catalog.

run(path_to_output, opts, db, ids, notification=None)[исходный код]

Запустить плагин. Должно быть реализовано в подклассах. Он должен сгенерировать каталог в формате, указанном в file_types, и вернуть абсолютный путь к сгенерированному файлу каталога. Если обнаружена ошибка, должно возникнуть исключение.

Сгенерированный файл каталога должен быть создан с помощью метода temporary_file().

Параметры
  • path_to_output – Абсолютный путь к сгенерированному файлу каталога.

  • opts – Словарь аргументов ключевых слов

  • db – Объект LibraryDatabase2

Плагины загрузки метаданных

class calibre.ebooks.metadata.sources.base.Source(*args, **kwargs)[исходный код]

Базовые классы: calibre.customize.Plugin

capabilities = frozenset({})

Набор возможностей, поддерживаемых этим плагином. Полезные возможности: „identify“, „cover“

touched_fields = frozenset({})

Список полей метаданных, которые потенциально могут быть загружены этим плагином на этапе идентификации

has_html_comments = False

Установите значение True, если ваш плагин возвращает комментарии в формате HTML.

supports_gzip_transfer_encoding = False

Установка этого значения в True означает, что объект браузера укажет, что он поддерживает кодировку передачи gzip. Это может ускорить загрузку, но сначала убедитесь, что источник действительно поддерживает кодировку передачи gzip.

ignore_ssl_errors = False

Установите значение True, чтобы игнорировать ошибки сертификата HTTPS при подключении к этому источнику.

cached_cover_url_is_reliable = True

Кешированные URL-адреса обложек иногда могут быть ненадежными (т.е. загрузка может завершиться сбоем или возвращенное изображение может быть поддельным. Если такое часто случается с этим источником, установите значение False

options = ()

Список объектов Option. Они будут использоваться для автоматического создания виджета конфигурации для этого плагина.

config_help_message = None

Строка, которая отображается в верхней части виджета конфигурации для этого плагина.

can_get_multiple_covers = False

Если True, этот источник может вернуть несколько обложек для данного запроса.

auto_trim_covers = False

Если установлено значение True, обложки, загруженные этим плагином, автоматически обрезаются.

prefer_results_with_isbn = True

Если установлено значение True, и этот источник возвращает несколько результатов для запроса, с ISBN и без, результаты без ISBN будут проигнорированы.

is_configured()[исходный код]

Верните False, если ваш плагин нужно настроить, прежде чем его можно будет использовать. Например, может потребоваться имя пользователя/пароль/ключ API.

customization_help()[исходный код]

Вернуть строку с информацией о том, как настроить этот плагин. По умолчанию вызывается NotImplementedError, что указывает на то, что плагин не требует настройки.

Если вы повторно реализуете этот метод в своем подклассе, пользователю будет предложено ввести строку в качестве настройки для этого плагина. Строка настройки будет доступна как self.site_customization.

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

Параметры

gui – Если True, вернуть HTML-справку, иначе вернуть текстовую справку.

config_widget()[исходный код]

Реализуйте этот метод и save_settings() в своем плагине, чтобы использовать настраиваемое диалоговое окно конфигурации, а не полагаться на простую настройку по умолчанию на основе строк.

Этот метод, если он реализован, должен возвращать QWidget. Виджет может иметь необязательный метод validate(), который не принимает аргументов и вызывается сразу после того, как пользователь нажимает кнопку ОК. Изменения применяются тогда и только тогда, когда метод возвращает True.

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

save_settings(config_widget)[исходный код]

Сохраните настройки, указанные пользователем, с помощью config_widget.

Параметры

config_widget – Виджет, возвращаемый config_widget().

get_author_tokens(authors, only_first_author=True)[исходный код]

Взять список авторов и вернуть список токенов, полезных для поискового запроса AND. Эта функция пытается вернуть токены в порядке имени, отчества, фамилии, предполагая, что если в имени автора стоит запятая, имя находится в фамилии, в другой форме.

get_title_tokens(title, strip_joiners=True, strip_subtitle=False)[исходный код]

Взять заголовок и веруть список токенов, полезных для поискового запроса AND. Исключает связки (необязательно) и знаки препинания.

split_jobs(jobs, num)[исходный код]

Разделить список заданий на максимальное количество групп, как можно равномернее.

test_fields(mi)[исходный код]

Вернуть первое поле из self.touched_fields, которое имеет значение null для объекта mi

clean_downloaded_metadata(mi)[исходный код]

Вызовите этот метод в методе идентификации вашего плагина, чтобы нормализовать метаданные перед помещением объекта Metadata в result_queue. Можно использовать собственный алгоритм, подходящий для вашего источника метаданных.

get_book_url(identifiers)[исходный код]

Вернуть 3-tuple или None. 3-tuple (кортеж из трех элементов) имеет форму: (тип_идентификатора, значение_идентификатора, URL-адрес). URL-адрес - это URL-адрес книги, идентифицированной идентификаторами в этом источнике. identifier_type, identifier_value указывают идентификатор, соответствующий URL-адресу. Этот URL-адрес должен быть доступен для просмотра человеком, использующим браузер. Он предназначен для предоставления пользователю интерактивной ссылки, чтобы пользователь мог легко перейти на страницу с книгами в этом источнике. Если URL-адрес не найден, вернуть None. Этот метод должен быть быстрым и последовательным, поэтому используйте его только в том случае, если возможно построить URL-адрес из известной схемы с заданными идентификаторами.

get_book_url_name(idtype, idval, url)[исходный код]

Вернуть человекочитаемое имя из возвращаемого значения get_book_url ().

get_book_urls(identifiers)[исходный код]

Переопределите этот метод, если вы хотите вернуть несколько URL-адресов для этой книги. Вернуть список 3-tuples (кортеж из трех элементов). По умолчанию этот метод просто вызывает get_book_url().

get_cached_cover_url(identifiers)[исходный код]

Вернуть кешированный URL-адрес обложки для книги, идентифицированной идентификаторами dict или None, если такой URL-адрес не существует.

Обратите внимание, что этот метод должен возвращать только проверенные URL-адреса, то есть не те URL-адреса, которые могут привести к общему изображению обложки или ошибке «Не найдено».

id_from_url(url)[исходный код]

Проанализировать URL-адрес и вернуть кортеж в форме: (identifier_type, identifier_value). Если URL-адрес не соответствует шаблону для источника метаданных, вернуть None.

identify_results_keygen(title=None, authors=None, identifiers={})[исходный код]

Вернуть функцию, которая используется для генерации ключа, который может сортировать объекты метаданных по их релевантности с учетом поискового запроса (заголовок, авторы, идентификаторы).

Эти ключи используются для сортировки результатов вызова identify().

Подробнее об алгоритме по умолчанию см. InternalMetadataCompareKeyGen. Повторно реализуйте эту функцию в своем плагине, если алгоритм по умолчанию не подходит.

identify(log, result_queue, abort, title=None, authors=None, identifiers={}, timeout=30)[исходный код]

Определить книгу по её названию/автору/ISBN/и т.д.

Если идентификаторы указаны и совпадений не найдено, и этот источник метаданных не хранит все связанные идентификаторы (например, все ISBN книги), этот метод должен повторить попытку, указав только заголовок и автора (при условии, что они были указаны).

Если этот источник метаданных также предоставляет обложки, URL-адрес обложки должен быть кэширован, чтобы при последующем вызове API получения обложек с тем же ISBN/специальным идентификатором не нужно было снова получать URL-адрес обложки. Используйте для этого API кеширования.

Каждый объект Metadata, помещенный в result_queue этим методом, должен иметь атрибут source_relevance, который является целым числом, указывающим порядок, в котором результаты были возвращены источником метаданных для этого запроса. Это целое число будет использоваться compare_identify_results(). Если порядок не важен, установите его в 0 (ноль) для каждого результата.

Прежде чем объект Metadata будет помещен в result_queue, убедитесь, что вся информация сопоставления обложки/ISBN закэширована.

Параметры
  • log – Объект журнала, используйте его для вывода отладочной информации/ошибок

  • result_queue – Очередь результатов, результаты должны быть помещены в неё. Каждый результат - это объект метаданных.

  • abort – Если abort.is_set() возвращает True, прервать дальнейшую обработку и вернутся как можно скорее.

  • title – Название книги может быть None

  • authors – Список авторов книги может быть None

  • identifiers – Словарь других идентификаторов, чаще всего {„isbn“: „1234 …“}

  • timeout – Тайм-аут в секундах, ни один сетевой запрос не должен зависать дольше таймаута.

Результат

None, если ошибок не было, иначе - представление ошибки в Юникоде, подходящее для показа пользователю.

download_cover(log, result_queue, abort, title=None, authors=None, identifiers={}, timeout=30, get_best_cover=False)[исходный код]

Скачать обложку и поместить её в result_queue. Все параметры имеют то же значение, что и для identify(). Поместить (self, cover_data) в result_queue.

Этот метод должен использовать кешированные URL-адреса обложек для повышения эффективности, при возможности. Когда кэшированных данных нет, большинство плагинов просто вызывают идентификацию и используют её результаты.

Если параметр get_best_cover имеет значение True и этот плагин может получить несколько обложек, он должен получить только «лучшую».

class calibre.ebooks.metadata.sources.base.InternalMetadataCompareKeyGen(mi, source_plugin, title, authors, identifiers)[исходный код]

Сгенерировать ключ сортировки для сравнения релевантности объектов метаданных с учётом поискового запроса. Используется только для сравнения результатов из одного источника метаданных, но не из разных источников.

Ключ сортировки гарантирует, что сортировка в порядке возрастания является сортировкой по убыванию релевантности.

Алгоритм такой:

  • Предпочитать результаты, у которых есть хотя бы один идентификатор, такой же как у запроса

  • Предпочитать результаты с кешированным URL обложки

  • Предпочитать результаты со всеми заполненными полями

  • Предпочитать результаты на том же языке, что и текущий язык пользовательского интерфейса

  • Предпочитать результаты, которые точно соответствуют названию запроса

  • Предпочитать результаты с более длинными комментариями, более чем на 10% длиннее

  • Используйте релевантность результата, полученную в результате поиска источника метаданных

    движок

Плагины преобразования

class calibre.customize.conversion.InputFormatPlugin(*args)[исходный код]

Базовые классы: calibre.customize.Plugin

InputFormatPlugins отвечают за преобразование документа в HTML + OPF + CSS + и т. д. Результаты преобразования должны быть закодированы в UTF-8. Основное действие происходит в convert().

file_types = {}

Набор типов файлов, для которых следует запускать этот плагин. Например: set (['azw', 'mobi', 'prc'])

is_image_collection = False

Если True, этот плагин ввода генерирует коллекцию изображений, по одному на файл HTML. Устанавливается динамически в методе convert, если входные файлы могут быть как коллекциями изображений, так и коллекциями без изображений. Если вы установите для него значение True, то реализуйте метод get_images(), который возвращает список изображений.

core_usage = 1

Количество ядер процессора, используемых этим плагином. Значение -1 означает, что он использует все доступные ядра.

for_viewer = False

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

output_encoding = 'utf-8'

Кодировка, в которой этот модуль ввода создает файлы. Значение None означает, что кодировка не определена и должна определяться индивидуально.

common_options = {<calibre.customize.conversion.OptionRecommendation object>}

Параметры, общие для всех плагинов формата ввода. Не переопределять в подклассах. Вместо этого используйте options. Каждая опция должна быть экземпляром OptionRecommendation.

options = {}

Параметры для настройки поведения этого плагина. Каждая опция должна быть экземпляром OptionRecommendation.

recommendations = {}

Набор из 3-tuples (трех кортежей) формы (option_name, recommended_value, recommendation_level)

get_images()[исходный код]

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

convert(stream, options, file_ext, log, accelerators)[исходный код]

Этот метод должен быть реализован в подклассах. Он должен возвращать путь к созданному файлу OPF или экземпляру OEBBook. Весь вывод должен содержаться в текущей папке. Если этот плагин создает файлы вне текущей папки, их необходимо удалить/пометить для удаления, прежде чем этот метод вернёт значение.

Параметры
  • stream – Файловый объект, содержащий входной файл.

  • options – Параметры для настройки процесса конвертации. Гарантированно наличие атрибутов, соответствующих всем параметрам, заявленным этим плагином. Кроме того, будет подробный атрибут, принимающий целые значения от нуля и выше. Большие числа означают более подробную информацию. Ещё один полезный атрибут - input_profile, который является экземпляром :class:calibre.customize.profiles.InputProfile.

  • file_ext – Расширение (без .) входного файла. Гарантируется, что это будет один из file_types, поддерживаемых этим плагином.

  • log – Объект calibre.utils.logging.Log. Весь вывод должен использовать этот объект.

  • accelarators – Словарь различной информации, которую плагин ввода может легко получить, что ускорит последующие этапы преобразования.

postprocess_book(oeb, opts, log)[исходный код]

Вызывается, чтобы разрешить плагину ввода выполнять постобработку после анализа книги.

specialize(oeb, opts, log, output_fmt)[исходный код]

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

gui_configuration_widget(parent, get_option_by_name, get_option_help, db, book_id=None)[исходный код]

Вызывается для создания виджета, используемого для настройки этого плагина в графическом интерфейсе calibre. Виджет должен быть экземпляром класса PluginWidget. См. примеры встроенных модулей ввода.

class calibre.customize.conversion.OutputFormatPlugin(*args)[исходный код]

Базовые классы: calibre.customize.Plugin

OutputFormatPlugins отвечают за преобразование документа OEB (OPF + HTML) в выходную электронную книгу.

Предполагается, что документ OEB закодирован в UTF-8. Основное действие происходит в convert().

file_type = None

Тип файла (расширение без начальной точки), который выводит этот плагин.

common_options = {<calibre.customize.conversion.OptionRecommendation object>}

Параметры, общие для всех плагинов формата ввода. Не переопределять в подклассах. Вместо этого используйте options. Каждая опция должна быть экземпляром OptionRecommendation.

options = {}

Параметры для настройки поведения этого плагина. Каждая опция должна быть экземпляром OptionRecommendation.

recommendations = {}

Набор из 3-tuples (трех кортежей) формы (option_name, recommended_value, recommendation_level)

property description

str(object=““) -> str str(bytes_or_buffer[, encoding[, errors]]) -> str

Создайте новый строковый объект из данного объекта. Если указаны кодировка или ошибки, то объект должен предоставить буфер данных, который будет декодирован с использованием данной кодировки и обработчика ошибок. В противном случае возвращает результат object.__str__() (если определено) или repr(object). кодировка по умолчанию sys.getdefaultencoding(). по умолчанию используется „strict“.

convert(oeb_book, output, input_plugin, opts, log)[исходный код]

Отрендерить содержимое oeb_book (который является экземпляром calibre.ebooks.oeb.OEBBook) в файл, указанный в output.

Параметры
  • output – Либо файл, подобный объекту, либо строка. Если это строка, это путь к папке, которая может существовать, а может и не существовать. Плагин вывода должен записывать свой вывод в эту папку. Если это объект, подобный файлу, плагин вывода должен записывать свой вывод в файл.

  • input_plugin – Плагин ввода, который использовался в начале конвейера конвертации.

  • opts – Опции конвертации. Гарантировано наличие атрибутов, соответствующих рекомендациям OptionRecommendations этого плагина.

  • log – Логгер. Печатать отладочные/информационные сообщения и т. д.

specialize_options(log, opts, input_fmt)[исходный код]

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

specialize_css_for_output(log, opts, item, stylizer)[исходный код]

Может использоваться для внесения изменений в CSS во время уплощения CSS.

Параметры
  • item – HTML-файл элемента, который обрабатывается

  • stylizer – Объект Stylizer, содержащий уплощённые стили для элемента. Вы можете получить стиль для любого элемента с помощью stylizer.style(element).

gui_configuration_widget(parent, get_option_by_name, get_option_help, db, book_id=None)[исходный код]

Вызывается для создания виджета, используемого для настройки этого плагина в графическом интерфейсе calibre. Виджет должен быть экземпляром класса PluginWidget. См. примеры встроенных модулей ввода.

Драйверы устройств

Базовый класс для всех драйверов устройств DevicePlugin. Однако, если ваше устройство представляет себя для операционной системы как USBMS-накопитель, следует использовать вместо него класс USBMS, поскольку он реализует всю логику, необходимую для поддержки таких типов устройств.

class calibre.devices.interface.DevicePlugin(plugin_path)[исходный код]

Базовые классы: calibre.customize.Plugin

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

FORMATS = ['lrf', 'rtf', 'pdf', 'txt']

Упорядоченный список поддерживаемых форматов

VENDOR_ID = 0

VENDOR_ID может быть целым числом, списком целых чисел или словарем. Если это словарь, то это должен быть словарь словарей в форме:

{
 integer_vendor_id : { product_id : [list of BCDs], ... },
 ...
}
PRODUCT_ID = 0

Целое число или список целых чисел

BCD = None

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

THUMBNAIL_HEIGHT = 68

Высота миниатюр на устройстве

THUMBNAIL_COMPRESSION_QUALITY = 75

Качество сжатия миниатюр. Значение ближе к 100 - миниатюры лучшего качества с минимумом артефактов сжатия. Размер файлов миниатюр увеличивается.

WANTS_UPDATED_THUMBNAILS = False

Значение параметра True, если устройство поддерживает обновление миниатюр обложек во время sync_booklists. При значении True у device.py запрашивается обновление миниатюр обложек при сопоставлении книг.

CAN_SET_METADATA = ['title', 'authors', 'collections']

Можно ли установить метаданные книг через графический интерфейс.

CAN_DO_DEVICE_DB_PLUGBOARD = False

Может ли устройство обрабатывать коммутации метаданных device_db

path_sep = '/'

Разделитель путей для путей к книгам на устройстве

icon = '/home/kovid/work/calibre/resources/images/reader.png'

Значок для этого устройства

UserAnnotation

alias of calibre.devices.interface.Annotation

OPEN_FEEDBACK_MESSAGE = None

В графическом интерфейсе это отображается как сообщение, если не None. Полезно, если открытие может занять много времени

VIRTUAL_BOOK_EXTENSIONS = frozenset({})

Набор расширений, которые являются «виртуальными книгами» на устройстве и поэтому не могут быть просмотрены/сохранены/добавлены в библиотеку. Например: frozenset(['kobo'])

VIRTUAL_BOOK_EXTENSION_MESSAGE = None

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

NUKE_COMMENTS = None

Удалять ли комментарии в копии книги, отправленной на устройство. Если не None, это должна быть короткая строка, которой будут заменены комментарии.

MANAGES_DEVICE_PRESENCE = False

Если True указывает, что этот драйвер полностью управляет обнаружением устройства, извлечением и т. д. При установке для него значение True, вы должны реализовать методы detect_managed_devices и debug_managed_device_detection. Драйвер, для которого установлено значение True, отвечает за обнаружение устройств, управление черным списком устройств, списком извлеченных устройств и т. д. calibre будет периодически вызывать метод detect_managed_devices(), и если он возвращает обнаруженное устройство, calibre вызовет open(). open() будет вызываться каждый раз, когда устройство возвращается, даже если предыдущие вызовы open() завершились неудачно, поэтому драйвер должен поддерживать свой собственный черный список отказавших устройств. Точно так же при извлечении calibre вызовет eject(), а затем, предполагая, что следующий вызов detect_managed_devices() вернет None, вызовет post_yank_cleanup().

SLOW_DRIVEINFO = False

Если установлено True, calibre вызовет метод get_driveinfo() после загрузки списков книг для получения информации о диске.

ASK_TO_ALLOW_CONNECT = False

Если установлено значение True, при первом обнаружении устройства calibre спросит пользователя, хочет ли он управлять устройством с помощью calibre. Если установить параметру значение True, то вы должны реализовать get_device_uid() и ignore_connected_device() и get_user_blacklisted_devices() и set_user_blacklisted_devices()

user_feedback_after_callback = None

Установите значение как словарь формы {„title“: title, „msg“: msg, „det_msg“: detail_msg}, чтобы calibre отображал всплывающее сообщение для пользователя после выполнения некоторых обратных вызовов (в настоящее время только upload_books). Не спамьте пользователя потоком сообщений. Эта переменная проверяется после каждого обратного вызова, поэтому устанавливайте её только при необходимости.

is_usb_connected(devices_on_system, debug=False, only_presence=False)[исходный код]

Вернуть True, device_info, если в данный момент подключено устройство, управляемое этим плагином.

Параметры

devices_on_system – Список подключенных устройств

detect_managed_devices(devices_on_system, force_refresh=False)[исходный код]

Вызывается, только если у MANAGES_DEVICE_PRESENCE значение True.

Просканировать устройства, с которыми может работать этот драйвер. Должен возвращать объект устройства, если устройство найдено. Этот объект будет передан методу open() как connected_device. Если устройство не найдено, вернуть None. Возвращаемый объект может быть любым, calibre его не использует, он передается только в open().

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

Параметры
  • devices_on_system – Набор USB-устройств, обнаруженных в системе.

  • force_refresh – Если True и драйвер использует кеш для предотвращения повторного сканирования, то кеш должен быть очищен.

debug_managed_device_detection(devices_on_system, output)[исходный код]

Вызывается, только если у MANAGES_DEVICE_PRESENCE значение True.

Должен записывать информацию об устройствах, обнаруженных в системе в вывод, представляющий собой файл, подобный объекту.

Должен возвращать True, если устройство было обнаружено и успешно открыто, в противном случае - False.

reset(key='-1', log_packets=False, report_progress=None, detected_device=None)[исходный код]
Параметры
  • key – Ключ для разблокировки устройства

  • log_packets – Если true, поток пакетов к/от устройства логируется.

  • report_progress – Функция, которая вызывается с % прогресса (число от 0 до 100) для различных задач. Если она вызывается с -1, это означает, что задача не имеет информации о ходе выполнения.

  • detected_device – Device information from the device scanner

can_handle_windows(usbdevice, debug=False)[исходный код]

Необязательный метод для выполнения дальнейших проверок устройства, чтобы узнать, способен ли этот драйвер обрабатывать его. Если это не так, он должен вернуть False. Этот метод вызывается только после того, как поставщик, идентификаторы продуктов и bcd совпадают, поэтому он может выполнять некоторые относительно трудоемкие проверки. Реализация по умолчанию возвращает True. Этот метод вызывается только в Windows. См. также can_handle().

Для устройств на базе USBMS этот метод по умолчанию делегирует can_handle(). Таким образом, вам нужно только переопределить can_handle() в подклассе USBMS.

Параметры

usbdevice – USB-устройство, возвращенное calibre.devices.winusb.scan_usb_devices()

can_handle(device_info, debug=False)[исходный код]

Версия для Unix can_handle_windows().

Параметры

device_info – Кортеж из (vid, pid, bcd, производитель, продукт, серийный номер)

open(connected_device, library_uuid)[исходный код]

Выполнить любую инициализацию конкретного устройства. Вызывается после обнаружения устройства, но перед любыми другими функциями, которые обмениваются данными с устройством. Например: для устройств, которые представляют себя как запоминающие устройства USB, этот метод будет отвечать за установку устройства или, если устройство было автоматически смонтировано, за определение места его установки. Метод calibre.devices.usbms.device.Device.open() имеет реализацию этой функции, которая должна служить хорошим примером для запоминающих устройств USB.

Этот метод может вызвать исключение OpenFeedback для отображения сообщения пользователю.

Параметры
  • connected_device – Устройство, которое мы пытаемся открыть. Это кортеж из (идентификатор поставщика, идентификатор продукта, bcd, название производителя, название продукта, серийный номер устройства). Однако у некоторых устройств нет серийного номера, и в Windows присутствуют только первые три поля, остальные - None.

  • library_uuid – UUID текущей библиотеки calibre. Может иметь значение None, если библиотеки нет (например, при использовании из командной строки).

eject()[исходный код]

Размонтировать/извлечь устройство из ОС. Не проверяется есть ли ожидающие задания графического интерфейса пользователя, которым необходимо взаимодействовать с устройством.

ПРИМЕЧАНИЕ. Этот метод нельзя вызывать в том же потоке, что и остальные методы устройства.

post_yank_cleanup()[исходный код]

Вызывается, если пользователь дергает устройство, не извлекая его предварительно.

set_progress_reporter(report_progress)[исходный код]

Установить функцию для сообщения информации о ходе выполнения.

Параметры

report_progress – Функция, которая вызывается с % прогресса (число от 0 до 100) для различных задач. Если она вызывается с -1, это означает, что задача не имеет информации о ходе выполнения.

get_device_information(end_session=True)[исходный код]

Спросить у устройства информацию об устройстве. См. L{DeviceInfoQuery}.

Результат

(имя устройства, версия устройства, версия программного обеспечения на устройстве, тип MIME). Кортеж может дополнительно иметь пятый элемент, который является словарем информации о накопителе. См. пример usbms.driver.

get_driveinfo()[исходный код]

Вернуть словарь driveinfo. Обычно вызывается из get_device_information(), но если загрузка информации о диске для этого драйвера происходит медленно, то следует установить SLOW_DRIVEINFO. В этом случае этот метод будет вызываться calibre после загрузки списков книг. Обратите внимание, что он не вызывается в потоке устройства, поэтому драйвер должен кэшировать информацию о диске в методе books(), и эта функция должна возвращать кэшированные данные.

card_prefix(end_session=True)[исходный код]

Возвращает список из 2 элементов префикса для путей на карточках. Если карта отсутствует, для префикса карты устанавливается значение None. НАПРИМЕР („/place“, „/place2“) (None, „place2“) („place“, None) (None, None)

total_space(end_session=True)[исходный код]
Получить общее пространство, доступное на точках монтирования:
  1. Основная память

  2. Карта памяти A

  3. Карта памяти B

Результат

Список из трех элементов с общим объёмом в байтах (1, 2, 3). Если на конкретном устройстве нет ни одного из этих местоположений, оно должно вернуть 0.

free_space(end_session=True)[исходный код]
Получить свободное место на точках монтирования:
  1. Основная память

  2. Карта 1

  3. Карта 2

Результат

Список из трех элементов со свободным пространством в байтах (1, 2, 3). Если конкретное устройство не имеет ни одного из этих местоположений, оно должно вернуть -1.

books(oncard=None, end_session=True)[исходный код]

Вернуть список электронных книг на устройстве.

Параметры

oncard – Если „carda“ или „cardb“ возвращают список электронных книг на определенной карте памяти, в противном случае возвращает список электронных книг в основной памяти устройства. Если карта указана и на ней нет книг, вернуть пустой список.

Результат

СписокКниг.

upload_books(files, names, on_card=None, end_session=True, metadata=None)[исходный код]

Загрузите список книг на устройство. Если файл уже существует на устройстве, его следует заменить. Этот метод должен вызывать FreeSpaceError, если на устройстве недостаточно свободного места. Текст FreeSpaceError должен содержать слово «card», если on_card не равно None, в противном случае он должен содержать слово «memory».

Параметры
  • files – Список путей

  • names – Список имен файлов книг которые были уже загружены на устройство. len(names) == len(files)

  • metadata – Если не None, это список объектов Metadata. Идея состоит в том, чтобы использовать метаданные, чтобы определить, где на устройстве разместить книгу. len(metadata) == len(files). Помимо обычной обложки (путь к обложке), также может быть атрибут эскиза, который следует использовать в предпочтении. Атрибут эскиза имеет форму (ширина, высота, данные обложки в формате jpeg).

Результат

Список трехэлементных кортежей. Список предназначен для передачи в add_books_to_metadata().

classmethod add_books_to_metadata(locations, metadata, booklists)[исходный код]

Добавить местоположения в списки книг. Эта функция не должна связываться с устройством.

Параметры
  • locations – Результат звонка L {upload_books}

  • metadata – Список объектов Metadata, такой же, как для upload_books().

  • booklists – Кортеж, содержащий результат вызовов (books (oncard = None)(),: meth:books(oncard=“carda“),: meth`books(oncard=“cardb“)`).

delete_books(paths, end_session=True)[исходный код]

Удалять книги по путям на устройстве.

classmethod remove_books_from_metadata(paths, booklists)[исходный код]

Удалить книги из списка метаданных. Эта функция не должна связываться с устройством.

Параметры
  • paths – пути к книгам на устройстве.

  • booklists – Кортеж, содержащий результат вызовов (books (oncard = None)(),: meth:books(oncard=“carda“),: meth`books(oncard=“cardb“)`).

sync_booklists(booklists, end_session=True)[исходный код]

Обновить метаданные на устройстве.

Параметры

booklists – Кортеж, содержащий результат вызовов (books (oncard = None)(),: meth:books(oncard=“carda“),: meth`books(oncard=“cardb“)`).

get_file(path, outfile, end_session=True)[исходный код]

Прочитать файл по пути на устройстве и записать его в outfile.

Параметры

outfile – файловый объект, например sys.stdout, или результат вызова open().

classmethod config_widget()[исходный код]

Должен вернуть QWidget. QWidget содержит настройки интерфейса устройства.

classmethod save_settings(settings_widget)[исходный код]

Должно сохранить настройки на диск. Принимает виджет, созданный в config_widget(), и сохраняет все настройки на диск.

classmethod settings()[исходный код]

Должно вернуть объект opts. Объект opts должен иметь как минимум один атрибут format_map, представляющий собой упорядоченный список форматов для устройства.

set_plugboards(plugboards, pb_func)[исходный код]

предоставить драйверу текущий набор коммутационных панелей и функцию для выбора конкретной коммутационной панели. Этот метод вызывается непосредственно перед add_books и sync_booklists.

pb_func - это вызываемый объект со следующей подписью:

def pb_func(device_name, format, plugboards)

You give it the current device name (either the class name or DEVICE_PLUGBOARD_NAME), the format you are interested in (a „real“ format or „device_db“), and the plugboards (you were given those by set_plugboards, the same place you got this method).

Результат

Нет или один экземпляр коммутационной панели.

set_driveinfo_name(location_code, name)[исходный код]

Задать имя устройства в файле информации о диске „name“. Этот параметр будет действовать до тех пор, пока файл не будет создан заново или имя не будет изменено снова.

Недисковые устройства должны реализовывать этот метод на основе кодов местоположения, возвращаемых методом get_device_information().

prepare_addable_books(paths)[исходный код]

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

Если при подготовке книги произошла ошибка, то вместо пути в возвращаемом списке для этой книги должна быть позиция из трёх кортежей: (исходный_путь, экземпляр исключения, трассировка)

startup()[исходный код]

Вызывается, когда calibre запускает устройство. Выполните любую требуемую инициализацию. Обратите внимание, что можно создать несколько экземпляров класса, и, следовательно, __init__ можно вызывать несколько раз, но только один экземпляр будет вызывать этот метод. Этот метод вызывается в потоке устройства, а не в потоке графического интерфейса пользователя.

shutdown()[исходный код]

Вызывается, когда calibre выключается навсегда или при подготовке к перезапуску. Сделайте любую необходимую очистку. Этот метод вызывается в потоке устройства, а не в потоке графического интерфейса пользователя.

get_device_uid()[исходный код]

Должен возвращать уникальный идентификатор для текущего подключенного устройства (вызывается сразу после успешного вызова open()). Вы должны реализовать этот метод, если вы установите ASK_TO_ALLOW_CONNECT = True

ignore_connected_device(uid)[исходный код]

Должно игнорировать устройство, идентифицированное uid (результат вызова get_device_uid()) в будущем. Вы должны реализовать этот метод, если вы установите ASK_TO_ALLOW_CONNECT = True. Обратите внимание, что эта функция вызывается сразу после open(), поэтому, если open() кэширует какое-то состояние, драйвер должен сбросить это состояние.

get_user_blacklisted_devices()[исходный код]

Вернуть маппинг uid устройства к понятному имени для всех устройств, которые пользователь попросил игнорировать.

set_user_blacklisted_devices(devices)[исходный код]

Задать список идентификаторов устройств, которые должны игнорироваться этим драйвером.

specialize_global_preferences(device_prefs)[исходный код]

Реализуйте этот метод, если ваше устройство хочет переопределить конкретную настройку. Вы должны убедиться, что все сайты вызовов, которым требуется переопределение настроек, используют device_prefs[„something“] вместо prefs[„something“]. Ваш метод должен вызывать device_prefs.set_overrides(pref = val, pref = val, …). В настоящее время используется для: управления метаданными (prefs[„manage_device_metadata“])

set_library_info(library_name, library_uuid, field_metadata)[исходный код]

Реализуйте этот метод, если вам нужна информация о текущей библиотеке calibre. Этот метод вызывается при запуске и при изменении библиотеки calibre при подключении.

is_dynamically_controllable()[исходный код]

Вызывается диспетчером устройств при запуске плагинов. Если этот метод возвращает строку, то а) он поддерживает интерфейс динамического управления диспетчера устройств и б) это имя должно использоваться при разговоре с плагином.

Этот метод можно вызвать в потоке графического интерфейса. Драйвер, реализующий этот метод, должен быть потокобезопасным.

start_plugin()[исходный код]

Этот метод вызывается для запуска плагина. Плагин должен начать принимать подключения устройств, если он это делает. Если плагин уже принимает соединения, ничего не делайте.

Этот метод можно вызвать в потоке графического интерфейса. Драйвер, реализующий этот метод, должен быть потокобезопасным.

stop_plugin()[исходный код]

Этот метод вызывается для остановки плагина. Плагин больше не должен принимать соединения и должен очищаться за собой. Вероятно этот метод должен вызывать выключение. Если плагин уже не принимает подключения, ничего не делайте.

Этот метод можно вызвать в потоке графического интерфейса. Драйвер, реализующий этот метод, должен быть потокобезопасным.

get_option(opt_string, default=None)[исходный код]

Вернуть значение параметра, указанного в opt_string. Этот метод можно вызвать, когда плагин не запущен. Вернуть None, если параметр не существует.

Этот метод можно вызвать в потоке графического интерфейса. Драйвер, реализующий этот метод, должен быть потокобезопасным.

set_option(opt_string, opt_value)[исходный код]

Установить значение параметра, обозначенного opt_string. Этот метод можно вызвать, когда плагин не запущен.

Этот метод можно вызвать в потоке графического интерфейса. Драйвер, реализующий этот метод, должен быть потокобезопасным.

is_running()[исходный код]

Вернуть True, если плагин запущен, иначе false

Этот метод можно вызвать в потоке графического интерфейса. Драйвер, реализующий этот метод, должен быть потокобезопасным.

synchronize_with_db(db, book_id, book_metadata, first_call)[исходный код]

Вызывается во время сопоставления книг, когда книга на устройстве сопоставляется с книгой в базе данных calibre. Метод отвечает за синхронизацию данных с устройства для БД calibre (при необходимости).

Метод должен возвращать кортеж с двумя значениями. Первое значение - это набор идентификаторов книг calibre, измененных, если база данных calibre была изменена, или None, если база данных не была изменена. Если первое значение является пустым набором, то метаданные для книги на устройстве обновляются метаданными calibre и возвращаются на устройство, но обновление графического интерфейса этой книги не выполняется. Полезно, если данные calibre верны, но их необходимо отправить на устройство.

Второе значение само по себе является кортежем с двумя значениями. Первое значение в кортеже указывает, следует ли отправлять на устройство формат книги. Цель состоит в том, чтобы разрешить проверку того, что книга на устройстве совпадает с книгой в calibre. Это значение должно быть None, если книга не отправляется, в противном случае возвращается базовое имя файла на устройстве (строка, вроде foobar.epub). Обязательно укажите расширение в имени. Подсистема устройства создаст задание send_books для всех книг, не возвращающих значений not-None. Примечание: кроме последующего извлечения расширения, имя игнорируется в тех случаях, когда устройство использует шаблон для генерации имени файла, в большинстве случаев так и происходит. Второе значение в возвращенном кортеже указывает, датирован ли формат будущей датой. Вернуть True, если это так, в противном случае вернуть False. calibre отобразит для пользователя диалоговое окно со списком всех книг датированных будущим.

Чрезвычайно важно: этот метод вызывается в потоке графического интерфейса. Он должен быть потокобезопасным по отношению к потоку диспетчера устройств.

book_id: идентификатор calibre книги в базе данных. book_metadata: объект метаданных для книги, поступающий с устройства. first_call: True, если это первый вызов во время синхронизации, в противном случае - False.

class calibre.devices.interface.BookList(oncard, prefix, settings)[исходный код]

Базовые классы: list

Список книг. Каждый объект Book должен иметь поля

  1. название

  2. авторы

  3. размер (размер файла книги)

  4. datetime (кортеж времени в формате UTC)

  5. путь (путь на устройстве к книге)

  6. thumbnail (может быть None). thumbnail - это либо объект str/bytes с данными изображения, либо он должен иметь атрибут image_path, в котором хранится абсолютный (собственный для платформы) путь к изображению.

  7. теги (список строк, может быть пустым).

supports_collections()[исходный код]

Вернуть True, если устройство поддерживает коллекции для этого списка книг.

add_book(book, replace_metadata)[исходный код]

Добавить книгу в список книг. Намерение состоит в том, чтобы поддерживать любые внутренние метаданные устройства. Вернуть True, если необходимо синхронизировать списки книг

remove_book(book)[исходный код]

Удалить книгу из списка книг. Исправить любые метаданные устройства одновременно

get_collections(collection_attributes)[исходный код]

Вернуть словарь коллекций, созданных из collection_attributes. Каждая запись в словаре имеет название коллекции форм:[список книг]

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

Параметры

collection_attributes – Список атрибутов объекта Book

Устройства на базе USB Mass Storage

Базовый класс для таких устройств calibre.devices.usbms.driver.USBMS. Этот класс, в свою очередь, наследует часть своих функций от своих основ, описанных ниже. Типичный базовый драйвер на основе USBMS выглядит так:

from calibre.devices.usbms.driver import USBMS

class PDNOVEL(USBMS):
    name = 'Pandigital Novel device interface'
    gui_name = 'PD Novel'
    description = _('Communicate with the Pandigital Novel')
    author = 'Kovid Goyal'
    supported_platforms = ['windows', 'linux', 'osx']
    FORMATS = ['epub', 'pdf']

    VENDOR_ID   = [0x18d1]
    PRODUCT_ID  = [0xb004]
    BCD         = [0x224]

    THUMBNAIL_HEIGHT = 144

    EBOOK_DIR_MAIN = 'eBooks'
    SUPPORTS_SUB_DIRS = False

    def upload_cover(self, path, filename, metadata):
        coverdata = getattr(metadata, 'thumbnail', None)
        if coverdata and coverdata[2]:
            with open('%s.jpg' % os.path.join(path, filename), 'wb') as coverfile:
                coverfile.write(coverdata[2])
class calibre.devices.usbms.device.Device(plugin_path)[исходный код]

Базовые классы: calibre.devices.usbms.deviceconfig.DeviceConfig, calibre.devices.interface.DevicePlugin

Этот класс обеспечивает логику, общую для всех драйверов для устройств, которые экспортируют себя как запоминающие устройства USB. Предоставляет реализации для установки/извлечения устройств USBMS на всех платформах.

WINDOWS_MAIN_MEM = None

Строка, определяющая основную память устройства в строках идентификатора Windows PnP. Это может быть None, строка, список строк или скомпилированное регулярное выражение.

WINDOWS_CARD_A_MEM = None

Строка, идентифицирующая первую карту устройства в строках идентификатора Windows PnP. Это может быть None, строка, список строк или скомпилированное регулярное выражение.

WINDOWS_CARD_B_MEM = None

Строка, идентифицирующая вторую карту устройства в строках идентификатора Windows PnP. Это может быть None, строка, список строк или скомпилированное регулярное выражение.

OSX_MAIN_MEM_VOL_PAT = None

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

MAX_PATH_LEN = 250

Максимальная длина путей, созданных на устройстве

NEWS_IN_FOLDER = True

Поместите новости в отдельную папку

reset(key='-1', log_packets=False, report_progress=None, detected_device=None)[исходный код]
Параметры
  • key – Ключ для разблокировки устройства

  • log_packets – Если true, поток пакетов к/от устройства логируется.

  • report_progress – Функция, которая вызывается с % прогресса (число от 0 до 100) для различных задач. Если она вызывается с -1, это означает, что задача не имеет информации о ходе выполнения.

  • detected_device – Device information from the device scanner

set_progress_reporter(report_progress)[исходный код]

Установить функцию для сообщения информации о ходе выполнения.

Параметры

report_progress – Функция, которая вызывается с % прогресса (число от 0 до 100) для различных задач. Если она вызывается с -1, это означает, что задача не имеет информации о ходе выполнения.

card_prefix(end_session=True)[исходный код]

Возвращает список из 2 элементов префикса для путей на карточках. Если карта отсутствует, для префикса карты устанавливается значение None. НАПРИМЕР („/place“, „/place2“) (None, „place2“) („place“, None) (None, None)

total_space(end_session=True)[исходный код]
Получить общее пространство, доступное на точках монтирования:
  1. Основная память

  2. Карта памяти A

  3. Карта памяти B

Результат

Список из трех элементов с общим объёмом в байтах (1, 2, 3). Если на конкретном устройстве нет ни одного из этих местоположений, оно должно вернуть 0.

free_space(end_session=True)[исходный код]
Получить свободное место на точках монтирования:
  1. Основная память

  2. Карта 1

  3. Карта 2

Результат

Список из трех элементов со свободным пространством в байтах (1, 2, 3). Если конкретное устройство не имеет ни одного из этих местоположений, оно должно вернуть -1.

windows_sort_drives(drives)[исходный код]

Вызывается для устранения неоднозначности основной памяти и карты памяти для устройств, которые не различают их на основе WINDOWS_CARD_NAME. Например: EB600

can_handle_windows(usbdevice, debug=False)[исходный код]

Необязательный метод для выполнения дальнейших проверок устройства, чтобы узнать, способен ли этот драйвер обрабатывать его. Если это не так, он должен вернуть False. Этот метод вызывается только после того, как поставщик, идентификаторы продуктов и bcd совпадают, поэтому он может выполнять некоторые относительно трудоемкие проверки. Реализация по умолчанию возвращает True. Этот метод вызывается только в Windows. См. также can_handle().

Для устройств на базе USBMS этот метод по умолчанию делегирует can_handle(). Таким образом, вам нужно только переопределить can_handle() в подклассе USBMS.

Параметры

usbdevice – USB-устройство, возвращенное calibre.devices.winusb.scan_usb_devices()

open(connected_device, library_uuid)[исходный код]

Выполнить любую инициализацию конкретного устройства. Вызывается после обнаружения устройства, но перед любыми другими функциями, которые обмениваются данными с устройством. Например: для устройств, которые представляют себя как запоминающие устройства USB, этот метод будет отвечать за установку устройства или, если устройство было автоматически смонтировано, за определение места его установки. Метод calibre.devices.usbms.device.Device.open() имеет реализацию этой функции, которая должна служить хорошим примером для запоминающих устройств USB.

Этот метод может вызвать исключение OpenFeedback для отображения сообщения пользователю.

Параметры
  • connected_device – Устройство, которое мы пытаемся открыть. Это кортеж из (идентификатор поставщика, идентификатор продукта, bcd, название производителя, название продукта, серийный номер устройства). Однако у некоторых устройств нет серийного номера, и в Windows присутствуют только первые три поля, остальные - None.

  • library_uuid – UUID текущей библиотеки calibre. Может иметь значение None, если библиотеки нет (например, при использовании из командной строки).

eject()[исходный код]

Размонтировать/извлечь устройство из ОС. Не проверяется есть ли ожидающие задания графического интерфейса пользователя, которым необходимо взаимодействовать с устройством.

ПРИМЕЧАНИЕ. Этот метод нельзя вызывать в том же потоке, что и остальные методы устройства.

post_yank_cleanup()[исходный код]

Вызывается, если пользователь дергает устройство, не извлекая его предварительно.

sanitize_callback(path)[исходный код]

Обратный вызов, позволяющий отдельным драйверам устройств отменять очистку пути, используемую create_upload_path().

filename_callback(default, mi)[исходный код]

Обратный вызов, позволяющий драйверам изменять имя файла по умолчанию, установленное create_upload_path().

sanitize_path_components(components)[исходный код]

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

get_annotations(path_map)[исходный код]

Разрешить path_map в annotation_map файлов, найденных на устройстве

add_annotation_to_library(db, db_id, annotation)[исходный код]

Добавить аннотацию в библиотеку calibre

class calibre.devices.usbms.cli.CLI[исходный код]
class calibre.devices.usbms.driver.USBMS(plugin_path)[исходный код]

Базовый класс для всех устройств USBMS. Реализует логику отправки/получения/обновления метаданных/кеширования метаданных и т. д.

booklist_class

alias of calibre.devices.usbms.books.BookList

book_class

alias of calibre.devices.usbms.books.Book

get_device_information(end_session=True)[исходный код]

Спросить у устройства информацию об устройстве. См. L{DeviceInfoQuery}.

Результат

(имя устройства, версия устройства, версия программного обеспечения на устройстве, тип MIME). Кортеж может дополнительно иметь пятый элемент, который является словарем информации о накопителе. См. пример usbms.driver.

set_driveinfo_name(location_code, name)[исходный код]

Задать имя устройства в файле информации о диске „name“. Этот параметр будет действовать до тех пор, пока файл не будет создан заново или имя не будет изменено снова.

Недисковые устройства должны реализовывать этот метод на основе кодов местоположения, возвращаемых методом get_device_information().

books(oncard=None, end_session=True)[исходный код]

Вернуть список электронных книг на устройстве.

Параметры

oncard – Если „carda“ или „cardb“ возвращают список электронных книг на определенной карте памяти, в противном случае возвращает список электронных книг в основной памяти устройства. Если карта указана и на ней нет книг, вернуть пустой список.

Результат

СписокКниг.

upload_books(files, names, on_card=None, end_session=True, metadata=None)[исходный код]

Загрузите список книг на устройство. Если файл уже существует на устройстве, его следует заменить. Этот метод должен вызывать FreeSpaceError, если на устройстве недостаточно свободного места. Текст FreeSpaceError должен содержать слово «card», если on_card не равно None, в противном случае он должен содержать слово «memory».

Параметры
  • files – Список путей

  • names – Список имен файлов книг которые были уже загружены на устройство. len(names) == len(files)

  • metadata – Если не None, это список объектов Metadata. Идея состоит в том, чтобы использовать метаданные, чтобы определить, где на устройстве разместить книгу. len(metadata) == len(files). Помимо обычной обложки (путь к обложке), также может быть атрибут эскиза, который следует использовать в предпочтении. Атрибут эскиза имеет форму (ширина, высота, данные обложки в формате jpeg).

Результат

Список трехэлементных кортежей. Список предназначен для передачи в add_books_to_metadata().

upload_cover(path, filename, metadata, filepath)[исходный код]

Загрузить обложку книги на устройство. Реализация по умолчанию ничего не делает.

Параметры
  • path – Полный путь к папке, в которой находится соответствующая книга.

  • filename – Имя файла книги без расширения.

  • metadata – метаданные, принадлежащие книге. Используйте metadata.thumbnail для обложки

  • filepath – Полный путь к файлу электронной книги

add_books_to_metadata(locations, metadata, booklists)[исходный код]

Добавить местоположения в списки книг. Эта функция не должна связываться с устройством.

Параметры
  • locations – Результат звонка L {upload_books}

  • metadata – Список объектов Metadata, такой же, как для upload_books().

  • booklists – Кортеж, содержащий результат вызовов (books (oncard = None)(),: meth:books(oncard=“carda“),: meth`books(oncard=“cardb“)`).

delete_books(paths, end_session=True)[исходный код]

Удалять книги по путям на устройстве.

remove_books_from_metadata(paths, booklists)[исходный код]

Удалить книги из списка метаданных. Эта функция не должна связываться с устройством.

Параметры
  • paths – пути к книгам на устройстве.

  • booklists – Кортеж, содержащий результат вызовов (books (oncard = None)(),: meth:books(oncard=“carda“),: meth`books(oncard=“cardb“)`).

sync_booklists(booklists, end_session=True)[исходный код]

Обновить метаданные на устройстве.

Параметры

booklists – Кортеж, содержащий результат вызовов (books (oncard = None)(),: meth:books(oncard=“carda“),: meth`books(oncard=“cardb“)`).

classmethod normalize_path(path)[исходный код]

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

Действия в пользовательском интерфейсе

Если вы добавляете свой собственный плагин в ZIP-файл, вы должны создать подкласс как InterfaceActionBase, так и InterfaceAction. Метод load_actual_plugin() вашего подкласса InterfaceActionBase должен возвращать экземпляр объекта вашего подкласса InterfaceBase.

class calibre.gui2.actions.InterfaceAction(parent, site_customization)[исходный код]

Базовые классы: PyQt5.QtCore.QObject

Плагин, представляющий «действие», которое может быть выполнено в графическом пользовательском интерфейсе. Все элементы на панели инструментов и контекстных меню реализованы этими плагинами.

Обратите внимание, что этот класс является базовым классом для этих подключаемых модулей, однако, чтобы интегрировать подключаемый модуль с системой подключаемых модулей calibre, вам необходимо создать класс-оболочку, который ссылается на фактический подключаемый модуль. См. Примеры модуля calibre.customize.builtins.

Если два объекта InterfaceAction имеют одинаковое имя, приоритет имеет объект с более высоким приоритетом.

Подклассы должны реализовывать методы genesis(), library_changed(), location_selected() shutting_down() и initialization_complete().

После инициализации этот плагин получает доступ к графическому интерфейсу основного calibre через член gui. Вы можете получить доступ к другим плагинам по имени, например:

self.gui.iactions['Save To Disk']

Чтобы получить доступ к собственному плагину, используйте атрибут interface_action_base_plugin, этот атрибут становится доступным только после инициализации плагина. Полезно, если вы хотите использовать методы из класса плагина, например do_user_config().

QAction, указанный в action_spec, создается автоматически и становится доступным как self.qaction.

name = 'Implement me'

Название плагина. Если присутствуют два плагина с одинаковым именем, приоритет имеет тот, который имеет более высокий приоритет.

priority = 1

Приоритет плагина. Если присутствуют два плагина с одинаковым именем, приоритет имеет тот, который имеет более высокий приоритет.

popup_type = 1

Тип всплывающего меню, когда этот плагин добавляется на панель инструментов.

auto_repeat = False

Следует ли автоматически повторять это действие при удерживании его сочетания клавиш.

action_spec = ('text', 'icon', None, None)

Форма: (текст, путь к значку, всплывающая подсказка, сочетание клавиш) значок, всплывающая подсказка и сочетание клавиш могут иметь значение None, сочетание клавиш должно быть строкой, None или кортежем сочетаний клавиш. Если None, сочетание клавиш, соответствующее действию, не регистрируется. Если вы передаете пустой кортеж, ярлык регистрируется без привязки клавиш по умолчанию.

action_add_menu = False

Если True, меню создается автоматически и добавляется в self.qaction.

action_menu_clone_qaction = False

Если True, клон self.qaction добавляется в меню self.qaction. Если вы хотите, чтобы текст этого действия отличался от текста self.qaction, установите для этой переменной новый текст.

dont_add_to = frozenset({})

Набор локаций, в которые нельзя добавлять это действие. См. all_locations для списка возможных местоположений.

dont_remove_from = frozenset({})

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

action_type = 'global'

Тип действия „current“ означает действие в текущем представлении, „global“ означает действие, которое действует не на текущее представление, а, скорее, на calibre в целом.

accepts_drops = False

Если True, то у этого InterfaceAction будет возможность взаимодействовать с событиями перетаскивания. Подробнее см. в методах accept_enter_event(), accept_drag_move_event(), drop_event().

accept_enter_event(event, mime_data)[исходный код]

Этот метод должен возвращать True, если это действие интерфейса способно обрабатывать событие перетаскивания. Не вызывайте accept/ignore для события, о котором позаботится пользовательский интерфейс calibre.

accept_drag_move_event(event, mime_data)[исходный код]

Этот метод должен возвращать True, если это действие интерфейса способно обрабатывать событие перетаскивания. Не вызывайте accept/ignore для события, о котором позаботится пользовательский интерфейс calibre.

drop_event(event, mime_data)[исходный код]

Этот метод должен выполнять некоторые полезные действия и возвращать True, если это действие интерфейса способно обрабатывать событие drop. Не вызывайте accept/ignore для события, о котором позаботится пользовательский интерфейс calibre. В этой функции не следует выполнять блокирующие/длительные операции. Вместо этого отправьте сигнал или используйте QTimer.singleShot и быстро вернитесь. См. примеры встроенных действий.

create_menu_action(menu, unique_name, text, icon=None, shortcut=None, description=None, triggered=None, shortcut_name=None, persist_shortcut=False)[исходный код]

Удобный метод простого добавления действий в QMenu. Возвращает созданный QAction. Это действие имеет один дополнительный атрибут calibre_shortcut_unique_name, который, если не None, относится к уникальному имени, под которым это действие зарегистрировано диспетчером клавиатуры.

Параметры
  • menu – QMenu вновь созданное действие будет добавлено в

  • unique_name – Уникальное имя для этого действия, оно должно быть уникальным во всем мире, поэтому сделайте его как можно более описательным. Если сомневаетесь, добавьте к нему UUID.

  • text – Текст действия.

  • icon – Либо QIcon, либо имя файла. Имя файла передается встроенной функции I(), поэтому вам не нужно передавать полный путь к папке изображений.

  • shortcut – Строка, список строк, None или False. Если значение равно False, для этого действия не регистрируется комбинация клавиш. Если None, то регистрируется сочетание клавиш без привязки клавиш по умолчанию. Строка и список строк регистрируют ярлык с привязкой клавиш по умолчанию, как указано.

  • description – Описание этого действия. Используется для установки всплывающих подсказок.

  • triggered – Вызываемый объект, связанный с сработавшим сигналом созданного действия.

  • shortcut_name – Текст, отображаемый пользователю при настройке сочетаний клавиш для этого действия. По умолчанию установлено значение text.

  • persist_shortcut – Ярлыки для действий, которые не всегда появляются или зависят от библиотеки, могут исчезнуть при редактировании других сочетаний клавиш, если для параметра persist_shortcut установлено значение True.

load_resources(names)[исходный код]

Если этот плагин поставляется в виде ZIP-файла (плагин, добавленный пользователем), этот метод позволит вам загружать ресурсы из ZIP-файла.

Например, чтобы загрузить изображение:

pixmap = QPixmap()
pixmap.loadFromData(tuple(self.load_resources(['images/icon.png']).values())[0])
icon = QIcon(pixmap)
Параметры

names – Список путей к ресурсам в ZIP-файле с использованием разделителя /

Результат

Словарь формы „{name: file_contents}“. Любые имена, которые не были найдены в ZIP-файле, не будут присутствовать в словаре.

genesis()[исходный код]

Установка этого плагина. Вызывается только один раз во время инициализации. self.gui доступен. Действие, указанное в action_spec, доступно как self.qaction.

location_selected(loc)[исходный код]

Вызывается при изменении отображаемого списка книг в calibre. В настоящее время значения loc следующие: library, main, card и cardb.

Этот метод должен включать/отключать это действие и его вспомогательные действия в зависимости от местоположения.

library_changed(db)[исходный код]

Вызывается при изменении текущей библиотеки.

Параметры

db – LibraryDatabase, соответствующая текущей библиотеке.

gui_layout_complete()[исходный код]

Вызывается один раз за действие, когда макет основного графического интерфейса завершен. Если ваше действие требует внесения изменений в макет, они должны быть выполнены здесь, а не в initialization_complete().

initialization_complete()[исходный код]

Вызывается один раз для каждого действия после завершения инициализации основного графического интерфейса.

shutting_down()[исходный код]

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

class calibre.customize.InterfaceActionBase(*args, **kwargs)[исходный код]

Базовые классы: calibre.customize.Plugin

load_actual_plugin(gui)[исходный код]

Этот метод должен возвращать фактический объект плагина действия интерфейса.

Плагины параметров

class calibre.customize.PreferencesPlugin(plugin_path)[исходный код]

Базовые классы: calibre.customize.Plugin

Плагин, представляющий виджет, отображаемый в диалоговом окне «Настройки».

У этого плагина есть только один важный метод create_widget(). Различные поля плагина определяют его категоризацию в пользовательском интерфейсе.

config_widget = None

Путь импорта к модулю, который содержит класс с именем ConfigWidget, который реализует интерфейс ConfigWidgetInterface. Используется create_widget().

category_order = 100

Где в списке категорий должна быть category этого плагина

name_order = 100

Где в списке имен в категории должен быть gui_name этого плагина

category = None

Категория, в которую должен входить этот плагин

gui_category = None

Название категории, отображаемое пользователю для этого плагина.

gui_name = None

Имя, отображаемое пользователю для этого плагина.

icon = None

Значок этого плагина должен быть абсолютным путем

description = None

Описание, используемое для всплывающих подсказок и т.п.

create_widget(parent=None)[исходный код]

Создать и вернуть фактический виджет Qt, используемый для установки этой группы предпочтений. Виджет должен реализовывать calibre.gui2.preferences.ConfigWidgetInterface.

Реализация по умолчанию использует config_widget для создания экземпляра виджета.

class calibre.gui2.preferences.ConfigWidgetInterface[исходный код]

Этот класс определяет интерфейс, который должны реализовывать все виджеты, отображаемые в диалоговом окне «Настройки». Смотрите ConfigWidgetBase, чтобы узнать о базовом классе, который реализует этот интерфейс и также определяет различные удобные методы.

changed_signal = None

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

supports_restoring_to_defaults = True

Установить значение True, если реализован метод restore_to_defaults().

restore_defaults_desc = 'Восстановление параметров по умолчанию. Вы должны нажать кнопку Применить, чтобы сохранить параметры по умолчанию.'

Всплывающая подсказка для кнопки «Восстановить умолчания»

restart_critical = False

Если True, диалоговое окно Preferences не позволит пользователю устанавливать какие-либо другие предпочтения. Действует только в том случае, если commit() возвращает True.

genesis(gui)[исходный код]

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

Параметры

gui – Главный графический интерфейс пользователя calibre

initialize()[исходный код]

Следует установить для всех значений конфигурации их начальные значения (значения, хранящиеся в файлах конфигурации). Оператор возврата не является обязательным. Вернуть False, если диалоговое окно не должно отображаться.

restore_defaults()[исходный код]

Должно установить для всех значений конфигурации значения по умолчанию.

commit()[исходный код]

Сохранить все изменённые настройки. Вернуть True, если изменения требуют перезапуска, в противном случае - False. Вызвать исключение AbortCommit, чтобы указать, что произошла ошибка. Вы несете ответственность за предоставление пользователю отзыва о том, в чём заключается ошибка и как её исправить.

refresh_gui(gui)[исходный код]

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

class calibre.gui2.preferences.ConfigWidgetBase(parent=None)[исходный код]

Базовый класс, содержащий код для простого добавления стандартных виджетов конфигурации, таких как флажки, поля со списком, текстовые поля и т. д. См. метод register().

Этот класс автоматически обрабатывает уведомление об изменении, сброс до значения по умолчанию, перевод между объектами gui и объектами конфигурации и т. д. для зарегистрированных настроек.

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

register(name, config_obj, gui_name=None, choices=None, restart_required=False, empty_string_is_None=True, setting=<class 'calibre.gui2.preferences.Setting'>)[исходный код]

Зарегистрировать настройки.

Параметры
  • name – Название настройки

  • config – Объект конфигурации, который читает/записывает параметр

  • gui_name – Имя объекта GUI, представляющего интерфейс для изменения настройки. По умолчанию предполагается, что это 'opt_' + name.

  • choices – Если этот параметр основан на множественном выборе (поле со списком), то это - список вариантов. Список представляет собой список из двух кортежей элементов формы: `` [(имя графического интерфейса, значение), …] ``

  • setting – Класс, отвечающий за управление этим параметром. Класс по умолчанию обрабатывает почти все случаи, поэтому этот параметр используется редко.

initialize()[исходный код]

Следует установить для всех значений конфигурации их начальные значения (значения, хранящиеся в файлах конфигурации). Оператор возврата не является обязательным. Вернуть False, если диалоговое окно не должно отображаться.

commit(*args)[исходный код]

Сохранить все изменённые настройки. Вернуть True, если изменения требуют перезапуска, в противном случае - False. Вызвать исключение AbortCommit, чтобы указать, что произошла ошибка. Вы несете ответственность за предоставление пользователю отзыва о том, в чём заключается ошибка и как её исправить.

restore_defaults(*args)[исходный код]

Должно установить для всех значений конфигурации значения по умолчанию.