Пример #1
0
def test_round_trip_parse():
    m1 = E(data='hi there\nsexy developer',
           event='salutation',
           id='abcdefg',
           retry=10000)

    dumped = m1.dump()
    m2 = E.parse(dumped)
    assert m1.id == m2.id
    assert m1.data == m2.data
    assert m1.retry == m2.retry
    assert m1.event == m2.event
 def messages(self):
     """
     Simulates live event stream by using a dump file of the event stream from:
     `curl -sN host_ip:9999/events > dump_file`
     """
     for_processing = []
     for line in open(self.file_path, 'r'):
         if line == "\n":
             if for_processing != [':\n']:
                 yield Event.parse(''.join(for_processing))
             for_processing = []
             continue
         for_processing.append(line)
Пример #3
0
def test_round_trip_parse():
    m1 = E(
        data='hi there\nsexy developer',
        event='salutation',
        id='abcdefg',
        retry=10000
    )

    dumped = m1.dump()
    m2 = E.parse(dumped)
    assert m1.id == m2.id
    assert m1.data == m2.data
    assert m1.retry == m2.retry
    assert m1.event == m2.event
Пример #4
0
def file_message_streamer(server: str, start_from):
    """
    Simulates live event stream by using a dump file of the event stream from:
    `curl -sN host_ip:9999/events > dump_file`

    server should be full path to file
    """
    for_processing = []
    for line in open(server, 'r'):
        if line == "\n":
            if for_processing != [':\n']:
                msg = Event.parse(''.join(for_processing))
                cur_id = int(msg.id) if msg.id is not None else 0
                if cur_id >= int(start_from):
                    yield msg
            for_processing = []
            continue
        for_processing.append(line)
Пример #5
0
    def __next__(self):
        decoder = codecs.getincrementaldecoder(
            self.resp.encoding)(errors='replace')
        pos = 0
        while end_of_field.search(self.buf, pos) is None:
            try:
                next_chunk = next(self.resp_iterator)
                if not next_chunk:
                    raise EOFError()
                pos = max(0, len(self.buf) - 4)
                self.buf += decoder.decode(next_chunk)

            except (StopIteration, requests.RequestException, EOFError,
                    http.client.IncompleteRead) as e:
                time.sleep(self.retry / 1000.0)
                self._connect()

                # The SSE spec only supports resuming from a whole message, so
                # if we have half a message we should throw it out.
                head, sep, tail = self.buf.rpartition('\n')
                self.buf = head + sep
                continue

        # Split the complete event (up to the end_of_field) into event_string,
        # and retain anything after the current complete event in self.buf
        # for next time.
        (event_string, self.buf) = re.split(end_of_field, self.buf, maxsplit=1)
        msg = Event.parse(event_string)

        # If the server requests a specific retry delay, we need to honor it.
        if msg.retry:
            self.retry = msg.retry

        # last_id should only be set if included in the message.  It's not
        # forgotten if a message omits it.
        if msg.id:
            self.last_id = msg.id

        return msg
Пример #6
0
def test_eols():
    for eol in ('\r\n', '\r', '\n'):
        m = E.parse('event: hello%sdata: eol%s' % (eol, eol))
        assert m.event == 'hello'
        assert m.data == 'eol'
Пример #7
0
def test_default_event():
    m = E.parse('data: blah')
    assert m.event == 'message'
Пример #8
0
def test_retry_is_integer():
    m = E.parse('data: hi\nretry: 4000')
    assert m.retry == 4000
Пример #9
0
def test_comment():
    raw = ":this is a comment\ndata: this is some data"
    m = E.parse(raw)
    assert m.data == 'this is some data'
Пример #10
0
def test_no_space():
    m = E.parse('data:hi')
    assert m.data == 'hi'
Пример #11
0
def test_no_colon():
    m = E.parse('data')
    assert m.data == ''
Пример #12
0
def test_default_event():
    m = E.parse('data: blah')
    assert m.event == 'message'
Пример #13
0
def test_retry_is_integer():
    m = E.parse('data: hi\nretry: 4000')
    assert m.retry == 4000
Пример #14
0
def test_comment():
    raw = ":this is a comment\ndata: this is some data"
    m = E.parse(raw)
    assert m.data == 'this is some data'
Пример #15
0
def test_no_space():
    m = E.parse('data:hi')
    assert m.data == 'hi'
Пример #16
0
def test_no_colon():
    m = E.parse('data')
    assert m.data == ''