11from __future__ import annotations
22
3- from .parser_utils import MigrationParseError , is_blank , parse_directive_line , parse_quoted_value , split_lines
3+ from .parser_utils import MigrationParseError , is_blank , parse_directive_line , parse_quoted_value , read_directive_block , split_lines
44from .types import ConnectionModel , GCSConnectionModel , KafkaConnectionModel , ResourceFile , S3ConnectionModel
55
6+ CONNECTION_DIRECTIVES = {
7+ "TYPE" ,
8+ "KAFKA_BOOTSTRAP_SERVERS" ,
9+ "KAFKA_SECURITY_PROTOCOL" ,
10+ "KAFKA_SASL_MECHANISM" ,
11+ "KAFKA_KEY" ,
12+ "KAFKA_SECRET" ,
13+ "KAFKA_SCHEMA_REGISTRY_URL" ,
14+ "KAFKA_SSL_CA_PEM" ,
15+ "S3_REGION" ,
16+ "S3_ARN" ,
17+ "S3_ACCESS_KEY" ,
18+ "S3_SECRET" ,
19+ "GCS_SERVICE_ACCOUNT_CREDENTIALS_JSON" ,
20+ }
21+
22+
23+ def _is_connection_directive_line (line : str ) -> bool :
24+ if not line :
25+ return False
26+ directive = parse_directive_line (line )
27+ return directive ["key" ] in CONNECTION_DIRECTIVES
28+
629
730def parse_connection_file (resource : ResourceFile ) -> ConnectionModel :
831 lines = split_lines (resource .content )
@@ -22,9 +45,19 @@ def parse_connection_file(resource: ResourceFile) -> ConnectionModel:
2245 access_secret : str | None = None
2346 service_account_credentials_json : str | None = None
2447
25- for raw_line in lines :
48+ i = 0
49+ while i < len (lines ):
50+ raw_line = lines [i ]
2651 line = raw_line .strip ()
52+
2753 if is_blank (line ) or line .startswith ("#" ):
54+ i += 1
55+ continue
56+
57+ if line == "KAFKA_SSL_CA_PEM >" :
58+ block , next_index = read_directive_block (lines , i + 1 , _is_connection_directive_line )
59+ ssl_ca_pem = "\n " .join (block )
60+ i = next_index
2861 continue
2962
3063 directive = parse_directive_line (line )
@@ -81,6 +114,8 @@ def parse_connection_file(resource: ResourceFile) -> ConnectionModel:
81114 f'Unsupported connection directive in strict mode: "{ line } "' ,
82115 )
83116
117+ i += 1
118+
84119 if not connection_type :
85120 raise MigrationParseError (resource .file_path , "connection" , resource .name , "TYPE directive is required." )
86121
0 commit comments