def get(self,
         message_template,
         timeout=None,
         header_filter=None,
         latest=None):
     header_fields = message_template.header_parameters
     logger.trace("Get message with params %s" % header_fields)
     if latest:
         self._fill_cache()
     msg = self._get_from_cache(message_template, header_fields,
                                header_filter, latest)
     if msg:
         logger.trace("Cache hit. Cache currently has %s messages" %
                      len(self._cache))
         return msg
     cutoff = time.time() + float(timeout if timeout else 0)
     while not timeout or time.time() < cutoff:
         with self._lock:
             header, pdu_bytes = self._protocol.read(self._stream,
                                                     timeout=timeout)
             if self._matches(header, header_fields, header_filter):
                 return self._to_msg(message_template, header, pdu_bytes)
             else:
                 self._match_or_cache(header, pdu_bytes)
     raise AssertionError('Timeout %fs exceeded in message stream.' %
                          float(timeout))
Beispiel #2
0
 def _decode_one(self, data, bag, little_endian=False):
     for case in self._fields.values():
         try:
             match = case.decode(data, bag, little_endian=little_endian)
             logger.trace("'%s' matches in bag '%s'. value: %r" % (case.name, self.name, match[match.len - 1]))
             return match
         except Exception as e:
             logger.trace("'%s' does not match in bag '%s'. Error: %s" % (case.name, self.name, e.message))
     raise AssertionError("Unable to decode bag value.")
Beispiel #3
0
 def get(self, message_template, timeout=None, header_filter=None):
     header_fields = message_template.header_parameters
     logger.trace("Get message with params %s" % header_fields)
     msg = self._get_from_cache(message_template, header_fields, header_filter)
     if msg:
         logger.trace("Cache hit. Cache currently has %s messages" % len(self._cache))
         return msg
     while True:
         with LOCK:
             header, pdu_bytes = self._protocol.read(self._stream, timeout=timeout)
             if self._matches(header, header_fields, header_filter):
                 return self._to_msg(message_template, header, pdu_bytes)
             else:
                 self._match_or_cache(header, pdu_bytes)
Beispiel #4
0
 def get(self, message_template, timeout=None, header_filter=None):
     header_fields = message_template.header_parameters
     logger.trace("Get message with params %s" % header_fields)
     msg = self._get_from_cache(message_template, header_fields,
                                header_filter)
     if msg:
         logger.trace("Cache hit. Cache currently has %s messages" %
                      len(self._cache))
         return msg
     while True:
         with LOCK:
             header, pdu_bytes = self._protocol.read(self._stream,
                                                     timeout=timeout)
             if self._matches(header, header_fields, header_filter):
                 return self._to_msg(message_template, header, pdu_bytes)
             else:
                 self._match_or_cache(header, pdu_bytes)
Beispiel #5
0
 def get(self, message_template, timeout=None, header_filter=None, latest=None):
     header_fields = message_template.header_parameters
     logger.trace("Get message with params %s" % header_fields)
     if latest:
         self._fill_cache()
     msg = self._get_from_cache(message_template, header_fields, header_filter, latest)
     if msg:
         logger.trace("Cache hit. Cache currently has %s messages" % len(self._cache))
         return msg
     cutoff = time.time() + float(timeout if timeout else 0)
     while not timeout or time.time() < cutoff:
         with LOCK:
             header, pdu_bytes = self._protocol.read(self._stream, timeout=timeout)
             if self._matches(header, header_fields, header_filter):
                 return self._to_msg(message_template, header, pdu_bytes)
             else:
                 self._match_or_cache(header, pdu_bytes)
     raise AssertionError('Timeout %fs exceeded in message stream.' % float(timeout))