def output(self, args, transport: EventTransport, message: EventMessage): """Print out the given message""" serialized = transport.serializer(message) if args.format in ("json", "pretty"): if args.format == "pretty": dumped = json.dumps(serialized, indent=4) else: dumped = json.dumps(serialized) sys.stdout.write(dumped) sys.stdout.write("\n") sys.stdout.flush() elif args.format == "human": print(Colors.BGreen, end="") print(f" {message.api_name}.{message.event_name} ".center(80, "=")) if hasattr(message, "datetime"): print(f" {message.datetime.strftime('%c')} ".center(80, " ")) print(Colors.Reset, end="") print(f"\n{Colors.BWhite}Metadata:{Colors.Reset}") for k, v in message.get_metadata().items(): print(f" {str(k).ljust(20)}: {v}") print(f"\n{Colors.BWhite}Data:{Colors.Reset}") for k, v in message.get_kwargs().items(): if isinstance(v, (dict, list)): v = json.dumps(v) print(f" {str(k).ljust(20)}: {v}") print("\n") else: sys.stderr.write(f"Unknown output format '{args.format}'\n") sys.exit(1)
def output(self, args, transport: EventTransport, message: EventMessage, bus: BusPath): """Print out the given message""" serialized = transport.serializer(message) if args.format in ("json", "pretty"): if args.format == "pretty": dumped = json.dumps(serialized, indent=4) else: dumped = json.dumps(serialized) sys.stdout.write(dumped) sys.stdout.write("\n") sys.stdout.flush() elif args.format == "human": print(Colors.BGreen, end="") print(f" {message.api_name}.{message.event_name} ".center(80, "=")) if hasattr(message, "datetime"): print(f" {message.datetime.strftime('%c')} ".center(80, " ")) print(Colors.Reset, end="") print(f"\n{Colors.BWhite}Metadata:{Colors.Reset}") for k, v in message.get_metadata().items(): print(f" {str(k).ljust(20)}: {v}") print(f"\n{Colors.BWhite}Data:{Colors.Reset}") for k, v in message.get_kwargs().items(): if isinstance(v, (dict, list)): v = json.dumps(v, indent=4) pad = " " * 24 v = "".join(pad + v for v in v.splitlines(keepends=True)).lstrip() print(f" {str(k).ljust(20)}: {v}") if args.validate or args.show_casting: print(f"\n{Colors.BWhite}Extra:{Colors.Reset}") if args.validate: try: bus.client.schema.validate_parameters( message.api_name, message.event_name, message.kwargs) except ValidationError as e: validation_message = f"{Colors.Red}{e}{Colors.Reset}" else: validation_message = f"{Colors.Green}Passed{Colors.Reset}" print(f" Validation: {validation_message}") if args.show_casting: for listener in bus.client.event_client._event_listeners: if (message.api_name, message.event_name) not in listener.events: continue hints = get_type_hints(listener.callable) casted = cast_to_signature(parameters=message.kwargs, callable=listener.callable) print( f"\n {Colors.BWhite}Casting for listener: {listener.name}{Colors.Reset}" ) for key, value in message.kwargs.items(): was = type(value) via = hints[key] now = type(casted[key]) color = Colors.Green if via == now else Colors.Red print(f" " f"{color}{str(key).ljust(20)}: " f"Received a '{was.__name__}', " f"casted to a '{via.__name__}', " f"result was a '{now.__name__}'" f"{Colors.Reset}") print("\n") else: sys.stderr.write(f"Unknown output format '{args.format}'\n") sys.exit(1)