Source code for edeposit.amqp.calibre

#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# Interpreter version: python 2.7
#
"""
AMQP communication wrapper for calibre's ``ebook-convert`` program.
"""
# Imports =====================================================================
from calibre import convert

from structures import ConversionRequest
from structures import ConversionResponse


# Functions ===================================================================
def _instanceof(instance, class_):
    """Check type by matching ``.__name__``."""
    return type(instance).__name__ == class_.__name__


[docs]def reactToAMQPMessage(message, send_back): """ React to given (AMQP) message. `message` is usually expected to be :py:func:`collections.namedtuple` structure filled with all necessary data. Args: message (\*Request class): only :class:`.ConversionRequest` class is supported right now send_back (fn reference): Reference to function for responding. This is useful for progress monitoring for example. Function takes one parameter, which may be response structure/namedtuple, or string or whatever would be normally returned. Returns: ConversionResponse: response filled with data about conversion and\ converted file. Raises: ValueError: if bad type of `message` structure is given. """ if _instanceof(message, ConversionRequest): return convert( message.input_format, message.output_format, message.b64_data ) raise ValueError( "Unknown type of request: '" + str(type(message)) + "'!" )