class StreamingAction(Action): def __init__(self, auth=None, streaming=None, url=DEFAULT_URL, version=DEFAULT_VERSION, timeout=DEFAULT_TIMEOUT, io_loop=None): self.auth = auth or {} self._streaming = streaming self._jsonunpacker = JSONUnpacker() self._lasterr = None super(StreamingAction, self).__init__(url, version, timeout, io_loop) def _prepare_auth_header_value(self): username = self.auth.get('username', 'username') password = self.auth.get('password', 'password') return base64.b64encode('{0}:{1}'.format(username, password)) def _handle_message(self, message): if "stream" in message: log.info(message["stream"].rstrip('\n')) elif "error" in message: error_msg = message["error"].rstrip('\n') self._lasterr = DockerException(error_msg) log.error(error_msg) if self._streaming is not None: self._streaming(message) def _on_body(self, data): self._jsonunpacker.feed(data) for i in self._jsonunpacker: self._handle_message(i)
def __init__(self, auth=None, streaming=None, url=DEFAULT_URL, version=DEFAULT_VERSION, timeout=DEFAULT_TIMEOUT, io_loop=None): self.auth = auth or {} self._streaming = streaming self._jsonunpacker = JSONUnpacker() self._lasterr = None super(StreamingAction, self).__init__(url, version, timeout, io_loop)
def test_json(): j = JSONUnpacker() data = {"A": 1} js = json.dumps(data) j.feed(js) j.feed(js) j.feed("A") for i in j: assert i == data assert j.buff == "A"