def diag_cb(msg: diag_msg): if frame_id in msg.header.frame_id: timer.reset() if csv: print(message_to_csv(msg)) # ,end="\r") else: now = msg.header.stamp.sec + 1e-9 * msg.header.stamp.nanosec dt = datetime.datetime.fromtimestamp(now) s_now = dt.strftime("%H:%M:%S.%f")[:-3] print( f"[{s_now:}] {Colors.BOLDMAGENTA}<{msg.header.frame_id}>{Colors.RESET}" ) s: DiagnosticStatus for s in msg.status: color = Colors.INVERT s_level = "STALE" if s.level == DiagnosticStatus.OK: color, s_level = Colors.BOLDGREEN, "OK" elif s.level == DiagnosticStatus.WARN: color, s_level = Colors.BOLDYELLOW, "WARN" elif s.level == DiagnosticStatus.ERROR: color, s_level = Colors.BOLDRED, "ERROR" line = f"\t{color}[ {s.name:<22} : {s_level:>5} ]{Colors.RESET}" print(line) if s.message: print(f"\t↳ {Colors.BOLDCYAN}{s.message}{Colors.RESET}") max_k_len = 0 for v in s.values: if len(v.key) > max_k_len: max_k_len = len(v.key) for v in s.values: print(f"\t {v.key:<{max_k_len+1}}= {v.value}") print("-----")
def cb(msg): nonlocal truncate_length, noarr, nostr print( message_to_csv(msg, truncate_length=truncate_length, no_arr=noarr, no_str=nostr))
def _print_csv(msg, truncate_length, noarr, nostr): if hasattr(msg, '__slots__'): print( message_to_csv(msg, truncate_length=truncate_length, no_arr=noarr, no_str=nostr)) else: print(msg)
def cb(msg): nonlocal truncate_length, noarr, nostr if isinstance(msg, bytes): print(msg) else: print( message_to_csv(msg, truncate_length=truncate_length, no_arr=noarr, no_str=nostr))
def test_primitives(): # Smoke-test the formatters on a bunch of messages msgs = [] msgs.extend(message_fixtures.get_msg_arrays()) msgs.extend(message_fixtures.get_msg_basic_types()) msgs.extend(message_fixtures.get_msg_bounded_sequences()) msgs.extend(message_fixtures.get_msg_builtins()) msgs.extend(message_fixtures.get_msg_constants()) msgs.extend(message_fixtures.get_msg_defaults()) msgs.extend(message_fixtures.get_msg_empty()) msgs.extend(message_fixtures.get_msg_multi_nested()) msgs.extend(message_fixtures.get_msg_nested()) msgs.extend(message_fixtures.get_msg_strings()) msgs.extend(message_fixtures.get_msg_unbounded_sequences()) for m in msgs: message_to_csv(m, 100) message_to_csv(m, None) message_to_ordereddict(m, 100) message_to_ordereddict(m, None) message_to_yaml(m, 100) message_to_yaml(m, None)
def _subscriber_callback(self, msg, info): submsg = msg if self.field is not None: for field in self.field: try: submsg = getattr(submsg, field) except AttributeError as ex: raise RuntimeError( f"Invalid field '{'.'.join(self.field)}': {ex}") # Evaluate the current msg against the supplied expression if self.filter_fn is not None and not self.filter_fn(submsg): return if self.future is not None: self.future.set_result(True) if not hasattr(submsg, '__slots__'): # raw if self.include_message_info: print('---Got new message, message info:---') print(info) print('---Message data:---') print(submsg, end='\n---\n') return if self.csv: to_print = message_to_csv(submsg, truncate_length=self.truncate_length, no_arr=self.no_arr, no_str=self.no_str) if self.include_message_info: to_print = f'{",".join(str(x) for x in info.values())},{to_print}' print(to_print) return # yaml if self.include_message_info: print(yaml.dump(info), end='---\n') print(message_to_yaml(submsg, truncate_length=self.truncate_length, no_arr=self.no_arr, no_str=self.no_str, flow_style=self.flow_style), end='---\n')
def cb(msg): nonlocal truncate_length print(message_to_csv(msg, truncate_length))