def _setup_standalone_component( component_type: Union[Type['TrioIsolatedComponent'], Type['AsyncioIsolatedComponent']], app_identifier: str, ) -> Tuple[Union['TrioIsolatedComponent', 'AsyncioIsolatedComponent'], Tuple[ str, ...]]: if app_identifier == APP_IDENTIFIER_ETH1: app_cfg: Type[BaseAppConfig] = Eth1AppConfig elif app_identifier == APP_IDENTIFIER_BEACON: app_cfg = BeaconAppConfig else: raise ValueError("Unknown app identifier: %s", app_identifier) # Require a root dir to be specified as we don't want to mess with the default one. for action in parser._actions: if action.dest == 'trinity_root_dir': action.required = True break component_type.configure_parser(parser, subparser) parser.add_argument( '--connect-to-endpoints', help= "A list of event bus IPC files for components we should connect to", nargs='+', default=tuple(), ) args = parser.parse_args() # FIXME: Figure out a way to avoid having to set this. args.sync_mode = SYNC_FULL args.enable_metrics = False logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s', datefmt='%H:%M:%S') if args.log_levels is not None: for name, level in args.log_levels.items(): if name is None: name = '' get_logger(name).setLevel(level) trinity_config = TrinityConfig.from_parser_args(args, app_identifier, (app_cfg, )) trinity_config.trinity_root_dir.mkdir(exist_ok=True) if not is_data_dir_initialized(trinity_config): initialize_data_dir(trinity_config) boot_info = BootInfo( args=args, trinity_config=trinity_config, min_log_level=None, logger_levels=None, profile=False, ) return component_type(boot_info), args.connect_to_endpoints
async def run_standalone_component( component: Union[Type['TrioIsolatedComponent'], Type['AsyncioIsolatedComponent']], app_identifier: str, ) -> None: from trinity.extensibility.trio import TrioIsolatedComponent # noqa: F811 from trinity.extensibility.asyncio import AsyncioIsolatedComponent # noqa: F811 if issubclass(component, TrioIsolatedComponent): endpoint_type: Union[Type[TrioEndpoint], Type[AsyncioEndpoint]] = TrioEndpoint elif issubclass(component, AsyncioIsolatedComponent): endpoint_type = AsyncioEndpoint else: raise ValueError("Unknown component type: %s", type(component)) if app_identifier == APP_IDENTIFIER_ETH1: app_cfg: Type[BaseAppConfig] = Eth1AppConfig elif app_identifier == APP_IDENTIFIER_BEACON: app_cfg = BeaconAppConfig else: raise ValueError("Unknown app identifier: %s", app_identifier) # Require a root dir to be specified as we don't want to mess with the default one. for action in parser._actions: if action.dest == 'trinity_root_dir': action.required = True break component.configure_parser(parser, subparser) parser.add_argument( '--connect-to-endpoints', help= "A list of event bus IPC files for components we should connect to", nargs='+', default=tuple(), ) args = parser.parse_args() # FIXME: Figure out a way to avoid having to set this. args.sync_mode = SYNC_FULL logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s', datefmt='%H:%M:%S') if args.log_levels is not None: for name, level in args.log_levels.items(): get_logger(name).setLevel(level) trinity_config = TrinityConfig.from_parser_args(args, app_identifier, (app_cfg, )) trinity_config.trinity_root_dir.mkdir(exist_ok=True) if not is_data_dir_initialized(trinity_config): initialize_data_dir(trinity_config) boot_info = BootInfo( args=args, trinity_config=trinity_config, child_process_log_level=None, logger_levels=None, profile=False, ) conn_config = ConnectionConfig.from_name(component.get_endpoint_name(), trinity_config.ipc_dir) async with endpoint_type.serve(conn_config) as event_bus: for endpoint in args.connect_to_endpoints: path = pathlib.Path(endpoint) if not path.is_socket(): raise ValueError("Invalid IPC path: {path}") connection_config = ConnectionConfig(name=path.stem, path=path) logger.info("Attempting to connect to eventbus endpoint at %s", connection_config) await event_bus.connect_to_endpoints(connection_config) await component.do_run(boot_info, event_bus)