def sse_connect(): while True: try: messages = SSEClient1(self.url) except (requests.exceptions.ConnectionError, requests.exceptions.HTTPError) as e: self._process_event(Event(data=str(e), event='error')) return self.readyState = _OPEN try: for event in messages: if self.readyState == _CLOSED: # TODO: We should close the underlying HTTP request. logging.info('EventSource closing...') return self._process_event(event) except (ConnectionResetError, requests.exceptions.ConnectionError) as e: # TODO: We do not need to handle ConnectionError, SSEClient does it for us. logging.exception(str(e)) pass logging.debug('EventSource reconnect...') self.readyState = _CONNECTING time.sleep(1)
def test_listen(self): script = "./" node_runner = Mock() formatted = "Zemke via CWT: “Here is a message”" node_runner.format = Mock(return_value=formatted) channel = "1234" endpoint = "http://example.com" client_mock = Mock() guild_mock = Mock() channel_mock = Mock() type(channel_mock).id = PropertyMock(return_value=1234) type(guild_mock).text_channels = PropertyMock( return_value=[channel_mock]) type(client_mock).guilds = PropertyMock(return_value=[guild_mock]) message = { "id": 5000, "category": "SHOUTBOX", "author": { "username": "******" }, "body": "Here is a message", } events = [Event(event="EVENT", data=json.dumps(message))] open_stream = type("SSEClient", (object, ), {"events": lambda x: events}) listener = Listener(client_mock, channel, node_runner, open_stream) cb_mock = Mock() listener.listen(1, cb_mock) cb_mock.assert_called_once_with(int(channel), formatted)
def test_listen_yields_sse_events(mock_iterator, mock_init): mock_init.return_value = None mock_iterator.return_value = iter([Event(id=1234)]) client = RestAdapter(PROCEDURES_URI) result = client.listen() assert next(result).id == 1234
def test_restclientui_handles_listen_event_parse_error(mock_listen_fn, capsys): mock_listen_fn.return_value = [Event(data="")] fire.Fire(RestClientUI, ["listen", "--topics=request.procedure.create"]) captured = capsys.readouterr() assert "" == captured.out mock_listen_fn.return_value = [Event(data="{'invalid json'}")] fire.Fire(RestClientUI, ["listen", "--topics=request.procedure.create"]) captured = capsys.readouterr() assert "- ERROR Could not parse event: {'invalid json'}\n" == captured.out mock_listen_fn.return_value = [ Event(data='{"topic": "this is not correct topic "}') ] fire.Fire(RestClientUI, ["listen", "--topics=request.procedure.create"]) captured = capsys.readouterr() assert "" == captured.out # tests the case where the formatter returns a KeyError mock_listen_fn.return_value = [Event(data='{"topic": "subarray.fault"}')] fire.Fire(RestClientUI, ["listen", "--topics=subarray.fault"]) captured = capsys.readouterr() assert "" == captured.out
["RUNNING", 1601303225.8234824], ["READY", 1601303225.8234867], ["RUNNING", 1601303225.8702714], ["COMPLETE", 1601303225.8702714], ], "stacktrace": None, }, state="COMPLETE", ) ] REST_ADAPTER_LISTEN_RESPONSE = [ Event( data='{"topic": "user.script.announce", "msg": "announced"}', event="some event", id=101, ) ] def parse_rest_create_list_response(resp): """Split the response from the REST API lines into columns Args: resp (string): [description] Returns: [rest_response_object]: [description] """