adcp 2.9.0__py3-none-any.whl → 2.11.0__py3-none-any.whl
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.
- adcp/__init__.py +57 -53
- adcp/client.py +9 -11
- adcp/simple.py +105 -1
- adcp/types/__init__.py +330 -300
- adcp/types/_generated.py +99 -65
- adcp/types/generated_poc/adcp_domain.py +12 -0
- adcp/types/generated_poc/auth_scheme.py +12 -0
- adcp/types/generated_poc/available_metric.py +19 -0
- adcp/types/generated_poc/co_branding_requirement.py +13 -0
- adcp/types/generated_poc/creative_action.py +15 -0
- adcp/types/generated_poc/creative_agent_capability.py +14 -0
- adcp/types/generated_poc/creative_filters.py +77 -0
- adcp/types/generated_poc/creative_policy.py +9 -15
- adcp/types/generated_poc/creative_sort_field.py +16 -0
- adcp/types/generated_poc/daast_asset.py +9 -24
- adcp/types/generated_poc/daast_tracking_event.py +21 -0
- adcp/types/generated_poc/daast_version.py +12 -0
- adcp/types/generated_poc/dimension_unit.py +14 -0
- adcp/types/generated_poc/feed_format.py +13 -0
- adcp/types/generated_poc/feedback_source.py +14 -0
- adcp/types/generated_poc/format.py +5 -11
- adcp/types/generated_poc/get_media_buy_delivery_request.py +3 -19
- adcp/types/generated_poc/get_products_request.py +3 -36
- adcp/types/generated_poc/get_signals_request.py +3 -26
- adcp/types/generated_poc/get_signals_response.py +5 -10
- adcp/types/generated_poc/history_entry_type.py +12 -0
- adcp/types/generated_poc/http_method.py +12 -0
- adcp/types/generated_poc/javascript_asset.py +6 -8
- adcp/types/generated_poc/javascript_module_type.py +13 -0
- adcp/types/generated_poc/landing_page_requirement.py +13 -0
- adcp/types/generated_poc/list_creative_formats_response.py +4 -11
- adcp/types/generated_poc/list_creatives_request.py +10 -87
- adcp/types/generated_poc/list_creatives_response.py +13 -17
- adcp/types/generated_poc/markdown_asset.py +4 -8
- adcp/types/generated_poc/markdown_flavor.py +12 -0
- adcp/types/generated_poc/metric_type.py +18 -0
- adcp/types/generated_poc/notification_type.py +14 -0
- adcp/types/generated_poc/performance_feedback.py +9 -20
- adcp/types/generated_poc/preview_creative_request.py +8 -13
- adcp/types/generated_poc/preview_output_format.py +12 -0
- adcp/types/generated_poc/product_filters.py +36 -0
- adcp/types/generated_poc/property.py +5 -13
- adcp/types/generated_poc/property_type.py +17 -0
- adcp/types/generated_poc/provide_performance_feedback_request.py +71 -25
- adcp/types/generated_poc/push_notification_config.py +3 -7
- adcp/types/generated_poc/reporting_capabilities.py +4 -21
- adcp/types/generated_poc/reporting_frequency.py +13 -0
- adcp/types/generated_poc/signal_catalog_type.py +13 -0
- adcp/types/generated_poc/signal_filters.py +29 -0
- adcp/types/generated_poc/sort_direction.py +12 -0
- adcp/types/generated_poc/sync_creatives_request.py +4 -9
- adcp/types/generated_poc/sync_creatives_response.py +5 -12
- adcp/types/generated_poc/tasks_list_request.py +9 -15
- adcp/types/generated_poc/update_frequency.py +14 -0
- adcp/types/generated_poc/url_asset.py +3 -8
- adcp/types/generated_poc/url_asset_type.py +13 -0
- adcp/types/generated_poc/validation_mode.py +12 -0
- adcp/types/generated_poc/vast_asset.py +13 -36
- adcp/types/generated_poc/vast_tracking_event.py +26 -0
- adcp/types/generated_poc/vast_version.py +15 -0
- adcp/types/generated_poc/webhook_asset.py +10 -22
- adcp/types/generated_poc/webhook_payload.py +3 -9
- adcp/types/generated_poc/webhook_response_type.py +14 -0
- adcp/types/generated_poc/webhook_security_method.py +13 -0
- adcp/utils/preview_cache.py +5 -5
- {adcp-2.9.0.dist-info → adcp-2.11.0.dist-info}/METADATA +1 -1
- {adcp-2.9.0.dist-info → adcp-2.11.0.dist-info}/RECORD +71 -38
- adcp/types/stable.py +0 -449
- {adcp-2.9.0.dist-info → adcp-2.11.0.dist-info}/WHEEL +0 -0
- {adcp-2.9.0.dist-info → adcp-2.11.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.9.0.dist-info → adcp-2.11.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.9.0.dist-info → adcp-2.11.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: feed-format.json
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class FeedFormat(Enum):
|
|
11
|
+
google_merchant_center = 'google_merchant_center'
|
|
12
|
+
facebook_catalog = 'facebook_catalog'
|
|
13
|
+
custom = 'custom'
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: feedback-source.json
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class FeedbackSource(Enum):
|
|
11
|
+
buyer_attribution = 'buyer_attribution'
|
|
12
|
+
third_party_measurement = 'third_party_measurement'
|
|
13
|
+
platform_analytics = 'platform_analytics'
|
|
14
|
+
verification_partner = 'verification_partner'
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: format.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from enum import Enum
|
|
8
7
|
from typing import Annotated, Any, Literal
|
|
9
8
|
|
|
10
9
|
from adcp.types.base import AdCPBaseModel
|
|
11
10
|
from pydantic import AnyUrl, ConfigDict, Field
|
|
12
11
|
|
|
13
|
-
from . import asset_content_type, format_category
|
|
12
|
+
from . import asset_content_type, dimension_unit, format_category
|
|
14
13
|
from . import format_id as format_id_1
|
|
15
14
|
|
|
16
15
|
|
|
@@ -110,13 +109,6 @@ class Responsive(AdCPBaseModel):
|
|
|
110
109
|
width: bool
|
|
111
110
|
|
|
112
111
|
|
|
113
|
-
class Unit(Enum):
|
|
114
|
-
px = 'px'
|
|
115
|
-
dp = 'dp'
|
|
116
|
-
inches = 'inches'
|
|
117
|
-
cm = 'cm'
|
|
118
|
-
|
|
119
|
-
|
|
120
112
|
class Dimensions(AdCPBaseModel):
|
|
121
113
|
aspect_ratio: Annotated[
|
|
122
114
|
str | None,
|
|
@@ -143,7 +135,9 @@ class Dimensions(AdCPBaseModel):
|
|
|
143
135
|
responsive: Annotated[
|
|
144
136
|
Responsive | None, Field(description='Indicates which dimensions are responsive/fluid')
|
|
145
137
|
] = None
|
|
146
|
-
unit: Annotated[
|
|
138
|
+
unit: Annotated[
|
|
139
|
+
dimension_unit.DimensionUnit, Field(description='Unit of measurement for dimensions')
|
|
140
|
+
]
|
|
147
141
|
width: Annotated[float | None, Field(description='Fixed width in specified units', ge=0.0)] = (
|
|
148
142
|
None
|
|
149
143
|
)
|
|
@@ -1,31 +1,15 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: get-media-buy-delivery-request.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from enum import Enum
|
|
8
7
|
from typing import Annotated, Any
|
|
9
8
|
|
|
10
9
|
from adcp.types.base import AdCPBaseModel
|
|
11
10
|
from pydantic import ConfigDict, Field
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
class StatusFilter(Enum):
|
|
15
|
-
active = 'active'
|
|
16
|
-
pending = 'pending'
|
|
17
|
-
paused = 'paused'
|
|
18
|
-
completed = 'completed'
|
|
19
|
-
failed = 'failed'
|
|
20
|
-
all = 'all'
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class StatusFilterEnum(Enum):
|
|
24
|
-
active = 'active'
|
|
25
|
-
pending = 'pending'
|
|
26
|
-
paused = 'paused'
|
|
27
|
-
completed = 'completed'
|
|
28
|
-
failed = 'failed'
|
|
12
|
+
from . import media_buy_status
|
|
29
13
|
|
|
30
14
|
|
|
31
15
|
class GetMediaBuyDeliveryRequest(AdCPBaseModel):
|
|
@@ -60,6 +44,6 @@ class GetMediaBuyDeliveryRequest(AdCPBaseModel):
|
|
|
60
44
|
),
|
|
61
45
|
] = None
|
|
62
46
|
status_filter: Annotated[
|
|
63
|
-
|
|
47
|
+
media_buy_status.MediaBuyStatus | list[media_buy_status.MediaBuyStatus] | None,
|
|
64
48
|
Field(description='Filter by status. Can be a single status or array of statuses'),
|
|
65
49
|
] = None
|
|
@@ -1,47 +1,16 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: get-products-request.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from enum import Enum
|
|
8
7
|
from typing import Annotated, Any
|
|
9
8
|
|
|
10
9
|
from adcp.types.base import AdCPBaseModel
|
|
11
10
|
from pydantic import AnyUrl, ConfigDict, Field
|
|
12
11
|
|
|
13
12
|
from . import brand_manifest as brand_manifest_1
|
|
14
|
-
from . import
|
|
15
|
-
from . import format_id
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class FormatType(Enum):
|
|
19
|
-
video = 'video'
|
|
20
|
-
display = 'display'
|
|
21
|
-
audio = 'audio'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class Filters(AdCPBaseModel):
|
|
25
|
-
model_config = ConfigDict(
|
|
26
|
-
extra='forbid',
|
|
27
|
-
)
|
|
28
|
-
delivery_type: delivery_type_1.DeliveryType | None = None
|
|
29
|
-
format_ids: Annotated[
|
|
30
|
-
list[format_id.FormatId] | None, Field(description='Filter by specific format IDs')
|
|
31
|
-
] = None
|
|
32
|
-
format_types: Annotated[
|
|
33
|
-
list[FormatType] | None, Field(description='Filter by format types')
|
|
34
|
-
] = None
|
|
35
|
-
is_fixed_price: Annotated[
|
|
36
|
-
bool | None, Field(description='Filter for fixed price vs auction products')
|
|
37
|
-
] = None
|
|
38
|
-
min_exposures: Annotated[
|
|
39
|
-
int | None,
|
|
40
|
-
Field(description='Minimum exposures/impressions needed for measurement validity', ge=1),
|
|
41
|
-
] = None
|
|
42
|
-
standard_formats_only: Annotated[
|
|
43
|
-
bool | None, Field(description='Only return products accepting IAB standard formats')
|
|
44
|
-
] = None
|
|
13
|
+
from . import product_filters
|
|
45
14
|
|
|
46
15
|
|
|
47
16
|
class GetProductsRequest(AdCPBaseModel):
|
|
@@ -78,6 +47,4 @@ class GetProductsRequest(AdCPBaseModel):
|
|
|
78
47
|
description='Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
|
|
79
48
|
),
|
|
80
49
|
] = None
|
|
81
|
-
filters:
|
|
82
|
-
Filters | None, Field(description='Structured filters for product discovery')
|
|
83
|
-
] = None
|
|
50
|
+
filters: product_filters.ProductFilters | None = None
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: get-signals-request.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from enum import Enum
|
|
8
7
|
from typing import Annotated, Any
|
|
9
8
|
|
|
10
9
|
from adcp.types.base import AdCPBaseModel
|
|
11
10
|
from pydantic import ConfigDict, Field, RootModel
|
|
12
11
|
|
|
13
|
-
from . import destination
|
|
12
|
+
from . import destination, signal_filters
|
|
14
13
|
|
|
15
14
|
|
|
16
15
|
class Country(RootModel[str]):
|
|
@@ -33,28 +32,6 @@ class DeliverTo(AdCPBaseModel):
|
|
|
33
32
|
]
|
|
34
33
|
|
|
35
34
|
|
|
36
|
-
class CatalogType(Enum):
|
|
37
|
-
marketplace = 'marketplace'
|
|
38
|
-
custom = 'custom'
|
|
39
|
-
owned = 'owned'
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
class Filters(AdCPBaseModel):
|
|
43
|
-
model_config = ConfigDict(
|
|
44
|
-
extra='forbid',
|
|
45
|
-
)
|
|
46
|
-
catalog_types: Annotated[
|
|
47
|
-
list[CatalogType] | None, Field(description='Filter by catalog type')
|
|
48
|
-
] = None
|
|
49
|
-
data_providers: Annotated[
|
|
50
|
-
list[str] | None, Field(description='Filter by specific data providers')
|
|
51
|
-
] = None
|
|
52
|
-
max_cpm: Annotated[float | None, Field(description='Maximum CPM price filter', ge=0.0)] = None
|
|
53
|
-
min_coverage_percentage: Annotated[
|
|
54
|
-
float | None, Field(description='Minimum coverage requirement', ge=0.0, le=100.0)
|
|
55
|
-
] = None
|
|
56
|
-
|
|
57
|
-
|
|
58
35
|
class GetSignalsRequest(AdCPBaseModel):
|
|
59
36
|
model_config = ConfigDict(
|
|
60
37
|
extra='forbid',
|
|
@@ -68,7 +45,7 @@ class GetSignalsRequest(AdCPBaseModel):
|
|
|
68
45
|
deliver_to: Annotated[
|
|
69
46
|
DeliverTo, Field(description='Deployment targets where signals need to be activated')
|
|
70
47
|
]
|
|
71
|
-
filters:
|
|
48
|
+
filters: signal_filters.SignalFilters | None = None
|
|
72
49
|
max_results: Annotated[
|
|
73
50
|
int | None, Field(description='Maximum number of results to return', ge=1)
|
|
74
51
|
] = None
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: get-signals-response.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from enum import Enum
|
|
8
7
|
from typing import Annotated, Any
|
|
9
8
|
|
|
10
9
|
from adcp.types.base import AdCPBaseModel
|
|
11
10
|
from pydantic import ConfigDict, Field
|
|
12
11
|
|
|
13
|
-
from . import deployment, error
|
|
12
|
+
from . import deployment, error, signal_catalog_type
|
|
14
13
|
|
|
15
14
|
|
|
16
15
|
class Pricing(AdCPBaseModel):
|
|
@@ -21,12 +20,6 @@ class Pricing(AdCPBaseModel):
|
|
|
21
20
|
currency: Annotated[str, Field(description='Currency code', pattern='^[A-Z]{3}$')]
|
|
22
21
|
|
|
23
22
|
|
|
24
|
-
class SignalType(Enum):
|
|
25
|
-
marketplace = 'marketplace'
|
|
26
|
-
custom = 'custom'
|
|
27
|
-
owned = 'owned'
|
|
28
|
-
|
|
29
|
-
|
|
30
23
|
class Signal(AdCPBaseModel):
|
|
31
24
|
model_config = ConfigDict(
|
|
32
25
|
extra='forbid',
|
|
@@ -43,7 +36,9 @@ class Signal(AdCPBaseModel):
|
|
|
43
36
|
name: Annotated[str, Field(description='Human-readable signal name')]
|
|
44
37
|
pricing: Annotated[Pricing, Field(description='Pricing information')]
|
|
45
38
|
signal_agent_segment_id: Annotated[str, Field(description='Unique identifier for the signal')]
|
|
46
|
-
signal_type: Annotated[
|
|
39
|
+
signal_type: Annotated[
|
|
40
|
+
signal_catalog_type.SignalCatalogType, Field(description='Type of signal')
|
|
41
|
+
]
|
|
47
42
|
|
|
48
43
|
|
|
49
44
|
class GetSignalsResponse(AdCPBaseModel):
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: history-entry-type.json
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class HistoryEntryType(Enum):
|
|
11
|
+
request = 'request'
|
|
12
|
+
response = 'response'
|
|
@@ -1,20 +1,15 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: javascript-asset.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from enum import Enum
|
|
8
7
|
from typing import Annotated
|
|
9
8
|
|
|
10
9
|
from adcp.types.base import AdCPBaseModel
|
|
11
10
|
from pydantic import ConfigDict, Field
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
class ModuleType(Enum):
|
|
15
|
-
esm = 'esm'
|
|
16
|
-
commonjs = 'commonjs'
|
|
17
|
-
script = 'script'
|
|
12
|
+
from . import javascript_module_type
|
|
18
13
|
|
|
19
14
|
|
|
20
15
|
class JavascriptAsset(AdCPBaseModel):
|
|
@@ -22,4 +17,7 @@ class JavascriptAsset(AdCPBaseModel):
|
|
|
22
17
|
extra='forbid',
|
|
23
18
|
)
|
|
24
19
|
content: Annotated[str, Field(description='JavaScript content')]
|
|
25
|
-
module_type: Annotated[
|
|
20
|
+
module_type: Annotated[
|
|
21
|
+
javascript_module_type.JavascriptModuleType | None,
|
|
22
|
+
Field(description='JavaScript module type'),
|
|
23
|
+
] = None
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: javascript-module-type.json
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class JavascriptModuleType(Enum):
|
|
11
|
+
esm = 'esm'
|
|
12
|
+
commonjs = 'commonjs'
|
|
13
|
+
script = 'script'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: landing-page-requirement.json
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class LandingPageRequirement(Enum):
|
|
11
|
+
any = 'any'
|
|
12
|
+
retailer_site_only = 'retailer_site_only'
|
|
13
|
+
must_include_retailer = 'must_include_retailer'
|
|
@@ -1,23 +1,15 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: list-creative-formats-response.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from enum import Enum
|
|
8
7
|
from typing import Annotated, Any
|
|
9
8
|
|
|
10
9
|
from adcp.types.base import AdCPBaseModel
|
|
11
10
|
from pydantic import AnyUrl, ConfigDict, Field
|
|
12
11
|
|
|
13
|
-
from . import error, format
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class Capability(Enum):
|
|
17
|
-
validation = 'validation'
|
|
18
|
-
assembly = 'assembly'
|
|
19
|
-
generation = 'generation'
|
|
20
|
-
preview = 'preview'
|
|
12
|
+
from . import creative_agent_capability, error, format
|
|
21
13
|
|
|
22
14
|
|
|
23
15
|
class CreativeAgent(AdCPBaseModel):
|
|
@@ -31,7 +23,8 @@ class CreativeAgent(AdCPBaseModel):
|
|
|
31
23
|
),
|
|
32
24
|
]
|
|
33
25
|
capabilities: Annotated[
|
|
34
|
-
list[
|
|
26
|
+
list[creative_agent_capability.CreativeAgentCapability] | None,
|
|
27
|
+
Field(description='Capabilities this creative agent provides'),
|
|
35
28
|
] = None
|
|
36
29
|
|
|
37
30
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: list-creatives-request.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -8,9 +8,9 @@ from enum import Enum
|
|
|
8
8
|
from typing import Annotated, Any
|
|
9
9
|
|
|
10
10
|
from adcp.types.base import AdCPBaseModel
|
|
11
|
-
from pydantic import
|
|
11
|
+
from pydantic import ConfigDict, Field
|
|
12
12
|
|
|
13
|
-
from . import
|
|
13
|
+
from . import creative_filters, creative_sort_field, sort_direction
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class FieldModel(Enum):
|
|
@@ -26,71 +26,6 @@ class FieldModel(Enum):
|
|
|
26
26
|
sub_assets = 'sub_assets'
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
class Filters(AdCPBaseModel):
|
|
30
|
-
model_config = ConfigDict(
|
|
31
|
-
extra='forbid',
|
|
32
|
-
)
|
|
33
|
-
assigned_to_package: Annotated[
|
|
34
|
-
str | None, Field(description='Filter creatives assigned to this specific package')
|
|
35
|
-
] = None
|
|
36
|
-
assigned_to_packages: Annotated[
|
|
37
|
-
list[str] | None, Field(description='Filter creatives assigned to any of these packages')
|
|
38
|
-
] = None
|
|
39
|
-
created_after: Annotated[
|
|
40
|
-
AwareDatetime | None,
|
|
41
|
-
Field(description='Filter creatives created after this date (ISO 8601)'),
|
|
42
|
-
] = None
|
|
43
|
-
created_before: Annotated[
|
|
44
|
-
AwareDatetime | None,
|
|
45
|
-
Field(description='Filter creatives created before this date (ISO 8601)'),
|
|
46
|
-
] = None
|
|
47
|
-
creative_ids: Annotated[
|
|
48
|
-
list[str] | None, Field(description='Filter by specific creative IDs', max_length=100)
|
|
49
|
-
] = None
|
|
50
|
-
format: Annotated[
|
|
51
|
-
str | None,
|
|
52
|
-
Field(description='Filter by creative format type (e.g., video, audio, display)'),
|
|
53
|
-
] = None
|
|
54
|
-
formats: Annotated[
|
|
55
|
-
list[str] | None, Field(description='Filter by multiple creative format types')
|
|
56
|
-
] = None
|
|
57
|
-
has_performance_data: Annotated[
|
|
58
|
-
bool | None, Field(description='Filter creatives that have performance data when true')
|
|
59
|
-
] = None
|
|
60
|
-
name_contains: Annotated[
|
|
61
|
-
str | None,
|
|
62
|
-
Field(description='Filter by creative names containing this text (case-insensitive)'),
|
|
63
|
-
] = None
|
|
64
|
-
status: Annotated[
|
|
65
|
-
creative_status.CreativeStatus | None,
|
|
66
|
-
Field(description='Filter by creative approval status'),
|
|
67
|
-
] = None
|
|
68
|
-
statuses: Annotated[
|
|
69
|
-
list[creative_status.CreativeStatus] | None,
|
|
70
|
-
Field(description='Filter by multiple creative statuses'),
|
|
71
|
-
] = None
|
|
72
|
-
tags: Annotated[
|
|
73
|
-
list[str] | None, Field(description='Filter by creative tags (all tags must match)')
|
|
74
|
-
] = None
|
|
75
|
-
tags_any: Annotated[
|
|
76
|
-
list[str] | None, Field(description='Filter by creative tags (any tag must match)')
|
|
77
|
-
] = None
|
|
78
|
-
unassigned: Annotated[
|
|
79
|
-
bool | None,
|
|
80
|
-
Field(
|
|
81
|
-
description='Filter for unassigned creatives when true, assigned creatives when false'
|
|
82
|
-
),
|
|
83
|
-
] = None
|
|
84
|
-
updated_after: Annotated[
|
|
85
|
-
AwareDatetime | None,
|
|
86
|
-
Field(description='Filter creatives last updated after this date (ISO 8601)'),
|
|
87
|
-
] = None
|
|
88
|
-
updated_before: Annotated[
|
|
89
|
-
AwareDatetime | None,
|
|
90
|
-
Field(description='Filter creatives last updated before this date (ISO 8601)'),
|
|
91
|
-
] = None
|
|
92
|
-
|
|
93
|
-
|
|
94
29
|
class Pagination(AdCPBaseModel):
|
|
95
30
|
model_config = ConfigDict(
|
|
96
31
|
extra='forbid',
|
|
@@ -101,26 +36,16 @@ class Pagination(AdCPBaseModel):
|
|
|
101
36
|
offset: Annotated[int | None, Field(description='Number of creatives to skip', ge=0)] = 0
|
|
102
37
|
|
|
103
38
|
|
|
104
|
-
class Direction(Enum):
|
|
105
|
-
asc = 'asc'
|
|
106
|
-
desc = 'desc'
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
class Field1(Enum):
|
|
110
|
-
created_date = 'created_date'
|
|
111
|
-
updated_date = 'updated_date'
|
|
112
|
-
name = 'name'
|
|
113
|
-
status = 'status'
|
|
114
|
-
assignment_count = 'assignment_count'
|
|
115
|
-
performance_score = 'performance_score'
|
|
116
|
-
|
|
117
|
-
|
|
118
39
|
class Sort(AdCPBaseModel):
|
|
119
40
|
model_config = ConfigDict(
|
|
120
41
|
extra='forbid',
|
|
121
42
|
)
|
|
122
|
-
direction: Annotated[
|
|
123
|
-
|
|
43
|
+
direction: Annotated[
|
|
44
|
+
sort_direction.SortDirection | None, Field(description='Sort direction')
|
|
45
|
+
] = sort_direction.SortDirection.desc
|
|
46
|
+
field: Annotated[
|
|
47
|
+
creative_sort_field.CreativeSortField | None, Field(description='Field to sort by')
|
|
48
|
+
] = creative_sort_field.CreativeSortField.created_date
|
|
124
49
|
|
|
125
50
|
|
|
126
51
|
class ListCreativesRequest(AdCPBaseModel):
|
|
@@ -137,9 +62,7 @@ class ListCreativesRequest(AdCPBaseModel):
|
|
|
137
62
|
list[FieldModel] | None,
|
|
138
63
|
Field(description='Specific fields to include in response (omit for all fields)'),
|
|
139
64
|
] = None
|
|
140
|
-
filters:
|
|
141
|
-
Filters | None, Field(description='Filter criteria for querying creatives')
|
|
142
|
-
] = None
|
|
65
|
+
filters: creative_filters.CreativeFilters | None = None
|
|
143
66
|
include_assignments: Annotated[
|
|
144
67
|
bool | None, Field(description='Include package assignment information in response')
|
|
145
68
|
] = True
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: list-creatives-response.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,6 +17,7 @@ from . import (
|
|
|
17
17
|
image_asset,
|
|
18
18
|
javascript_asset,
|
|
19
19
|
promoted_offerings,
|
|
20
|
+
sort_direction,
|
|
20
21
|
sub_asset,
|
|
21
22
|
text_asset,
|
|
22
23
|
url_asset,
|
|
@@ -93,13 +94,20 @@ class Pagination(AdCPBaseModel):
|
|
|
93
94
|
] = None
|
|
94
95
|
|
|
95
96
|
|
|
96
|
-
class
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
class StatusSummary(AdCPBaseModel):
|
|
98
|
+
model_config = ConfigDict(
|
|
99
|
+
extra='forbid',
|
|
100
|
+
)
|
|
101
|
+
approved: Annotated[int | None, Field(description='Number of approved creatives', ge=0)] = None
|
|
102
|
+
archived: Annotated[int | None, Field(description='Number of archived creatives', ge=0)] = None
|
|
103
|
+
pending_review: Annotated[
|
|
104
|
+
int | None, Field(description='Number of creatives pending review', ge=0)
|
|
105
|
+
] = None
|
|
106
|
+
rejected: Annotated[int | None, Field(description='Number of rejected creatives', ge=0)] = None
|
|
99
107
|
|
|
100
108
|
|
|
101
109
|
class SortApplied(AdCPBaseModel):
|
|
102
|
-
direction:
|
|
110
|
+
direction: sort_direction.SortDirection | None = None
|
|
103
111
|
field: str | None = None
|
|
104
112
|
|
|
105
113
|
|
|
@@ -122,18 +130,6 @@ class QuerySummary(AdCPBaseModel):
|
|
|
122
130
|
]
|
|
123
131
|
|
|
124
132
|
|
|
125
|
-
class StatusSummary(AdCPBaseModel):
|
|
126
|
-
model_config = ConfigDict(
|
|
127
|
-
extra='forbid',
|
|
128
|
-
)
|
|
129
|
-
approved: Annotated[int | None, Field(description='Number of approved creatives', ge=0)] = None
|
|
130
|
-
archived: Annotated[int | None, Field(description='Number of archived creatives', ge=0)] = None
|
|
131
|
-
pending_review: Annotated[
|
|
132
|
-
int | None, Field(description='Number of creatives pending review', ge=0)
|
|
133
|
-
] = None
|
|
134
|
-
rejected: Annotated[int | None, Field(description='Number of rejected creatives', ge=0)] = None
|
|
135
|
-
|
|
136
|
-
|
|
137
133
|
class Creative(AdCPBaseModel):
|
|
138
134
|
model_config = ConfigDict(
|
|
139
135
|
extra='forbid',
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: markdown-asset.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from enum import Enum
|
|
8
7
|
from typing import Annotated
|
|
9
8
|
|
|
10
9
|
from adcp.types.base import AdCPBaseModel
|
|
11
10
|
from pydantic import ConfigDict, Field
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
class MarkdownFlavor(Enum):
|
|
15
|
-
commonmark = 'commonmark'
|
|
16
|
-
gfm = 'gfm'
|
|
12
|
+
from . import markdown_flavor as markdown_flavor_1
|
|
17
13
|
|
|
18
14
|
|
|
19
15
|
class MarkdownAsset(AdCPBaseModel):
|
|
@@ -36,8 +32,8 @@ class MarkdownAsset(AdCPBaseModel):
|
|
|
36
32
|
None
|
|
37
33
|
)
|
|
38
34
|
markdown_flavor: Annotated[
|
|
39
|
-
MarkdownFlavor | None,
|
|
35
|
+
markdown_flavor_1.MarkdownFlavor | None,
|
|
40
36
|
Field(
|
|
41
37
|
description='Markdown flavor used. CommonMark for strict compatibility, GFM for tables/task lists/strikethrough.'
|
|
42
38
|
),
|
|
43
|
-
] = MarkdownFlavor.commonmark
|
|
39
|
+
] = markdown_flavor_1.MarkdownFlavor.commonmark
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: metric-type.json
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class MetricType(Enum):
|
|
11
|
+
overall_performance = 'overall_performance'
|
|
12
|
+
conversion_rate = 'conversion_rate'
|
|
13
|
+
brand_lift = 'brand_lift'
|
|
14
|
+
click_through_rate = 'click_through_rate'
|
|
15
|
+
completion_rate = 'completion_rate'
|
|
16
|
+
viewability = 'viewability'
|
|
17
|
+
brand_safety = 'brand_safety'
|
|
18
|
+
cost_efficiency = 'cost_efficiency'
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: notification-type.json
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class NotificationType(Enum):
|
|
11
|
+
scheduled = 'scheduled'
|
|
12
|
+
final = 'final'
|
|
13
|
+
delayed = 'delayed'
|
|
14
|
+
adjusted = 'adjusted'
|