airbyte-agent-amazon-ads 0.1.6__tar.gz → 0.1.7__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.6 → airbyte_agent_amazon_ads-0.1.7}/CHANGELOG.md +5 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/PKG-INFO +5 -4
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/README.md +4 -3
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/REFERENCE.md +71 -1
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/__init__.py +20 -2
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/executor/local_executor.py +3 -1
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/schema/base.py +3 -1
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/schema/components.py +5 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/schema/extensions.py +71 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/connector.py +67 -1
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/connector_model.py +1 -1
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/models.py +55 -0
- airbyte_agent_amazon_ads-0.1.7/airbyte_agent_amazon_ads/types.py +238 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/pyproject.toml +1 -1
- airbyte_agent_amazon_ads-0.1.6/airbyte_agent_amazon_ads/types.py +0 -48
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/.gitignore +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/AUTH.md +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/auth_strategies.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/auth_template.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/cloud_utils/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/cloud_utils/client.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/connector_model_loader.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/constants.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/exceptions.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/executor/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/executor/hosted_executor.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/executor/models.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/extensions.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http/adapters/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http/adapters/httpx_adapter.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http/config.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http/exceptions.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http/protocols.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http/response.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/http_client.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/introspection.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/logging/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/logging/logger.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/logging/types.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/observability/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/observability/config.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/observability/models.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/observability/redactor.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/observability/session.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/performance/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/performance/instrumentation.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/performance/metrics.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/schema/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/schema/connector.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/schema/operations.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/schema/security.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/secrets.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/telemetry/__init__.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/telemetry/config.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/telemetry/events.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/telemetry/tracker.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/types.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/utils.py +0 -0
- {airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/_vendored/connector_sdk/validation.py +0 -0
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Amazon Ads changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.7] - 2026-01-23
|
|
4
|
+
- Updated connector definition (YAML version 1.0.2)
|
|
5
|
+
- Source commit: 32c5ef46
|
|
6
|
+
- SDK version: 0.1.0
|
|
7
|
+
|
|
3
8
|
## [0.1.6] - 2026-01-23
|
|
4
9
|
- Updated connector definition (YAML version 1.0.1)
|
|
5
10
|
- Source commit: 416466da
|
|
@@ -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.7
|
|
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/
|
|
@@ -112,6 +112,7 @@ async def amazon-ads_execute(entity: str, action: str, params: dict | None = Non
|
|
|
112
112
|
return await connector.execute(entity, action, params or {})
|
|
113
113
|
```
|
|
114
114
|
|
|
115
|
+
|
|
115
116
|
## Full documentation
|
|
116
117
|
|
|
117
118
|
This connector supports the following entities and actions.
|
|
@@ -131,6 +132,6 @@ For the service's official API docs, see the [Amazon-Ads API reference](https://
|
|
|
131
132
|
|
|
132
133
|
## Version information
|
|
133
134
|
|
|
134
|
-
- **Package version:** 0.1.
|
|
135
|
-
- **Connector version:** 1.0.
|
|
136
|
-
- **Generated with Connector SDK commit SHA:**
|
|
135
|
+
- **Package version:** 0.1.7
|
|
136
|
+
- **Connector version:** 1.0.2
|
|
137
|
+
- **Generated with Connector SDK commit SHA:** 32c5ef4692be2243558faa20132b3ece7d573aed
|
|
@@ -79,6 +79,7 @@ async def amazon-ads_execute(entity: str, action: str, params: dict | None = Non
|
|
|
79
79
|
return await connector.execute(entity, action, params or {})
|
|
80
80
|
```
|
|
81
81
|
|
|
82
|
+
|
|
82
83
|
## Full documentation
|
|
83
84
|
|
|
84
85
|
This connector supports the following entities and actions.
|
|
@@ -98,6 +99,6 @@ For the service's official API docs, see the [Amazon-Ads API reference](https://
|
|
|
98
99
|
|
|
99
100
|
## Version information
|
|
100
101
|
|
|
101
|
-
- **Package version:** 0.1.
|
|
102
|
-
- **Connector version:** 1.0.
|
|
103
|
-
- **Generated with Connector SDK commit SHA:**
|
|
102
|
+
- **Package version:** 0.1.7
|
|
103
|
+
- **Connector version:** 1.0.2
|
|
104
|
+
- **Generated with Connector SDK commit SHA:** 32c5ef4692be2243558faa20132b3ece7d573aed
|
|
@@ -8,7 +8,7 @@ The Amazon-Ads connector supports the following entities and actions.
|
|
|
8
8
|
|
|
9
9
|
| Entity | Actions |
|
|
10
10
|
|--------|---------|
|
|
11
|
-
| Profiles | [List](#profiles-list), [Get](#profiles-get) |
|
|
11
|
+
| Profiles | [List](#profiles-list), [Get](#profiles-get), [Search](#profiles-search) |
|
|
12
12
|
| Portfolios | [List](#portfolios-list), [Get](#portfolios-get) |
|
|
13
13
|
| Sponsored Product Campaigns | [List](#sponsored-product-campaigns-list), [Get](#sponsored-product-campaigns-get) |
|
|
14
14
|
|
|
@@ -119,6 +119,75 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
119
119
|
| `accountInfo` | `object \| any` | |
|
|
120
120
|
|
|
121
121
|
|
|
122
|
+
</details>
|
|
123
|
+
|
|
124
|
+
### Profiles Search
|
|
125
|
+
|
|
126
|
+
Search and filter profiles records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.
|
|
127
|
+
|
|
128
|
+
#### Python SDK
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
await amazon_ads.profiles.search(
|
|
132
|
+
query={"filter": {"eq": {"accountInfo": {}}}}
|
|
133
|
+
)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
#### API
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_id}/execute' \
|
|
140
|
+
--header 'Content-Type: application/json' \
|
|
141
|
+
--header 'Authorization: Bearer {your_auth_token}' \
|
|
142
|
+
--data '{
|
|
143
|
+
"entity": "profiles",
|
|
144
|
+
"action": "search",
|
|
145
|
+
"params": {
|
|
146
|
+
"query": {"filter": {"eq": {"accountInfo": {}}}}
|
|
147
|
+
}
|
|
148
|
+
}'
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
#### Parameters
|
|
152
|
+
|
|
153
|
+
| Parameter Name | Type | Required | Description |
|
|
154
|
+
|----------------|------|----------|-------------|
|
|
155
|
+
| `query` | `object` | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or |
|
|
156
|
+
| `query.filter` | `object` | No | Filter conditions |
|
|
157
|
+
| `query.sort` | `array` | No | Sort conditions |
|
|
158
|
+
| `limit` | `integer` | No | Maximum results to return (default 1000) |
|
|
159
|
+
| `cursor` | `string` | No | Pagination cursor from previous response's next_cursor |
|
|
160
|
+
| `fields` | `array` | No | Field paths to include in results |
|
|
161
|
+
|
|
162
|
+
#### Searchable Fields
|
|
163
|
+
|
|
164
|
+
| Field Name | Type | Description |
|
|
165
|
+
|------------|------|-------------|
|
|
166
|
+
| `accountInfo` | `object` | |
|
|
167
|
+
| `countryCode` | `string` | |
|
|
168
|
+
| `currencyCode` | `string` | |
|
|
169
|
+
| `dailyBudget` | `number` | |
|
|
170
|
+
| `profileId` | `integer` | |
|
|
171
|
+
| `timezone` | `string` | |
|
|
172
|
+
|
|
173
|
+
<details>
|
|
174
|
+
<summary><b>Response Schema</b></summary>
|
|
175
|
+
|
|
176
|
+
| Field Name | Type | Description |
|
|
177
|
+
|------------|------|-------------|
|
|
178
|
+
| `hits` | `array` | List of matching records |
|
|
179
|
+
| `hits[].id` | `string` | Record identifier |
|
|
180
|
+
| `hits[].score` | `number` | Relevance score |
|
|
181
|
+
| `hits[].data` | `object` | Record data containing the searchable fields listed above |
|
|
182
|
+
| `hits[].data.accountInfo` | `object` | |
|
|
183
|
+
| `hits[].data.countryCode` | `string` | |
|
|
184
|
+
| `hits[].data.currencyCode` | `string` | |
|
|
185
|
+
| `hits[].data.dailyBudget` | `number` | |
|
|
186
|
+
| `hits[].data.profileId` | `integer` | |
|
|
187
|
+
| `hits[].data.timezone` | `string` | |
|
|
188
|
+
| `next_cursor` | `string \| null` | Cursor for next page of results |
|
|
189
|
+
| `took_ms` | `number` | Query execution time in milliseconds |
|
|
190
|
+
|
|
122
191
|
</details>
|
|
123
192
|
|
|
124
193
|
## Portfolios
|
|
@@ -311,3 +380,4 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
311
380
|
|
|
312
381
|
</details>
|
|
313
382
|
|
|
383
|
+
|
|
@@ -19,7 +19,11 @@ from .models import (
|
|
|
19
19
|
AmazonAdsExecuteResultWithMeta,
|
|
20
20
|
ProfilesListResult,
|
|
21
21
|
PortfoliosListResult,
|
|
22
|
-
SponsoredProductCampaignsListResult
|
|
22
|
+
SponsoredProductCampaignsListResult,
|
|
23
|
+
AirbyteSearchHit,
|
|
24
|
+
AirbyteSearchResult,
|
|
25
|
+
ProfilesSearchData,
|
|
26
|
+
ProfilesSearchResult
|
|
23
27
|
)
|
|
24
28
|
from .types import (
|
|
25
29
|
SponsoredProductCampaignsListParamsStatefilter,
|
|
@@ -28,7 +32,12 @@ from .types import (
|
|
|
28
32
|
PortfoliosListParams,
|
|
29
33
|
PortfoliosGetParams,
|
|
30
34
|
SponsoredProductCampaignsListParams,
|
|
31
|
-
SponsoredProductCampaignsGetParams
|
|
35
|
+
SponsoredProductCampaignsGetParams,
|
|
36
|
+
AirbyteSearchParams,
|
|
37
|
+
AirbyteSortOrder,
|
|
38
|
+
ProfilesSearchFilter,
|
|
39
|
+
ProfilesSearchQuery,
|
|
40
|
+
ProfilesCondition
|
|
32
41
|
)
|
|
33
42
|
|
|
34
43
|
__all__ = [
|
|
@@ -47,6 +56,10 @@ __all__ = [
|
|
|
47
56
|
"ProfilesListResult",
|
|
48
57
|
"PortfoliosListResult",
|
|
49
58
|
"SponsoredProductCampaignsListResult",
|
|
59
|
+
"AirbyteSearchHit",
|
|
60
|
+
"AirbyteSearchResult",
|
|
61
|
+
"ProfilesSearchData",
|
|
62
|
+
"ProfilesSearchResult",
|
|
50
63
|
"SponsoredProductCampaignsListParamsStatefilter",
|
|
51
64
|
"ProfilesListParams",
|
|
52
65
|
"ProfilesGetParams",
|
|
@@ -54,4 +67,9 @@ __all__ = [
|
|
|
54
67
|
"PortfoliosGetParams",
|
|
55
68
|
"SponsoredProductCampaignsListParams",
|
|
56
69
|
"SponsoredProductCampaignsGetParams",
|
|
70
|
+
"AirbyteSearchParams",
|
|
71
|
+
"AirbyteSortOrder",
|
|
72
|
+
"ProfilesSearchFilter",
|
|
73
|
+
"ProfilesSearchQuery",
|
|
74
|
+
"ProfilesCondition",
|
|
57
75
|
]
|
|
@@ -1032,7 +1032,9 @@ class LocalExecutor:
|
|
|
1032
1032
|
if "variables" in graphql_config and graphql_config["variables"]:
|
|
1033
1033
|
variables = self._interpolate_variables(graphql_config["variables"], params, param_defaults)
|
|
1034
1034
|
# Filter out None values (optional fields not provided) - matches REST _extract_body() behavior
|
|
1035
|
-
|
|
1035
|
+
# But preserve None for variables explicitly marked as nullable (e.g., to unassign a user)
|
|
1036
|
+
nullable_vars = set(graphql_config.get("x-airbyte-nullable-variables") or [])
|
|
1037
|
+
body["variables"] = {k: v for k, v in variables.items() if v is not None or k in nullable_vars}
|
|
1036
1038
|
|
|
1037
1039
|
# Add operation name if specified
|
|
1038
1040
|
if "operationName" in graphql_config:
|
|
@@ -13,7 +13,7 @@ from uuid import UUID
|
|
|
13
13
|
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
14
14
|
from pydantic_core import Url
|
|
15
15
|
|
|
16
|
-
from .extensions import CacheConfig, RetryConfig
|
|
16
|
+
from .extensions import CacheConfig, ReplicationConfig, RetryConfig
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class ExampleQuestions(BaseModel):
|
|
@@ -106,6 +106,7 @@ class Info(BaseModel):
|
|
|
106
106
|
- x-airbyte-retry-config: Retry configuration for transient errors (Airbyte extension)
|
|
107
107
|
- x-airbyte-example-questions: Example questions for AI connector README (Airbyte extension)
|
|
108
108
|
- x-airbyte-cache: Cache configuration for field mapping between API and cache schemas (Airbyte extension)
|
|
109
|
+
- x-airbyte-replication-config: Replication configuration for MULTI mode connectors (Airbyte extension)
|
|
109
110
|
"""
|
|
110
111
|
|
|
111
112
|
model_config = ConfigDict(populate_by_name=True, extra="forbid")
|
|
@@ -124,6 +125,7 @@ class Info(BaseModel):
|
|
|
124
125
|
x_airbyte_retry_config: RetryConfig | None = Field(None, alias="x-airbyte-retry-config")
|
|
125
126
|
x_airbyte_example_questions: ExampleQuestions | None = Field(None, alias="x-airbyte-example-questions")
|
|
126
127
|
x_airbyte_cache: CacheConfig | None = Field(None, alias="x-airbyte-cache")
|
|
128
|
+
x_airbyte_replication_config: ReplicationConfig | None = Field(None, alias="x-airbyte-replication-config")
|
|
127
129
|
|
|
128
130
|
|
|
129
131
|
class ServerVariable(BaseModel):
|
|
@@ -134,6 +134,11 @@ class GraphQLBodyConfig(BaseModel):
|
|
|
134
134
|
None,
|
|
135
135
|
description="Default fields to select if not provided in request parameters. Can be a string or array of field names.",
|
|
136
136
|
)
|
|
137
|
+
nullable_variables: List[str] | None = Field(
|
|
138
|
+
default=None,
|
|
139
|
+
alias="x-airbyte-nullable-variables",
|
|
140
|
+
description="Variable names that can be explicitly set to null (e.g., to unassign a user)",
|
|
141
|
+
)
|
|
137
142
|
|
|
138
143
|
|
|
139
144
|
# Union type for all body type configs (extensible for future types like XML, SOAP, etc.)
|
|
@@ -182,6 +182,77 @@ class CacheEntityConfig(BaseModel):
|
|
|
182
182
|
return self.x_airbyte_name or self.entity
|
|
183
183
|
|
|
184
184
|
|
|
185
|
+
class ReplicationConfigProperty(BaseModel):
|
|
186
|
+
"""
|
|
187
|
+
Property definition for replication configuration fields.
|
|
188
|
+
|
|
189
|
+
Defines a single field in the replication configuration with its type,
|
|
190
|
+
description, and optional default value.
|
|
191
|
+
|
|
192
|
+
Example YAML usage:
|
|
193
|
+
x-airbyte-replication-config:
|
|
194
|
+
properties:
|
|
195
|
+
start_date:
|
|
196
|
+
type: string
|
|
197
|
+
title: Start Date
|
|
198
|
+
description: UTC date and time from which to replicate data
|
|
199
|
+
format: date-time
|
|
200
|
+
"""
|
|
201
|
+
|
|
202
|
+
model_config = ConfigDict(populate_by_name=True, extra="forbid")
|
|
203
|
+
|
|
204
|
+
type: str
|
|
205
|
+
title: str | None = None
|
|
206
|
+
description: str | None = None
|
|
207
|
+
format: str | None = None
|
|
208
|
+
default: str | int | float | bool | None = None
|
|
209
|
+
enum: list[str] | None = None
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
class ReplicationConfig(BaseModel):
|
|
213
|
+
"""
|
|
214
|
+
Replication configuration extension (x-airbyte-replication-config).
|
|
215
|
+
|
|
216
|
+
Defines replication-specific settings for MULTI mode connectors that need
|
|
217
|
+
to configure the underlying replication connector. This allows users who
|
|
218
|
+
use the direct-style API (credentials + environment) to also specify
|
|
219
|
+
replication settings like start_date, lookback_window, etc.
|
|
220
|
+
|
|
221
|
+
This extension is added to the Info model and provides field definitions
|
|
222
|
+
for replication configuration that gets merged into the source config
|
|
223
|
+
when creating sources.
|
|
224
|
+
|
|
225
|
+
Example YAML usage:
|
|
226
|
+
info:
|
|
227
|
+
title: HubSpot API
|
|
228
|
+
x-airbyte-replication-config:
|
|
229
|
+
title: Replication Configuration
|
|
230
|
+
description: Settings for data replication
|
|
231
|
+
properties:
|
|
232
|
+
start_date:
|
|
233
|
+
type: string
|
|
234
|
+
title: Start Date
|
|
235
|
+
description: UTC date and time from which to replicate data
|
|
236
|
+
format: date-time
|
|
237
|
+
required:
|
|
238
|
+
- start_date
|
|
239
|
+
replication_config_key_mapping:
|
|
240
|
+
start_date: start_date
|
|
241
|
+
"""
|
|
242
|
+
|
|
243
|
+
model_config = ConfigDict(populate_by_name=True, extra="forbid")
|
|
244
|
+
|
|
245
|
+
title: str | None = None
|
|
246
|
+
description: str | None = None
|
|
247
|
+
properties: dict[str, ReplicationConfigProperty] = Field(default_factory=dict)
|
|
248
|
+
required: list[str] = Field(default_factory=list)
|
|
249
|
+
replication_config_key_mapping: dict[str, str] = Field(
|
|
250
|
+
default_factory=dict,
|
|
251
|
+
alias="replication_config_key_mapping",
|
|
252
|
+
description="Mapping from replication_config field names to source_config field names",
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
|
|
185
256
|
class CacheConfig(BaseModel):
|
|
186
257
|
"""
|
|
187
258
|
Cache configuration extension (x-airbyte-cache).
|
|
@@ -21,6 +21,9 @@ from .types import (
|
|
|
21
21
|
SponsoredProductCampaignsGetParams,
|
|
22
22
|
SponsoredProductCampaignsListParams,
|
|
23
23
|
SponsoredProductCampaignsListParamsStatefilter,
|
|
24
|
+
AirbyteSearchParams,
|
|
25
|
+
ProfilesSearchFilter,
|
|
26
|
+
ProfilesSearchQuery,
|
|
24
27
|
)
|
|
25
28
|
if TYPE_CHECKING:
|
|
26
29
|
from .models import AmazonAdsAuthConfig
|
|
@@ -34,6 +37,10 @@ from .models import (
|
|
|
34
37
|
Portfolio,
|
|
35
38
|
Profile,
|
|
36
39
|
SponsoredProductCampaign,
|
|
40
|
+
AirbyteSearchHit,
|
|
41
|
+
AirbyteSearchResult,
|
|
42
|
+
ProfilesSearchData,
|
|
43
|
+
ProfilesSearchResult,
|
|
37
44
|
)
|
|
38
45
|
|
|
39
46
|
# TypeVar for decorator type preservation
|
|
@@ -49,7 +56,7 @@ class AmazonAdsConnector:
|
|
|
49
56
|
"""
|
|
50
57
|
|
|
51
58
|
connector_name = "amazon-ads"
|
|
52
|
-
connector_version = "1.0.
|
|
59
|
+
connector_version = "1.0.2"
|
|
53
60
|
vendored_sdk_version = "0.1.0" # Version of vendored connector-sdk
|
|
54
61
|
|
|
55
62
|
# Map of (entity, action) -> needs_envelope for envelope wrapping decision
|
|
@@ -441,6 +448,65 @@ information about the advertiser's account in a specific marketplace.
|
|
|
441
448
|
|
|
442
449
|
|
|
443
450
|
|
|
451
|
+
async def search(
|
|
452
|
+
self,
|
|
453
|
+
query: ProfilesSearchQuery,
|
|
454
|
+
limit: int | None = None,
|
|
455
|
+
cursor: str | None = None,
|
|
456
|
+
fields: list[list[str]] | None = None,
|
|
457
|
+
) -> ProfilesSearchResult:
|
|
458
|
+
"""
|
|
459
|
+
Search profiles records from Airbyte cache.
|
|
460
|
+
|
|
461
|
+
This operation searches cached data from Airbyte syncs.
|
|
462
|
+
Only available in hosted execution mode.
|
|
463
|
+
|
|
464
|
+
Available filter fields (ProfilesSearchFilter):
|
|
465
|
+
- account_info:
|
|
466
|
+
- country_code:
|
|
467
|
+
- currency_code:
|
|
468
|
+
- daily_budget:
|
|
469
|
+
- profile_id:
|
|
470
|
+
- timezone:
|
|
471
|
+
|
|
472
|
+
Args:
|
|
473
|
+
query: Filter and sort conditions. Supports operators like eq, neq, gt, gte, lt, lte,
|
|
474
|
+
in, like, fuzzy, keyword, not, and, or. Example: {"filter": {"eq": {"status": "active"}}}
|
|
475
|
+
limit: Maximum results to return (default 1000)
|
|
476
|
+
cursor: Pagination cursor from previous response's next_cursor
|
|
477
|
+
fields: Field paths to include in results. Each path is a list of keys for nested access.
|
|
478
|
+
Example: [["id"], ["user", "name"]] returns id and user.name fields.
|
|
479
|
+
|
|
480
|
+
Returns:
|
|
481
|
+
ProfilesSearchResult with hits (list of AirbyteSearchHit[ProfilesSearchData]) and pagination info
|
|
482
|
+
|
|
483
|
+
Raises:
|
|
484
|
+
NotImplementedError: If called in local execution mode
|
|
485
|
+
"""
|
|
486
|
+
params: dict[str, Any] = {"query": query}
|
|
487
|
+
if limit is not None:
|
|
488
|
+
params["limit"] = limit
|
|
489
|
+
if cursor is not None:
|
|
490
|
+
params["cursor"] = cursor
|
|
491
|
+
if fields is not None:
|
|
492
|
+
params["fields"] = fields
|
|
493
|
+
|
|
494
|
+
result = await self._connector.execute("profiles", "search", params)
|
|
495
|
+
|
|
496
|
+
# Parse response into typed result
|
|
497
|
+
return ProfilesSearchResult(
|
|
498
|
+
hits=[
|
|
499
|
+
AirbyteSearchHit[ProfilesSearchData](
|
|
500
|
+
id=hit.get("id"),
|
|
501
|
+
score=hit.get("score"),
|
|
502
|
+
data=ProfilesSearchData(**hit.get("data", {}))
|
|
503
|
+
)
|
|
504
|
+
for hit in result.get("hits", [])
|
|
505
|
+
],
|
|
506
|
+
next_cursor=result.get("next_cursor"),
|
|
507
|
+
took_ms=result.get("took_ms")
|
|
508
|
+
)
|
|
509
|
+
|
|
444
510
|
class PortfoliosQuery:
|
|
445
511
|
"""
|
|
446
512
|
Query class for Portfolios entity operations.
|
|
@@ -26,7 +26,7 @@ from uuid import (
|
|
|
26
26
|
AmazonAdsConnectorModel: ConnectorModel = ConnectorModel(
|
|
27
27
|
id=UUID('c6b0a29e-1da9-4512-9002-7bfd0cba2246'),
|
|
28
28
|
name='amazon-ads',
|
|
29
|
-
version='1.0.
|
|
29
|
+
version='1.0.2',
|
|
30
30
|
base_url='{region_url}',
|
|
31
31
|
auth=AuthConfig(
|
|
32
32
|
type=AuthType.OAUTH2,
|
{airbyte_agent_amazon_ads-0.1.6 → airbyte_agent_amazon_ads-0.1.7}/airbyte_agent_amazon_ads/models.py
RENAMED
|
@@ -152,6 +152,61 @@ class AmazonAdsExecuteResultWithMeta(AmazonAdsExecuteResult[T], Generic[T, S]):
|
|
|
152
152
|
meta: S
|
|
153
153
|
"""Metadata about the response (e.g., pagination cursors, record counts)."""
|
|
154
154
|
|
|
155
|
+
# ===== SEARCH DATA MODELS =====
|
|
156
|
+
# Entity-specific Pydantic models for search result data
|
|
157
|
+
|
|
158
|
+
# Type variable for search data generic
|
|
159
|
+
D = TypeVar('D')
|
|
160
|
+
|
|
161
|
+
class ProfilesSearchData(BaseModel):
|
|
162
|
+
"""Search result data for profiles entity."""
|
|
163
|
+
model_config = ConfigDict(extra="allow")
|
|
164
|
+
|
|
165
|
+
account_info: dict[str, Any] | None = None
|
|
166
|
+
""""""
|
|
167
|
+
country_code: str | None = None
|
|
168
|
+
""""""
|
|
169
|
+
currency_code: str | None = None
|
|
170
|
+
""""""
|
|
171
|
+
daily_budget: float | None = None
|
|
172
|
+
""""""
|
|
173
|
+
profile_id: int | None = None
|
|
174
|
+
""""""
|
|
175
|
+
timezone: str | None = None
|
|
176
|
+
""""""
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
# ===== GENERIC SEARCH RESULT TYPES =====
|
|
180
|
+
|
|
181
|
+
class AirbyteSearchHit(BaseModel, Generic[D]):
|
|
182
|
+
"""A single search result with typed data."""
|
|
183
|
+
model_config = ConfigDict(extra="allow")
|
|
184
|
+
|
|
185
|
+
id: str | None = None
|
|
186
|
+
"""Unique identifier for the record."""
|
|
187
|
+
score: float | None = None
|
|
188
|
+
"""Relevance score for the match."""
|
|
189
|
+
data: D
|
|
190
|
+
"""The matched record data."""
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
class AirbyteSearchResult(BaseModel, Generic[D]):
|
|
194
|
+
"""Result from Airbyte cache search operations with typed hits."""
|
|
195
|
+
model_config = ConfigDict(extra="allow")
|
|
196
|
+
|
|
197
|
+
hits: list[AirbyteSearchHit[D]] = Field(default_factory=list)
|
|
198
|
+
"""List of matching records."""
|
|
199
|
+
next_cursor: str | None = None
|
|
200
|
+
"""Cursor for fetching the next page of results."""
|
|
201
|
+
took_ms: int | None = None
|
|
202
|
+
"""Time taken to execute the search in milliseconds."""
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
# ===== ENTITY-SPECIFIC SEARCH RESULT TYPE ALIASES =====
|
|
206
|
+
|
|
207
|
+
ProfilesSearchResult = AirbyteSearchResult[ProfilesSearchData]
|
|
208
|
+
"""Search result type for profiles entity."""
|
|
209
|
+
|
|
155
210
|
|
|
156
211
|
|
|
157
212
|
# ===== OPERATION RESULT TYPE ALIASES =====
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Type definitions for amazon-ads connector.
|
|
3
|
+
"""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
# Use typing_extensions.TypedDict for Pydantic compatibility
|
|
7
|
+
try:
|
|
8
|
+
from typing_extensions import TypedDict, NotRequired
|
|
9
|
+
except ImportError:
|
|
10
|
+
from typing import TypedDict, NotRequired # type: ignore[attr-defined]
|
|
11
|
+
|
|
12
|
+
from typing import Any, Literal
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# ===== NESTED PARAM TYPE DEFINITIONS =====
|
|
16
|
+
# Nested parameter schemas discovered during parameter extraction
|
|
17
|
+
|
|
18
|
+
class SponsoredProductCampaignsListParamsStatefilter(TypedDict):
|
|
19
|
+
"""Nested schema for SponsoredProductCampaignsListParams.stateFilter"""
|
|
20
|
+
include: NotRequired[str]
|
|
21
|
+
|
|
22
|
+
# ===== OPERATION PARAMS TYPE DEFINITIONS =====
|
|
23
|
+
|
|
24
|
+
class ProfilesListParams(TypedDict):
|
|
25
|
+
"""Parameters for profiles.list operation"""
|
|
26
|
+
profile_type_filter: NotRequired[str]
|
|
27
|
+
|
|
28
|
+
class ProfilesGetParams(TypedDict):
|
|
29
|
+
"""Parameters for profiles.get operation"""
|
|
30
|
+
profile_id: str
|
|
31
|
+
|
|
32
|
+
class PortfoliosListParams(TypedDict):
|
|
33
|
+
"""Parameters for portfolios.list operation"""
|
|
34
|
+
include_extended_data_fields: NotRequired[str]
|
|
35
|
+
|
|
36
|
+
class PortfoliosGetParams(TypedDict):
|
|
37
|
+
"""Parameters for portfolios.get operation"""
|
|
38
|
+
portfolio_id: str
|
|
39
|
+
|
|
40
|
+
class SponsoredProductCampaignsListParams(TypedDict):
|
|
41
|
+
"""Parameters for sponsored_product_campaigns.list operation"""
|
|
42
|
+
state_filter: NotRequired[SponsoredProductCampaignsListParamsStatefilter]
|
|
43
|
+
max_results: NotRequired[int]
|
|
44
|
+
next_token: NotRequired[str]
|
|
45
|
+
|
|
46
|
+
class SponsoredProductCampaignsGetParams(TypedDict):
|
|
47
|
+
"""Parameters for sponsored_product_campaigns.get operation"""
|
|
48
|
+
campaign_id: str
|
|
49
|
+
|
|
50
|
+
# ===== SEARCH TYPES =====
|
|
51
|
+
|
|
52
|
+
# Sort specification
|
|
53
|
+
AirbyteSortOrder = Literal["asc", "desc"]
|
|
54
|
+
|
|
55
|
+
# ===== PROFILES SEARCH TYPES =====
|
|
56
|
+
|
|
57
|
+
class ProfilesSearchFilter(TypedDict, total=False):
|
|
58
|
+
"""Available fields for filtering profiles search queries."""
|
|
59
|
+
account_info: dict[str, Any] | None
|
|
60
|
+
""""""
|
|
61
|
+
country_code: str | None
|
|
62
|
+
""""""
|
|
63
|
+
currency_code: str | None
|
|
64
|
+
""""""
|
|
65
|
+
daily_budget: float | None
|
|
66
|
+
""""""
|
|
67
|
+
profile_id: int | None
|
|
68
|
+
""""""
|
|
69
|
+
timezone: str | None
|
|
70
|
+
""""""
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class ProfilesInFilter(TypedDict, total=False):
|
|
74
|
+
"""Available fields for 'in' condition (values are lists)."""
|
|
75
|
+
account_info: list[dict[str, Any]]
|
|
76
|
+
""""""
|
|
77
|
+
country_code: list[str]
|
|
78
|
+
""""""
|
|
79
|
+
currency_code: list[str]
|
|
80
|
+
""""""
|
|
81
|
+
daily_budget: list[float]
|
|
82
|
+
""""""
|
|
83
|
+
profile_id: list[int]
|
|
84
|
+
""""""
|
|
85
|
+
timezone: list[str]
|
|
86
|
+
""""""
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class ProfilesAnyValueFilter(TypedDict, total=False):
|
|
90
|
+
"""Available fields with Any value type. Used for 'contains' and 'any' conditions."""
|
|
91
|
+
account_info: Any
|
|
92
|
+
""""""
|
|
93
|
+
country_code: Any
|
|
94
|
+
""""""
|
|
95
|
+
currency_code: Any
|
|
96
|
+
""""""
|
|
97
|
+
daily_budget: Any
|
|
98
|
+
""""""
|
|
99
|
+
profile_id: Any
|
|
100
|
+
""""""
|
|
101
|
+
timezone: Any
|
|
102
|
+
""""""
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class ProfilesStringFilter(TypedDict, total=False):
|
|
106
|
+
"""String fields for text search conditions (like, fuzzy, keyword)."""
|
|
107
|
+
account_info: str
|
|
108
|
+
""""""
|
|
109
|
+
country_code: str
|
|
110
|
+
""""""
|
|
111
|
+
currency_code: str
|
|
112
|
+
""""""
|
|
113
|
+
daily_budget: str
|
|
114
|
+
""""""
|
|
115
|
+
profile_id: str
|
|
116
|
+
""""""
|
|
117
|
+
timezone: str
|
|
118
|
+
""""""
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class ProfilesSortFilter(TypedDict, total=False):
|
|
122
|
+
"""Available fields for sorting profiles search results."""
|
|
123
|
+
account_info: AirbyteSortOrder
|
|
124
|
+
""""""
|
|
125
|
+
country_code: AirbyteSortOrder
|
|
126
|
+
""""""
|
|
127
|
+
currency_code: AirbyteSortOrder
|
|
128
|
+
""""""
|
|
129
|
+
daily_budget: AirbyteSortOrder
|
|
130
|
+
""""""
|
|
131
|
+
profile_id: AirbyteSortOrder
|
|
132
|
+
""""""
|
|
133
|
+
timezone: AirbyteSortOrder
|
|
134
|
+
""""""
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
# Entity-specific condition types for profiles
|
|
138
|
+
class ProfilesEqCondition(TypedDict, total=False):
|
|
139
|
+
"""Equal to: field equals value."""
|
|
140
|
+
eq: ProfilesSearchFilter
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
class ProfilesNeqCondition(TypedDict, total=False):
|
|
144
|
+
"""Not equal to: field does not equal value."""
|
|
145
|
+
neq: ProfilesSearchFilter
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
class ProfilesGtCondition(TypedDict, total=False):
|
|
149
|
+
"""Greater than: field > value."""
|
|
150
|
+
gt: ProfilesSearchFilter
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
class ProfilesGteCondition(TypedDict, total=False):
|
|
154
|
+
"""Greater than or equal: field >= value."""
|
|
155
|
+
gte: ProfilesSearchFilter
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
class ProfilesLtCondition(TypedDict, total=False):
|
|
159
|
+
"""Less than: field < value."""
|
|
160
|
+
lt: ProfilesSearchFilter
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
class ProfilesLteCondition(TypedDict, total=False):
|
|
164
|
+
"""Less than or equal: field <= value."""
|
|
165
|
+
lte: ProfilesSearchFilter
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
class ProfilesLikeCondition(TypedDict, total=False):
|
|
169
|
+
"""Partial string match with % wildcards."""
|
|
170
|
+
like: ProfilesStringFilter
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
class ProfilesFuzzyCondition(TypedDict, total=False):
|
|
174
|
+
"""Ordered word text match (case-insensitive)."""
|
|
175
|
+
fuzzy: ProfilesStringFilter
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class ProfilesKeywordCondition(TypedDict, total=False):
|
|
179
|
+
"""Keyword text match (any word present)."""
|
|
180
|
+
keyword: ProfilesStringFilter
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
class ProfilesContainsCondition(TypedDict, total=False):
|
|
184
|
+
"""Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
|
|
185
|
+
contains: ProfilesAnyValueFilter
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
# Reserved keyword conditions using functional TypedDict syntax
|
|
189
|
+
ProfilesInCondition = TypedDict("ProfilesInCondition", {"in": ProfilesInFilter}, total=False)
|
|
190
|
+
"""In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
|
|
191
|
+
|
|
192
|
+
ProfilesNotCondition = TypedDict("ProfilesNotCondition", {"not": "ProfilesCondition"}, total=False)
|
|
193
|
+
"""Negates the nested condition."""
|
|
194
|
+
|
|
195
|
+
ProfilesAndCondition = TypedDict("ProfilesAndCondition", {"and": "list[ProfilesCondition]"}, total=False)
|
|
196
|
+
"""True if all nested conditions are true."""
|
|
197
|
+
|
|
198
|
+
ProfilesOrCondition = TypedDict("ProfilesOrCondition", {"or": "list[ProfilesCondition]"}, total=False)
|
|
199
|
+
"""True if any nested condition is true."""
|
|
200
|
+
|
|
201
|
+
ProfilesAnyCondition = TypedDict("ProfilesAnyCondition", {"any": ProfilesAnyValueFilter}, total=False)
|
|
202
|
+
"""Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
|
|
203
|
+
|
|
204
|
+
# Union of all profiles condition types
|
|
205
|
+
ProfilesCondition = (
|
|
206
|
+
ProfilesEqCondition
|
|
207
|
+
| ProfilesNeqCondition
|
|
208
|
+
| ProfilesGtCondition
|
|
209
|
+
| ProfilesGteCondition
|
|
210
|
+
| ProfilesLtCondition
|
|
211
|
+
| ProfilesLteCondition
|
|
212
|
+
| ProfilesInCondition
|
|
213
|
+
| ProfilesLikeCondition
|
|
214
|
+
| ProfilesFuzzyCondition
|
|
215
|
+
| ProfilesKeywordCondition
|
|
216
|
+
| ProfilesContainsCondition
|
|
217
|
+
| ProfilesNotCondition
|
|
218
|
+
| ProfilesAndCondition
|
|
219
|
+
| ProfilesOrCondition
|
|
220
|
+
| ProfilesAnyCondition
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
class ProfilesSearchQuery(TypedDict, total=False):
|
|
225
|
+
"""Search query for profiles entity."""
|
|
226
|
+
filter: ProfilesCondition
|
|
227
|
+
sort: list[ProfilesSortFilter]
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
# ===== SEARCH PARAMS =====
|
|
232
|
+
|
|
233
|
+
class AirbyteSearchParams(TypedDict, total=False):
|
|
234
|
+
"""Parameters for Airbyte cache search operations (generic, use entity-specific query types for better type hints)."""
|
|
235
|
+
query: dict[str, Any]
|
|
236
|
+
limit: int
|
|
237
|
+
cursor: str
|
|
238
|
+
fields: list[list[str]]
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Type definitions for amazon-ads connector.
|
|
3
|
-
"""
|
|
4
|
-
from __future__ import annotations
|
|
5
|
-
|
|
6
|
-
# Use typing_extensions.TypedDict for Pydantic compatibility
|
|
7
|
-
try:
|
|
8
|
-
from typing_extensions import TypedDict, NotRequired
|
|
9
|
-
except ImportError:
|
|
10
|
-
from typing import TypedDict, NotRequired # type: ignore[attr-defined]
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
# ===== NESTED PARAM TYPE DEFINITIONS =====
|
|
15
|
-
# Nested parameter schemas discovered during parameter extraction
|
|
16
|
-
|
|
17
|
-
class SponsoredProductCampaignsListParamsStatefilter(TypedDict):
|
|
18
|
-
"""Nested schema for SponsoredProductCampaignsListParams.stateFilter"""
|
|
19
|
-
include: NotRequired[str]
|
|
20
|
-
|
|
21
|
-
# ===== OPERATION PARAMS TYPE DEFINITIONS =====
|
|
22
|
-
|
|
23
|
-
class ProfilesListParams(TypedDict):
|
|
24
|
-
"""Parameters for profiles.list operation"""
|
|
25
|
-
profile_type_filter: NotRequired[str]
|
|
26
|
-
|
|
27
|
-
class ProfilesGetParams(TypedDict):
|
|
28
|
-
"""Parameters for profiles.get operation"""
|
|
29
|
-
profile_id: str
|
|
30
|
-
|
|
31
|
-
class PortfoliosListParams(TypedDict):
|
|
32
|
-
"""Parameters for portfolios.list operation"""
|
|
33
|
-
include_extended_data_fields: NotRequired[str]
|
|
34
|
-
|
|
35
|
-
class PortfoliosGetParams(TypedDict):
|
|
36
|
-
"""Parameters for portfolios.get operation"""
|
|
37
|
-
portfolio_id: str
|
|
38
|
-
|
|
39
|
-
class SponsoredProductCampaignsListParams(TypedDict):
|
|
40
|
-
"""Parameters for sponsored_product_campaigns.list operation"""
|
|
41
|
-
state_filter: NotRequired[SponsoredProductCampaignsListParamsStatefilter]
|
|
42
|
-
max_results: NotRequired[int]
|
|
43
|
-
next_token: NotRequired[str]
|
|
44
|
-
|
|
45
|
-
class SponsoredProductCampaignsGetParams(TypedDict):
|
|
46
|
-
"""Parameters for sponsored_product_campaigns.get operation"""
|
|
47
|
-
campaign_id: str
|
|
48
|
-
|
|
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
|