Mai Gillmann 4791d00a43 17.12
2019-12-17 14:09:10 +01:00

47 lines
1.5 KiB
Python

# httpstreamformat.py
# ~~~~~~~~~
# This module implements the HttpStreamFormat class.
# :authors: Justin Karneges, Konstantin Bokarius.
# :copyright: (c) 2015 by Fanout, Inc.
# :license: MIT, see LICENSE for more details.
from base64 import b64encode
from pubcontrol import Format
from .gripcontrol import _bin_or_text
# The HttpStreamFormat class is the format used to publish messages to
# HTTP stream clients connected to a GRIP proxy.
class HttpStreamFormat(Format):
# Initialize with either the message content or a boolean indicating that
# the streaming connection should be closed. If neither the content nor
# the boolean flag is set then an error will be raised.
def __init__(self, content=None, close=False, content_filters=None):
self.content = content
self.close = close
self.content_filters = content_filters
if not self.close and self.content is None:
raise ValueError('content not set')
# The name used when publishing this format.
def name(self):
return 'http-stream'
# Exports the message in the required format depending on whether the
# message content is binary or not, or whether the connection should
# be closed.
def export(self):
out = dict()
if self.close:
out['action'] = 'close'
else:
if self.content_filters is not None:
out['content-filters'] = self.content_filters
is_text, val = _bin_or_text(self.content)
if is_text:
out['content'] = val
else:
out['content-bin'] = b64encode(val)
return out