77
88import ordered_set
99
10- # TODO: get rid of these two tries
11- try :
12- import finecode_httpclient
13- except ImportError :
14- finecode_httpclient = None
15-
16- try :
17- from finecode_jsonrpc import jsonrpc_client
18- except ImportError :
19- jsonrpc_client = None
20-
2110from loguru import logger
2211
2312from finecode_extension_api .interfaces import ( # idevenvinfoprovider,
2716 iextensionrunnerinfoprovider ,
2817 ifileeditor ,
2918 ifilemanager ,
30- ihttpclient ,
31- ijsonrpcclient ,
3219 ilogger ,
33- ilspclient ,
3420 iprojectinfoprovider ,
3521 irepositorycredentialsprovider ,
3622)
3723
3824from finecode_extension_runner import domain
3925from finecode_extension_runner ._services import run_action
4026from finecode_extension_runner .di import _state , resolver
27+ from finecode_extension_runner .run_utils import import_module_member_by_source_str
4128from finecode_extension_runner .impls import ( # dev_env_info_provider,
4229 action_runner ,
4330 command_runner ,
4633 file_manager ,
4734 inmemory_cache ,
4835 loguru_logger ,
49- lsp_client ,
5036 project_info_provider ,
5137 repository_credentials_provider ,
5238 service_registry ,
5339)
5440
55-
5641def bootstrap (
5742 project_def_path_getter : Callable [[], pathlib .Path ],
5843 project_raw_config_getter : Callable [
@@ -64,6 +49,7 @@ def bootstrap(
6449 action_by_name_getter : Callable [[str ], domain .ActionDeclaration ],
6550 current_env_name_getter : Callable [[], str ],
6651 handler_packages : set [str ],
52+ service_declarations : list ,
6753):
6854 # logger_instance = loguru_logger.LoguruLogger()
6955 logger_instance = loguru_logger .get_logger ()
@@ -91,22 +77,10 @@ def bootstrap(
9177 _state .container [icache .ICache ] = cache_instance
9278 _state .container [iactionrunner .IActionRunner ] = action_runner_instance
9379
94- if finecode_httpclient is not None :
95- _state .container [ihttpclient .IHttpClient ] = finecode_httpclient .HttpClient (
96- logger = logger_instance
97- )
98-
9980 _state .container [irepositorycredentialsprovider .IRepositoryCredentialsProvider ] = (
10081 repository_credentials_provider .ConfigRepositoryCredentialsProvider ()
10182 )
10283
103- if jsonrpc_client is not None :
104- json_rpc_client_instance = jsonrpc_client .JsonRpcClientImpl ()
105- _state .container [ijsonrpcclient .IJsonRpcClient ] = json_rpc_client_instance
106- _state .container [ilspclient .ILspClient ] = lsp_client .LspClientImpl (
107- json_rpc_client = json_rpc_client_instance ,
108- )
109-
11084 # _state.container[idevenvinfoprovider.IDevEnvInfoProvider] = dev_env_info_provider_instance
11185
11286 _state .factories [iprojectinfoprovider .IProjectInfoProvider ] = functools .partial (
@@ -124,6 +98,7 @@ def bootstrap(
12498 )
12599
126100 _activate_extensions (handler_packages )
101+ _apply_user_service_config (service_declarations )
127102
128103
129104def _activate_extensions (handler_packages : set [str ]) -> None :
@@ -143,6 +118,18 @@ def _activate_extensions(handler_packages: set[str]) -> None:
143118 logger .error (f"Failed to activate extension '{ pkg_name } ': { e } " )
144119
145120
121+ def _apply_user_service_config (service_declarations : list [object ]) -> None :
122+ registry = service_registry .ServiceRegistry ()
123+ for svc in service_declarations :
124+ try :
125+ interface = import_module_member_by_source_str (svc .interface )
126+ impl_cls = import_module_member_by_source_str (svc .source )
127+ registry .register_impl (interface , impl_cls )
128+ logger .trace (f"Configured service '{ svc .source } ' for '{ svc .interface } '" )
129+ except Exception as e :
130+ logger .error (f"Failed to configure service '{ svc .source } ': { e } " )
131+
132+
146133def _collect_activatable_packages (
147134 seed_packages : set [str ],
148135 all_eps : dict [str , importlib .metadata .EntryPoint ],
0 commit comments