manual/plugins.rst
.. _plugins:
.. module:: calibre.customize :synopsis: Defines various abstract base classes that can be subclassed to create plugins.
Defines various abstract base classes that can be subclassed to create powerful plugins. The useful classes are:
.. contents:: :depth: 1 :local:
.. _pluginsPlugin:
.. autoclass:: Plugin :members: :member-order: bysource
.. _pluginsFTPlugin:
.. autoclass:: FileTypePlugin :show-inheritance: :members: :member-order: bysource
.. _pluginsMetadataPlugin:
.. autoclass:: MetadataReaderPlugin :show-inheritance: :members: :member-order: bysource
.. autoclass:: MetadataWriterPlugin :show-inheritance: :members: :member-order: bysource
.. autoclass:: CatalogPlugin :show-inheritance: :members: :member-order: bysource
.. _pluginsMetadataSource:
.. module:: calibre.ebooks.metadata.sources.base
.. autoclass:: Source :show-inheritance: :members: :member-order: bysource
.. autoclass:: InternalMetadataCompareKeyGen
.. module:: calibre.customize.conversion
.. autoclass:: InputFormatPlugin :show-inheritance: :members: :member-order: bysource
.. autoclass:: OutputFormatPlugin :show-inheritance: :members: :member-order: bysource
.. module:: calibre.devices.interface
The base class for all device drivers is :class:DevicePlugin. However, if your device exposes itself as a USBMS drive to the operating system,
you should use the USBMS class instead as it implements all the logic needed to support these kinds of devices.
.. autoclass:: DevicePlugin :show-inheritance: :members: :member-order: bysource
.. autoclass:: BookList :show-inheritance: :members: :member-order: bysource
USB Mass Storage based devices ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The base class for such devices is :class:calibre.devices.usbms.driver.USBMS. This class in turn inherits some of its functionality
from its bases, documented below. A typical basic USBMS based driver looks like this:
.. code-block:: python
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])
.. autoclass:: calibre.devices.usbms.device.Device :show-inheritance: :members: :member-order: bysource
.. autoclass:: calibre.devices.usbms.cli.CLI :members: :member-order: bysource
.. autoclass:: calibre.devices.usbms.driver.USBMS :show-inheritance: :members: :member-order: bysource
If you are adding your own plugin in a ZIP file, you should subclass both InterfaceActionBase and InterfaceAction. The
:meth:load_actual_plugin method of your InterfaceActionBase subclass must return an instantiated object of your InterfaceAction subclass.
.. autoclass:: calibre.gui2.actions.InterfaceAction :show-inheritance: :members: :member-order: bysource
.. autoclass:: calibre.customize.InterfaceActionBase :show-inheritance: :members: :member-order: bysource
.. autoclass:: calibre.customize.PreferencesPlugin :show-inheritance: :members: :member-order: bysource
.. autoclass:: calibre.gui2.preferences.ConfigWidgetInterface :members: :member-order: bysource
.. autoclass:: calibre.gui2.preferences.ConfigWidgetBase :members: :member-order: bysource