11from __future__ import annotations
22
33from collections .abc import Mapping
4+ from typing import TYPE_CHECKING
45
56from openml ._api .clients import HTTPClient , MinIOClient
6- from openml ._api .resources import API_REGISTRY , FallbackProxy , ResourceAPI
7- from openml .enums import APIVersion , ResourceType
7+ from openml ._api .resources import API_REGISTRY , FallbackProxy
8+ from openml .enums import ResourceType
9+
10+ if TYPE_CHECKING :
11+ from openml ._api .resources import ResourceAPI
12+ from openml .enums import APIVersion
813
914
1015class APIBackendBuilder :
@@ -41,10 +46,17 @@ class APIBackendBuilder:
4146 API interface for run resources.
4247 setup : ResourceAPI | FallbackProxy
4348 API interface for setup resources.
49+ http_client : HTTPClient
50+ Client for HTTP Communication.
51+ fallback_http_client : HTTPClient | None
52+ Fallback Client for HTTP Communication.
53+ minio_client : MinIOClient
54+ Client for MinIO Communication.
4455 """
4556
4657 def __init__ (
4758 self ,
59+ clients : Mapping [str , HTTPClient | MinIOClient | None ],
4860 resource_apis : Mapping [ResourceType , ResourceAPI | FallbackProxy ],
4961 ):
5062 self .dataset = resource_apis [ResourceType .DATASET ]
@@ -56,6 +68,9 @@ def __init__(
5668 self .study = resource_apis [ResourceType .STUDY ]
5769 self .run = resource_apis [ResourceType .RUN ]
5870 self .setup = resource_apis [ResourceType .SETUP ]
71+ self .http_client = clients ["http_client" ]
72+ self .fallback_http_client = clients ["fallback_http_client" ]
73+ self .minio_client = clients ["minio_client" ]
5974
6075 @classmethod
6176 def build (
@@ -82,17 +97,22 @@ def build(
8297 Builder instance with all resource API interfaces initialized.
8398 """
8499 minio_client = MinIOClient ()
85-
86100 primary_http_client = HTTPClient (api_version = api_version )
101+ clients : dict [str , HTTPClient | MinIOClient | None ] = {
102+ "http_client" : primary_http_client ,
103+ "fallback_http_client" : None ,
104+ "minio_client" : minio_client ,
105+ }
87106
88107 resource_apis : dict [ResourceType , ResourceAPI ] = {}
89108 for resource_type , resource_api_cls in API_REGISTRY [api_version ].items ():
90109 resource_apis [resource_type ] = resource_api_cls (primary_http_client , minio_client )
91110
92111 if fallback_api_version is None :
93- return cls (resource_apis )
112+ return cls (clients , resource_apis )
94113
95114 fallback_http_client = HTTPClient (api_version = fallback_api_version )
115+ clients ["fallback_http_client" ] = fallback_http_client
96116
97117 fallback_resource_apis : dict [ResourceType , ResourceAPI ] = {}
98118 for resource_type , resource_api_cls in API_REGISTRY [fallback_api_version ].items ():
@@ -105,4 +125,4 @@ def build(
105125 for name in resource_apis
106126 }
107127
108- return cls (merged )
128+ return cls (clients , merged )
0 commit comments