diff --git a/mbed_host_tests/host_tests_conn_proxy/conn_proxy.py b/mbed_host_tests/host_tests_conn_proxy/conn_proxy.py index 0f7b78b..82d8d94 100644 --- a/mbed_host_tests/host_tests_conn_proxy/conn_proxy.py +++ b/mbed_host_tests/host_tests_conn_proxy/conn_proxy.py @@ -28,26 +28,32 @@ class KiViBufferWalker(): """! Simple auxiliary class used to walk through a buffer and search for KV tokens """ def __init__(self): - self.KIVI_REGEX = r"\{\{([\w\d_-]+);([^\}]+)\}\}\n" + self.KIVI_REGEX = r"\{\{([\w\d_-]+);([^\}]+)\}\}" self.buff = str() - self.buff_idx = 0 + self.kvl = [] self.re_kv = re.compile(self.KIVI_REGEX) def append(self, payload): - """! Append stream buffer with payload """ + """! Append stream buffer with payload and process""" self.buff += payload + lines = self.buff.split('\n') + self.buff = lines[-1] # remaining + lines.pop(-1) + + for line in lines: + m = self.re_kv.search(line) + if m: + (key, value) = m.groups() + self.kvl.append((key, value, time())) def search(self): """! Check if there is a KV value in buffer """ - return self.re_kv.search(self.buff[self.buff_idx:]) + return len(self.kvl) > 0 - def get_kv(self): - m = self.re_kv.search(self.buff[self.buff_idx:]) - if m: - (key, value) = m.groups() - kv_str = m.group(0) - self.buff_idx = self.buff.find(kv_str, self.buff_idx) + len(kv_str) - return (key, value, time()) + def pop_kv(self): + if len(self.kvl): + return self.kvl.pop(0) + return None, None, time() def conn_primitive_factory(conn_resource, config, event_queue, logger): @@ -208,7 +214,7 @@ def __send_sync(timeout=None): # Stream data stream KV parsing kv_buffer.append(data) while kv_buffer.search(): - key, value, timestamp = kv_buffer.get_kv() + key, value, timestamp = kv_buffer.pop_kv() if sync_uuid_discovered: event_queue.put((key, value, timestamp))