Пример #1
0
        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)
Пример #2
0
 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)
Пример #3
0
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
Пример #4
0
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
Пример #5
0
                ["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]
    """