Ejemplo n.º 1
0
def _check_frames(frames):
    if not inspect.isgenerator(frames):
        raise Exception("Invalid frames: not a generator")

    # ensure the frames are in a valid format; valid formats are
    # - <data>  -- will be assumed to be plain text
    # - (<mime_type>, <data>)
    # - (<mime_type>, <data>, <metadata>)
    for (n, frame) in enumerate(frames):
        if frame is None:
            yield None

        elif not utils.is_iterable(frame):
            # default content type is plain text
            yield (MIME_TYPE.TEXT.value, unicode(frame), None)

        else:
            try:
                assert utils.is_iterable(frame), "Not an iterable"
                frame = list(frame)
                frame_length = len(frame)

                if frame_length == 2:
                    (mime_type_, content_), metadata_ = frame, None
                elif frame_length == 3:
                    (mime_type_, content_, metadata_) = frame
                else:
                    raise Exception("Unexpected tuple length: %d" % frame_length)

                yield (_validate_mime_type(mime_type_), content_, metadata_)

            except Exception as e:
                raise Exception("Invalid frame #%d: %s" % (n + 1, e))
Ejemplo n.º 2
0
def register_renderer(renderer, mime_type):
    global _renderers

    if not utils.is_callable(renderer):
        raise ValueError("Invalid renderer: not a function")

    if not utils.is_iterable(mime_type):
        mime_types = (mime_type,)
    else:
        mime_types = mime_type

    for mime_type in mime_types:
        mime_type = _validate_mime_type(mime_type)

        _renderers.insert(0, (renderer, mime_type))
        _logger.debug("added renderer for %s: %s" % (mime_type, renderer))