1
1
from __future__ import annotations
2
2
3
+ from typing import Union
4
+
5
+ from typing_extensions import TypeAlias
6
+
3
7
from .client import APIClient
4
8
from .models import api , errors , operations , responses
5
9
from .models .responses .pipeline import AccessToken
6
10
from .pipeline_data import PipelineDataSink , PipelineDataSource
11
+ from .secret import Secret
12
+
13
+ ConnectorConfiguration : TypeAlias = dict [str , Union [str , list , Secret ]]
7
14
8
15
9
16
class Pipeline (APIClient ):
@@ -14,9 +21,9 @@ def __init__(
14
21
space_id : str | None = None ,
15
22
id : str | None = None ,
16
23
source_kind : str | None = None ,
17
- source_config : dict | None = None ,
24
+ source_config : ConnectorConfiguration | None = None ,
18
25
sink_kind : str | None = None ,
19
- sink_config : dict | None = None ,
26
+ sink_config : ConnectorConfiguration | None = None ,
20
27
requirements : str | None = None ,
21
28
transformation_file : str | None = None ,
22
29
env_vars : list [dict [str , str ]] | None = None ,
@@ -182,9 +189,9 @@ def update(
182
189
requirements : str | None = None ,
183
190
metadata : dict | None = None ,
184
191
source_kind : str | None = None ,
185
- source_config : dict | None = None ,
192
+ source_config : ConnectorConfiguration | None = None ,
186
193
sink_kind : str | None = None ,
187
- sink_config : dict | None = None ,
194
+ sink_config : ConnectorConfiguration | None = None ,
188
195
env_vars : list [dict [str , str ]] | None = None ,
189
196
) -> Pipeline :
190
197
"""
@@ -405,15 +412,19 @@ def _request(
405
412
) from e
406
413
raise e
407
414
408
- @staticmethod
409
415
def _fill_connector (
410
- connector_type : str , kind : str , config : dict
416
+ self , connector_type : str , kind : str , config : dict
411
417
) -> api .SourceConnector | api .SinkConnector :
412
418
"""Format connector input"""
413
419
if not kind and not config :
414
420
connector = None
415
421
elif kind and config :
416
- connector = dict (kind = kind , config = config )
422
+ connector = dict (
423
+ kind = kind ,
424
+ configuration = {
425
+ k : self ._format_connector_config_value (v ) for k , v in config .items ()
426
+ },
427
+ )
417
428
else :
418
429
raise errors .ConnectorConfigValueError (connector_type )
419
430
@@ -424,6 +435,21 @@ def _fill_connector(
424
435
else :
425
436
raise ValueError ("connector_type must be 'source' or 'sink'" )
426
437
438
+ @staticmethod
439
+ def _format_connector_config_value (value : str | list | Secret ):
440
+ """Formats configuration values to match API expectations"""
441
+ if isinstance (value , Secret ):
442
+ config_value = api .ConnectorValueSecretRef (
443
+ ** {"secret_ref" : {"type" : "organization" , "key" : value .key }}
444
+ )
445
+ elif isinstance (value , list ):
446
+ config_value = value
447
+ else :
448
+ config_value = api .ConnectorValueValue (
449
+ value = value ,
450
+ )
451
+ return config_value
452
+
427
453
def _list_access_tokens (self ) -> Pipeline :
428
454
endpoint = f"/pipelines/{ self .id } /access_tokens"
429
455
http_res = self ._request (method = "GET" , endpoint = endpoint )
0 commit comments