airbyte-agent-amazon-ads 0.1.27__tar.gz → 0.1.29__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/CHANGELOG.md +10 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/PKG-INFO +3 -3
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/README.md +2 -2
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/cloud_utils/client.py +1 -1
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/connector_model_loader.py +0 -5
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/executor/local_executor.py +1 -10
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/schema/__init__.py +0 -2
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/schema/extensions.py +22 -2
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/schema/security.py +11 -56
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/pyproject.toml +1 -1
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/.gitignore +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/AUTH.md +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/REFERENCE.md +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/auth_strategies.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/auth_template.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/cloud_utils/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/constants.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/exceptions.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/executor/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/executor/hosted_executor.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/executor/models.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/extensions.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http/adapters/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http/adapters/httpx_adapter.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http/config.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http/exceptions.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http/protocols.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http/response.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http_client.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/introspection.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/logging/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/logging/logger.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/logging/types.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/observability/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/observability/config.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/observability/models.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/observability/redactor.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/observability/session.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/performance/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/performance/instrumentation.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/performance/metrics.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/schema/base.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/schema/components.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/schema/connector.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/schema/operations.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/secrets.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/telemetry/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/telemetry/config.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/telemetry/events.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/telemetry/tracker.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/types.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/utils.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/validation.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/_vendored/connector_sdk/validation_replication.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/connector.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/connector_model.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/models.py +0 -0
- {airbyte_agent_amazon_ads-0.1.27 → airbyte_agent_amazon_ads-0.1.29}/airbyte_agent_amazon_ads/types.py +0 -0
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Amazon Ads changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.29] - 2026-02-03
|
|
4
|
+
- Updated connector definition (YAML version 1.0.6)
|
|
5
|
+
- Source commit: 5ef2158e
|
|
6
|
+
- SDK version: 0.1.0
|
|
7
|
+
|
|
8
|
+
## [0.1.28] - 2026-02-03
|
|
9
|
+
- Updated connector definition (YAML version 1.0.6)
|
|
10
|
+
- Source commit: 5c6dbf88
|
|
11
|
+
- SDK version: 0.1.0
|
|
12
|
+
|
|
3
13
|
## [0.1.27] - 2026-02-03
|
|
4
14
|
- Updated connector definition (YAML version 1.0.6)
|
|
5
15
|
- Source commit: 888d0538
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: airbyte-agent-amazon-ads
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.29
|
|
4
4
|
Summary: Airbyte Amazon-Ads Connector for AI platforms
|
|
5
5
|
Project-URL: Homepage, https://github.com/airbytehq/airbyte-agent-connectors
|
|
6
6
|
Project-URL: Documentation, https://docs.airbyte.com/ai-agents/
|
|
@@ -135,7 +135,7 @@ See the official [Amazon-Ads API reference](https://advertising.amazon.com/API/d
|
|
|
135
135
|
|
|
136
136
|
## Version information
|
|
137
137
|
|
|
138
|
-
- **Package version:** 0.1.
|
|
138
|
+
- **Package version:** 0.1.29
|
|
139
139
|
- **Connector version:** 1.0.6
|
|
140
|
-
- **Generated with Connector SDK commit SHA:**
|
|
140
|
+
- **Generated with Connector SDK commit SHA:** 5ef2158e48be294dd68d60f7d9993684d424d388
|
|
141
141
|
- **Changelog:** [View changelog](https://github.com/airbytehq/airbyte-agent-connectors/blob/main/connectors/amazon-ads/CHANGELOG.md)
|
|
@@ -102,7 +102,7 @@ See the official [Amazon-Ads API reference](https://advertising.amazon.com/API/d
|
|
|
102
102
|
|
|
103
103
|
## Version information
|
|
104
104
|
|
|
105
|
-
- **Package version:** 0.1.
|
|
105
|
+
- **Package version:** 0.1.29
|
|
106
106
|
- **Connector version:** 1.0.6
|
|
107
|
-
- **Generated with Connector SDK commit SHA:**
|
|
107
|
+
- **Generated with Connector SDK commit SHA:** 5ef2158e48be294dd68d60f7d9993684d424d388
|
|
108
108
|
- **Changelog:** [View changelog](https://github.com/airbytehq/airbyte-agent-connectors/blob/main/connectors/amazon-ads/CHANGELOG.md)
|
|
@@ -317,7 +317,7 @@ class AirbyteCloudClient:
|
|
|
317
317
|
)
|
|
318
318
|
"""
|
|
319
319
|
token = await self.get_bearer_token()
|
|
320
|
-
url = f"{self.API_BASE_URL}/api/v1/connectors/
|
|
320
|
+
url = f"{self.API_BASE_URL}/api/v1/integrations/connectors/{connector_id}/execute"
|
|
321
321
|
headers = {"Authorization": f"Bearer {token}"}
|
|
322
322
|
request_body = {
|
|
323
323
|
"entity": entity,
|
|
@@ -766,7 +766,6 @@ def _generate_default_auth_config(auth_type: AuthType) -> AirbyteAuthConfig:
|
|
|
766
766
|
)
|
|
767
767
|
},
|
|
768
768
|
auth_mapping={"token": "${token}"},
|
|
769
|
-
oneOf=None,
|
|
770
769
|
)
|
|
771
770
|
elif auth_type == AuthType.BASIC:
|
|
772
771
|
return AirbyteAuthConfig(
|
|
@@ -793,7 +792,6 @@ def _generate_default_auth_config(auth_type: AuthType) -> AirbyteAuthConfig:
|
|
|
793
792
|
),
|
|
794
793
|
},
|
|
795
794
|
auth_mapping={"username": "${username}", "password": "${password}"},
|
|
796
|
-
oneOf=None,
|
|
797
795
|
)
|
|
798
796
|
elif auth_type == AuthType.API_KEY:
|
|
799
797
|
return AirbyteAuthConfig(
|
|
@@ -812,7 +810,6 @@ def _generate_default_auth_config(auth_type: AuthType) -> AirbyteAuthConfig:
|
|
|
812
810
|
)
|
|
813
811
|
},
|
|
814
812
|
auth_mapping={"api_key": "${api_key}"},
|
|
815
|
-
oneOf=None,
|
|
816
813
|
)
|
|
817
814
|
elif auth_type == AuthType.OAUTH2:
|
|
818
815
|
# OAuth2: No fields are strictly required to support both modes:
|
|
@@ -865,7 +862,6 @@ def _generate_default_auth_config(auth_type: AuthType) -> AirbyteAuthConfig:
|
|
|
865
862
|
"client_id": "${client_id}",
|
|
866
863
|
"client_secret": "${client_secret}",
|
|
867
864
|
},
|
|
868
|
-
oneOf=None,
|
|
869
865
|
)
|
|
870
866
|
else:
|
|
871
867
|
# Unknown auth type - return minimal config
|
|
@@ -876,7 +872,6 @@ def _generate_default_auth_config(auth_type: AuthType) -> AirbyteAuthConfig:
|
|
|
876
872
|
required=None,
|
|
877
873
|
properties={},
|
|
878
874
|
auth_mapping={},
|
|
879
|
-
oneOf=None,
|
|
880
875
|
)
|
|
881
876
|
|
|
882
877
|
|
|
@@ -261,19 +261,10 @@ class LocalExecutor:
|
|
|
261
261
|
auth_mapping = None
|
|
262
262
|
required_fields: list[str] | None = None
|
|
263
263
|
|
|
264
|
-
#
|
|
264
|
+
# Get auth_mapping from the config
|
|
265
265
|
if user_config_spec.auth_mapping:
|
|
266
266
|
auth_mapping = user_config_spec.auth_mapping
|
|
267
267
|
required_fields = user_config_spec.required
|
|
268
|
-
# Check for oneOf (multiple auth options)
|
|
269
|
-
elif user_config_spec.one_of:
|
|
270
|
-
# Find the matching option based on which required fields are present
|
|
271
|
-
for option in user_config_spec.one_of:
|
|
272
|
-
option_required = option.required or []
|
|
273
|
-
if all(field in user_secrets for field in option_required):
|
|
274
|
-
auth_mapping = option.auth_mapping
|
|
275
|
-
required_fields = option_required
|
|
276
|
-
break
|
|
277
268
|
|
|
278
269
|
if not auth_mapping:
|
|
279
270
|
# No matching auth_mapping found, use secrets as-is
|
|
@@ -31,7 +31,6 @@ from .operations import Operation, PathItem
|
|
|
31
31
|
from .security import (
|
|
32
32
|
AirbyteAuthConfig,
|
|
33
33
|
AuthConfigFieldSpec,
|
|
34
|
-
AuthConfigOption,
|
|
35
34
|
OAuth2Flow,
|
|
36
35
|
OAuth2Flows,
|
|
37
36
|
SecurityRequirement,
|
|
@@ -55,7 +54,6 @@ __all__ = [
|
|
|
55
54
|
"OAuth2Flow",
|
|
56
55
|
"OAuth2Flows",
|
|
57
56
|
"AirbyteAuthConfig",
|
|
58
|
-
"AuthConfigOption",
|
|
59
57
|
"AuthConfigFieldSpec",
|
|
60
58
|
# Component models
|
|
61
59
|
"Components",
|
|
@@ -182,12 +182,25 @@ class CacheEntityConfig(BaseModel):
|
|
|
182
182
|
return self.x_airbyte_name or self.entity
|
|
183
183
|
|
|
184
184
|
|
|
185
|
+
class ReplicationConfigPropertyItems(BaseModel):
|
|
186
|
+
"""
|
|
187
|
+
Items definition for array-type replication configuration fields.
|
|
188
|
+
|
|
189
|
+
Defines the schema for items in an array-type replication config property.
|
|
190
|
+
"""
|
|
191
|
+
|
|
192
|
+
model_config = ConfigDict(populate_by_name=True, extra="forbid")
|
|
193
|
+
|
|
194
|
+
type: str
|
|
195
|
+
|
|
196
|
+
|
|
185
197
|
class ReplicationConfigProperty(BaseModel):
|
|
186
198
|
"""
|
|
187
199
|
Property definition for replication configuration fields.
|
|
188
200
|
|
|
189
201
|
Defines a single field in the replication configuration with its type,
|
|
190
|
-
description, and optional default value.
|
|
202
|
+
description, and optional default value. Supports both simple types
|
|
203
|
+
(string, integer, boolean) and array types.
|
|
191
204
|
|
|
192
205
|
Example YAML usage:
|
|
193
206
|
x-airbyte-replication-config:
|
|
@@ -197,6 +210,12 @@ class ReplicationConfigProperty(BaseModel):
|
|
|
197
210
|
title: Start Date
|
|
198
211
|
description: UTC date and time from which to replicate data
|
|
199
212
|
format: date-time
|
|
213
|
+
account_ids:
|
|
214
|
+
type: array
|
|
215
|
+
title: Account IDs
|
|
216
|
+
description: List of account IDs to replicate
|
|
217
|
+
items:
|
|
218
|
+
type: string
|
|
200
219
|
"""
|
|
201
220
|
|
|
202
221
|
model_config = ConfigDict(populate_by_name=True, extra="forbid")
|
|
@@ -205,8 +224,9 @@ class ReplicationConfigProperty(BaseModel):
|
|
|
205
224
|
title: str | None = None
|
|
206
225
|
description: str | None = None
|
|
207
226
|
format: str | None = None
|
|
208
|
-
default: str | int | float | bool | None = None
|
|
227
|
+
default: str | int | float | bool | list | None = None
|
|
209
228
|
enum: list[str] | None = None
|
|
229
|
+
items: ReplicationConfigPropertyItems | None = None
|
|
210
230
|
|
|
211
231
|
|
|
212
232
|
class ReplicationConfig(BaseModel):
|
|
@@ -58,45 +58,6 @@ class AuthConfigFieldSpec(BaseModel):
|
|
|
58
58
|
default: Any | None = None
|
|
59
59
|
|
|
60
60
|
|
|
61
|
-
class AuthConfigOption(BaseModel):
|
|
62
|
-
"""
|
|
63
|
-
A single authentication configuration option.
|
|
64
|
-
|
|
65
|
-
Defines user-facing fields and how they map to auth parameters.
|
|
66
|
-
"""
|
|
67
|
-
|
|
68
|
-
model_config = ConfigDict(populate_by_name=True, extra="forbid")
|
|
69
|
-
|
|
70
|
-
title: str | None = None
|
|
71
|
-
description: str | None = None
|
|
72
|
-
type: Literal["object"] = "object"
|
|
73
|
-
required: List[str] = Field(default_factory=list)
|
|
74
|
-
properties: Dict[str, AuthConfigFieldSpec] = Field(default_factory=dict)
|
|
75
|
-
auth_mapping: Dict[str, str] = Field(
|
|
76
|
-
default_factory=dict,
|
|
77
|
-
description="Mapping from auth parameters (e.g., 'username', 'password', 'token') to template strings using ${field} syntax",
|
|
78
|
-
)
|
|
79
|
-
replication_auth_key_mapping: Dict[str, str] | None = Field(
|
|
80
|
-
None,
|
|
81
|
-
description="Mapping from source config paths (e.g., 'credentials.api_key') to auth config keys for direct connectors",
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
@model_validator(mode="after")
|
|
85
|
-
def validate_replication_auth_key_mapping(self) -> "AuthConfigOption":
|
|
86
|
-
"""Validate that replication_auth_key_mapping target keys exist in properties."""
|
|
87
|
-
if self.replication_auth_key_mapping and self.properties:
|
|
88
|
-
property_names = set(self.properties.keys())
|
|
89
|
-
for airbyte_path, our_key in self.replication_auth_key_mapping.items():
|
|
90
|
-
if our_key not in property_names:
|
|
91
|
-
option_context = f"oneOf option '{self.title}'" if self.title else "oneOf option"
|
|
92
|
-
available = ", ".join(sorted(property_names)) if property_names else "(none)"
|
|
93
|
-
raise ValueError(
|
|
94
|
-
f"replication_auth_key_mapping in {option_context}: target key '{our_key}' "
|
|
95
|
-
f"(mapped from '{airbyte_path}') not found in properties. Available: {available}"
|
|
96
|
-
)
|
|
97
|
-
return self
|
|
98
|
-
|
|
99
|
-
|
|
100
61
|
class AirbyteAuthConfig(BaseModel):
|
|
101
62
|
"""
|
|
102
63
|
Airbyte auth configuration extension (x-airbyte-auth-config).
|
|
@@ -104,12 +65,12 @@ class AirbyteAuthConfig(BaseModel):
|
|
|
104
65
|
Defines user-facing authentication configuration and how it maps to
|
|
105
66
|
the underlying OpenAPI security scheme.
|
|
106
67
|
|
|
107
|
-
|
|
68
|
+
For multiple authentication methods, define separate security schemes
|
|
69
|
+
rather than using oneOf within a single scheme.
|
|
108
70
|
"""
|
|
109
71
|
|
|
110
72
|
model_config = ConfigDict(populate_by_name=True, extra="forbid")
|
|
111
73
|
|
|
112
|
-
# Single option fields
|
|
113
74
|
title: str | None = None
|
|
114
75
|
description: str | None = None
|
|
115
76
|
type: Literal["object"] | None = None
|
|
@@ -137,29 +98,23 @@ class AirbyteAuthConfig(BaseModel):
|
|
|
137
98
|
None,
|
|
138
99
|
description="Constant values to always inject at source config paths (e.g., 'credentials.auth_type': 'OAuth2.0')",
|
|
139
100
|
)
|
|
140
|
-
# Multiple options (oneOf)
|
|
141
|
-
one_of: List[AuthConfigOption] | None = Field(None, alias="oneOf")
|
|
142
101
|
|
|
143
102
|
@model_validator(mode="after")
|
|
144
103
|
def validate_config_structure(self) -> "AirbyteAuthConfig":
|
|
145
|
-
"""Validate that
|
|
146
|
-
|
|
147
|
-
has_one_of = self.one_of is not None and len(self.one_of) > 0
|
|
148
|
-
|
|
149
|
-
if not has_single and not has_one_of:
|
|
150
|
-
raise ValueError("Either single auth option (type/properties/auth_mapping) or oneOf must be provided")
|
|
104
|
+
"""Validate that required fields are provided for auth config."""
|
|
105
|
+
has_config = self.type is not None or self.properties is not None or self.auth_mapping is not None
|
|
151
106
|
|
|
152
|
-
if
|
|
153
|
-
raise ValueError("
|
|
107
|
+
if not has_config:
|
|
108
|
+
raise ValueError("Auth config must have type, properties, and auth_mapping")
|
|
154
109
|
|
|
155
|
-
if
|
|
156
|
-
# Validate
|
|
110
|
+
if has_config:
|
|
111
|
+
# Validate required fields
|
|
157
112
|
if self.type != "object":
|
|
158
|
-
raise ValueError("
|
|
113
|
+
raise ValueError("Auth config must have type='object'")
|
|
159
114
|
if not self.properties:
|
|
160
|
-
raise ValueError("
|
|
115
|
+
raise ValueError("Auth config must have properties")
|
|
161
116
|
if not self.auth_mapping:
|
|
162
|
-
raise ValueError("
|
|
117
|
+
raise ValueError("Auth config must have auth_mapping")
|
|
163
118
|
|
|
164
119
|
# Validate replication_auth_key_mapping targets exist in properties
|
|
165
120
|
if self.replication_auth_key_mapping and self.properties:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|