@@ -74,7 +74,7 @@ class HiveConnectionDTO(ConnectionDTO):
7474
7575
7676@dataclass
77- class IcebergRESTCatalogS3ConnectionBaseDTO (ConnectionDTO ):
77+ class IcebergRESTCatalogS3DirectConnectionBaseDTO (ConnectionDTO ):
7878 rest_catalog_url : str
7979 s3_warehouse_path : str
8080 s3_host : str
@@ -86,18 +86,18 @@ class IcebergRESTCatalogS3ConnectionBaseDTO(ConnectionDTO):
8686 s3_port : int | None
8787 s3_protocol : str
8888 s3_additional_params : dict
89- type : ClassVar [str ] = "iceberg_rest_s3 "
89+ type : ClassVar [str ] = "iceberg_rest_s3_direct "
9090
9191
9292@dataclass (kw_only = True )
93- class IcebergRESTCatalogBasicAuthS3DTO ( IcebergRESTCatalogS3ConnectionBaseDTO ):
93+ class IcebergRESTCatalogBasicAuthS3BasicDTO ( IcebergRESTCatalogS3DirectConnectionBaseDTO ):
9494 rest_catalog_username : str
9595 rest_catalog_password : str
9696 rest_catalog_auth_type : Literal ["basic" ] = "basic"
9797
9898
9999@dataclass (kw_only = True )
100- class IcebergRESTCatalogOAuth2ClientCredentialsS3DTO ( IcebergRESTCatalogS3ConnectionBaseDTO ):
100+ class IcebergRESTCatalogOAuth2ClientCredentialsS3BasicDTO ( IcebergRESTCatalogS3DirectConnectionBaseDTO ):
101101 rest_catalog_oauth2_client_id : str
102102 rest_catalog_oauth2_client_secret : str
103103 rest_catalog_oauth2_scopes : list [str ]
@@ -107,13 +107,54 @@ class IcebergRESTCatalogOAuth2ClientCredentialsS3DTO(IcebergRESTCatalogS3Connect
107107 rest_catalog_auth_type : Literal ["oauth2" ] = "oauth2"
108108
109109
110+ IcebergRESTCatalogS3DirectConnectionDTO = (
111+ IcebergRESTCatalogBasicAuthS3BasicDTO | IcebergRESTCatalogOAuth2ClientCredentialsS3BasicDTO
112+ )
113+
114+
110115# TODO: should be refactored
111- class IcebergRESTCatalogS3ConnectionDTO :
112- def __new__ (cls , ** data ):
113- if "rest_catalog_oauth2_client_id" in data :
114- return IcebergRESTCatalogOAuth2ClientCredentialsS3DTO (** data )
116+ def get_iceberg_rest_catalog_s3_direct_connection_dto (** data ) -> IcebergRESTCatalogS3DirectConnectionDTO :
117+ if "rest_catalog_oauth2_client_id" in data :
118+ return IcebergRESTCatalogOAuth2ClientCredentialsS3BasicDTO (** data )
119+ return IcebergRESTCatalogBasicAuthS3BasicDTO (** data )
120+
121+
122+ @dataclass
123+ class IcebergRESTCatalogS3DelegatedConnectionBaseDTO (ConnectionDTO ):
124+ rest_catalog_url : str
125+ s3_warehouse_name : str | None = None
126+ s3_access_delegation : Literal ["vended-credentials" , "remote-signing" ] = "vended-credentials"
127+ type : ClassVar [str ] = "iceberg_rest_s3_delegated"
128+
129+
130+ @dataclass (kw_only = True )
131+ class IcebergRESTCatalogBasicAuthS3DelegatedDTO (IcebergRESTCatalogS3DelegatedConnectionBaseDTO ):
132+ rest_catalog_username : str
133+ rest_catalog_password : str
134+ rest_catalog_auth_type : Literal ["basic" ] = "basic"
135+
115136
116- return IcebergRESTCatalogBasicAuthS3DTO (** data )
137+ @dataclass (kw_only = True )
138+ class IcebergRESTCatalogOAuth2ClientCredentialsS3DelegatedDTO (IcebergRESTCatalogS3DelegatedConnectionBaseDTO ):
139+ rest_catalog_oauth2_client_id : str
140+ rest_catalog_oauth2_client_secret : str
141+ rest_catalog_oauth2_scopes : list [str ]
142+ rest_catalog_oauth2_resource : str | None = None
143+ rest_catalog_oauth2_audience : str | None = None
144+ rest_catalog_oauth2_token_endpoint : str | None = None
145+ rest_catalog_auth_type : Literal ["oauth2" ] = "oauth2"
146+
147+
148+ IcebergRESTCatalogS3DelegatedConnectionDTO = (
149+ IcebergRESTCatalogBasicAuthS3DelegatedDTO | IcebergRESTCatalogOAuth2ClientCredentialsS3DelegatedDTO
150+ )
151+
152+
153+ # TODO: should be refactored
154+ def get_iceberg_rest_catalog_s3_delegated_connection_dto (** data ) -> IcebergRESTCatalogS3DelegatedConnectionDTO :
155+ if "rest_catalog_oauth2_client_id" in data :
156+ return IcebergRESTCatalogOAuth2ClientCredentialsS3DelegatedDTO (** data )
157+ return IcebergRESTCatalogBasicAuthS3DelegatedDTO (** data )
117158
118159
119160@dataclass
0 commit comments