adcp 2.3.0__py3-none-any.whl → 2.4.1__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.
Files changed (120) hide show
  1. adcp/__init__.py +88 -39
  2. adcp/__main__.py +1 -1
  3. adcp/client.py +9 -9
  4. adcp/simple.py +1 -1
  5. adcp/testing/test_helpers.py +1 -1
  6. adcp/types/__init__.py +66 -2
  7. adcp/types/_generated.py +175 -0
  8. adcp/types/aliases.py +1 -1
  9. adcp/types/generated_poc/__init__.py +1 -1
  10. adcp/types/generated_poc/activate_signal_request.py +5 -5
  11. adcp/types/generated_poc/activate_signal_response.py +9 -9
  12. adcp/types/generated_poc/activation_key.py +8 -8
  13. adcp/types/generated_poc/adagents.py +46 -46
  14. adcp/types/generated_poc/asset_type.py +19 -19
  15. adcp/types/generated_poc/audio_asset.py +6 -6
  16. adcp/types/generated_poc/brand_manifest.py +61 -120
  17. adcp/types/generated_poc/build_creative_request.py +6 -6
  18. adcp/types/generated_poc/build_creative_response.py +9 -9
  19. adcp/types/generated_poc/channels.py +10 -10
  20. adcp/types/generated_poc/cpc_option.py +12 -8
  21. adcp/types/generated_poc/cpcv_option.py +12 -8
  22. adcp/types/generated_poc/cpm_auction_option.py +17 -13
  23. adcp/types/generated_poc/cpm_fixed_option.py +12 -8
  24. adcp/types/generated_poc/cpp_option.py +17 -13
  25. adcp/types/generated_poc/cpv_option.py +16 -12
  26. adcp/types/generated_poc/create_media_buy_request.py +30 -30
  27. adcp/types/generated_poc/create_media_buy_response.py +11 -11
  28. adcp/types/generated_poc/creative_asset.py +13 -13
  29. adcp/types/generated_poc/creative_assignment.py +4 -4
  30. adcp/types/generated_poc/creative_manifest.py +4 -4
  31. adcp/types/generated_poc/creative_policy.py +11 -11
  32. adcp/types/generated_poc/creative_status.py +5 -5
  33. adcp/types/generated_poc/css_asset.py +3 -3
  34. adcp/types/generated_poc/daast_asset.py +30 -30
  35. adcp/types/generated_poc/delivery_metrics.py +33 -33
  36. adcp/types/generated_poc/delivery_type.py +3 -3
  37. adcp/types/generated_poc/deployment.py +21 -21
  38. adcp/types/generated_poc/destination.py +10 -10
  39. adcp/types/generated_poc/error.py +7 -7
  40. adcp/types/generated_poc/flat_rate_option.py +16 -16
  41. adcp/types/generated_poc/format.py +70 -70
  42. adcp/types/generated_poc/format_id.py +3 -3
  43. adcp/types/generated_poc/frequency_cap.py +3 -3
  44. adcp/types/generated_poc/frequency_cap_scope.py +4 -4
  45. adcp/types/generated_poc/get_media_buy_delivery_request.py +21 -21
  46. adcp/types/generated_poc/get_media_buy_delivery_response.py +46 -46
  47. adcp/types/generated_poc/get_products_request.py +24 -24
  48. adcp/types/generated_poc/get_products_response.py +5 -5
  49. adcp/types/generated_poc/get_signals_request.py +19 -19
  50. adcp/types/generated_poc/get_signals_response.py +20 -20
  51. adcp/types/generated_poc/html_asset.py +3 -3
  52. adcp/types/generated_poc/identifier_types.py +20 -20
  53. adcp/types/generated_poc/image_asset.py +7 -7
  54. adcp/types/generated_poc/javascript_asset.py +7 -7
  55. adcp/types/generated_poc/list_authorized_properties_request.py +5 -5
  56. adcp/types/generated_poc/list_authorized_properties_response.py +9 -9
  57. adcp/types/generated_poc/list_creative_formats_request.py +22 -22
  58. adcp/types/generated_poc/list_creative_formats_response.py +11 -11
  59. adcp/types/generated_poc/list_creatives_request.py +51 -51
  60. adcp/types/generated_poc/list_creatives_response.py +57 -72
  61. adcp/types/generated_poc/markdown_asset.py +7 -7
  62. adcp/types/generated_poc/measurement.py +9 -9
  63. adcp/types/generated_poc/media_buy.py +8 -8
  64. adcp/types/generated_poc/media_buy_status.py +5 -5
  65. adcp/types/generated_poc/pacing.py +4 -4
  66. adcp/types/generated_poc/package.py +8 -8
  67. adcp/types/generated_poc/package_request.py +7 -7
  68. adcp/types/generated_poc/package_status.py +5 -5
  69. adcp/types/generated_poc/performance_feedback.py +31 -31
  70. adcp/types/generated_poc/placement.py +4 -4
  71. adcp/types/generated_poc/preview_creative_request.py +28 -28
  72. adcp/types/generated_poc/preview_creative_response.py +31 -31
  73. adcp/types/generated_poc/preview_render.py +36 -28
  74. adcp/types/generated_poc/pricing_model.py +8 -8
  75. adcp/types/generated_poc/product.py +53 -43
  76. adcp/types/generated_poc/promoted_offerings.py +30 -30
  77. adcp/types/generated_poc/promoted_products.py +3 -3
  78. adcp/types/generated_poc/property.py +18 -18
  79. adcp/types/generated_poc/protocol_envelope.py +9 -9
  80. adcp/types/generated_poc/provide_performance_feedback_request.py +24 -24
  81. adcp/types/generated_poc/provide_performance_feedback_response.py +9 -9
  82. adcp/types/generated_poc/publisher_identifier_types.py +6 -6
  83. adcp/types/generated_poc/push_notification_config.py +9 -9
  84. adcp/types/generated_poc/reporting_capabilities.py +21 -21
  85. adcp/types/generated_poc/response.py +5 -5
  86. adcp/types/generated_poc/standard_format_ids.py +36 -36
  87. adcp/types/generated_poc/sub_asset.py +13 -13
  88. adcp/types/generated_poc/sync_creatives_request.py +11 -11
  89. adcp/types/generated_poc/sync_creatives_response.py +23 -23
  90. adcp/types/generated_poc/targeting.py +9 -9
  91. adcp/types/generated_poc/task_status.py +10 -10
  92. adcp/types/generated_poc/task_type.py +6 -6
  93. adcp/types/generated_poc/tasks_get_request.py +5 -5
  94. adcp/types/generated_poc/tasks_get_response.py +35 -35
  95. adcp/types/generated_poc/tasks_list_request.py +36 -36
  96. adcp/types/generated_poc/tasks_list_response.py +35 -35
  97. adcp/types/generated_poc/text_asset.py +3 -3
  98. adcp/types/generated_poc/update_media_buy_request.py +27 -27
  99. adcp/types/generated_poc/update_media_buy_response.py +11 -11
  100. adcp/types/generated_poc/url_asset.py +7 -7
  101. adcp/types/generated_poc/vast_asset.py +38 -38
  102. adcp/types/generated_poc/vcpm_auction_option.py +17 -13
  103. adcp/types/generated_poc/vcpm_fixed_option.py +12 -8
  104. adcp/types/generated_poc/video_asset.py +8 -8
  105. adcp/types/generated_poc/webhook_asset.py +19 -19
  106. adcp/types/generated_poc/webhook_payload.py +18 -18
  107. adcp/types/stable.py +175 -0
  108. adcp/utils/preview_cache.py +6 -6
  109. {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/METADATA +29 -4
  110. adcp-2.4.1.dist-info/RECORD +129 -0
  111. adcp/types/generated.py +0 -614
  112. adcp/types/generated_poc/brand_manifest_ref.py +0 -361
  113. adcp/types/generated_poc/index.py +0 -17
  114. adcp/types/generated_poc/pricing_option.py +0 -365
  115. adcp/types/generated_poc/start_timing.py +0 -13
  116. adcp-2.3.0.dist-info/RECORD +0 -132
  117. {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/WHEEL +0 -0
  118. {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/entry_points.txt +0 -0
  119. {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/licenses/LICENSE +0 -0
  120. {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: format.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -14,26 +14,26 @@ from . import format_id as format_id_1
14
14
 
15
15
 
16
16
  class AssetType(Enum):
17
- image = "image"
18
- video = "video"
19
- audio = "audio"
20
- vast = "vast"
21
- daast = "daast"
22
- text = "text"
23
- markdown = "markdown"
24
- html = "html"
25
- css = "css"
26
- javascript = "javascript"
27
- url = "url"
28
- webhook = "webhook"
29
- promoted_offerings = "promoted_offerings"
17
+ image = 'image'
18
+ video = 'video'
19
+ audio = 'audio'
20
+ vast = 'vast'
21
+ daast = 'daast'
22
+ text = 'text'
23
+ markdown = 'markdown'
24
+ html = 'html'
25
+ css = 'css'
26
+ javascript = 'javascript'
27
+ url = 'url'
28
+ webhook = 'webhook'
29
+ promoted_offerings = 'promoted_offerings'
30
30
 
31
31
 
32
32
  class AssetsRequired(AdCPBaseModel):
33
33
  asset_id: Annotated[
34
34
  str,
35
35
  Field(
36
- description="Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object."
36
+ description='Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object.'
37
37
  ),
38
38
  ]
39
39
  asset_role: Annotated[
@@ -42,34 +42,34 @@ class AssetsRequired(AdCPBaseModel):
42
42
  description="Optional descriptive label for this asset's purpose (e.g., 'hero_image', 'logo'). Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only."
43
43
  ),
44
44
  ] = None
45
- asset_type: Annotated[AssetType, Field(description="Type of asset")]
45
+ asset_type: Annotated[AssetType, Field(description='Type of asset')]
46
46
  item_type: Annotated[
47
- Literal["individual"],
48
- Field(description="Discriminator indicating this is an individual asset requirement"),
47
+ Literal['individual'],
48
+ Field(description='Discriminator indicating this is an individual asset requirement'),
49
49
  ]
50
- required: Annotated[bool | None, Field(description="Whether this asset is required")] = None
50
+ required: Annotated[bool | None, Field(description='Whether this asset is required')] = None
51
51
  requirements: Annotated[
52
52
  dict[str, Any] | None,
53
53
  Field(
54
- description="Technical requirements for this asset (dimensions, file size, duration, etc.)"
54
+ description='Technical requirements for this asset (dimensions, file size, duration, etc.)'
55
55
  ),
56
56
  ] = None
57
57
 
58
58
 
59
59
  class Asset(AdCPBaseModel):
60
- asset_id: Annotated[str, Field(description="Identifier for this asset within the group")]
60
+ asset_id: Annotated[str, Field(description='Identifier for this asset within the group')]
61
61
  asset_role: Annotated[
62
62
  str | None,
63
63
  Field(
64
64
  description="Optional descriptive label for this asset's purpose (e.g., 'hero_image', 'logo'). Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only."
65
65
  ),
66
66
  ] = None
67
- asset_type: Annotated[AssetType, Field(description="Type of asset")]
67
+ asset_type: Annotated[AssetType, Field(description='Type of asset')]
68
68
  required: Annotated[
69
- bool | None, Field(description="Whether this asset is required in each repetition")
69
+ bool | None, Field(description='Whether this asset is required in each repetition')
70
70
  ] = None
71
71
  requirements: Annotated[
72
- dict[str, Any] | None, Field(description="Technical requirements for this asset")
72
+ dict[str, Any] | None, Field(description='Technical requirements for this asset')
73
73
  ] = None
74
74
 
75
75
 
@@ -77,45 +77,45 @@ class AssetsRequired1(AdCPBaseModel):
77
77
  asset_group_id: Annotated[
78
78
  str, Field(description="Identifier for this asset group (e.g., 'product', 'slide', 'card')")
79
79
  ]
80
- assets: Annotated[list[Asset], Field(description="Assets within each repetition of this group")]
80
+ assets: Annotated[list[Asset], Field(description='Assets within each repetition of this group')]
81
81
  item_type: Annotated[
82
- Literal["repeatable_group"],
83
- Field(description="Discriminator indicating this is a repeatable asset group"),
82
+ Literal['repeatable_group'],
83
+ Field(description='Discriminator indicating this is a repeatable asset group'),
84
84
  ]
85
- max_count: Annotated[int, Field(description="Maximum number of repetitions allowed", ge=1)]
86
- min_count: Annotated[int, Field(description="Minimum number of repetitions required", ge=1)]
85
+ max_count: Annotated[int, Field(description='Maximum number of repetitions allowed', ge=1)]
86
+ min_count: Annotated[int, Field(description='Minimum number of repetitions required', ge=1)]
87
87
 
88
88
 
89
89
  class FormatCard(AdCPBaseModel):
90
90
  model_config = ConfigDict(
91
- extra="forbid",
91
+ extra='forbid',
92
92
  )
93
93
  format_id: Annotated[
94
94
  format_id_1.FormatId,
95
95
  Field(
96
- description="Creative format defining the card layout (typically format_card_standard)"
96
+ description='Creative format defining the card layout (typically format_card_standard)'
97
97
  ),
98
98
  ]
99
99
  manifest: Annotated[
100
100
  dict[str, Any],
101
- Field(description="Asset manifest for rendering the card, structure defined by the format"),
101
+ Field(description='Asset manifest for rendering the card, structure defined by the format'),
102
102
  ]
103
103
 
104
104
 
105
105
  class FormatCardDetailed(AdCPBaseModel):
106
106
  model_config = ConfigDict(
107
- extra="forbid",
107
+ extra='forbid',
108
108
  )
109
109
  format_id: Annotated[
110
110
  format_id_1.FormatId,
111
111
  Field(
112
- description="Creative format defining the detailed card layout (typically format_card_detailed)"
112
+ description='Creative format defining the detailed card layout (typically format_card_detailed)'
113
113
  ),
114
114
  ]
115
115
  manifest: Annotated[
116
116
  dict[str, Any],
117
117
  Field(
118
- description="Asset manifest for rendering the detailed card, structure defined by the format"
118
+ description='Asset manifest for rendering the detailed card, structure defined by the format'
119
119
  ),
120
120
  ]
121
121
 
@@ -126,10 +126,10 @@ class Responsive(AdCPBaseModel):
126
126
 
127
127
 
128
128
  class Unit(Enum):
129
- px = "px"
130
- dp = "dp"
131
- inches = "inches"
132
- cm = "cm"
129
+ px = 'px'
130
+ dp = 'dp'
131
+ inches = 'inches'
132
+ cm = 'cm'
133
133
 
134
134
 
135
135
  class Dimensions(AdCPBaseModel):
@@ -137,35 +137,35 @@ class Dimensions(AdCPBaseModel):
137
137
  str | None,
138
138
  Field(
139
139
  description="Fixed aspect ratio constraint (e.g., '16:9', '4:3', '1:1')",
140
- pattern="^\\d+:\\d+$",
140
+ pattern='^\\d+:\\d+$',
141
141
  ),
142
142
  ] = None
143
143
  height: Annotated[
144
- float | None, Field(description="Fixed height in specified units", ge=0.0)
144
+ float | None, Field(description='Fixed height in specified units', ge=0.0)
145
145
  ] = None
146
146
  max_height: Annotated[
147
- float | None, Field(description="Maximum height for responsive renders", ge=0.0)
147
+ float | None, Field(description='Maximum height for responsive renders', ge=0.0)
148
148
  ] = None
149
149
  max_width: Annotated[
150
- float | None, Field(description="Maximum width for responsive renders", ge=0.0)
150
+ float | None, Field(description='Maximum width for responsive renders', ge=0.0)
151
151
  ] = None
152
152
  min_height: Annotated[
153
- float | None, Field(description="Minimum height for responsive renders", ge=0.0)
153
+ float | None, Field(description='Minimum height for responsive renders', ge=0.0)
154
154
  ] = None
155
155
  min_width: Annotated[
156
- float | None, Field(description="Minimum width for responsive renders", ge=0.0)
156
+ float | None, Field(description='Minimum width for responsive renders', ge=0.0)
157
157
  ] = None
158
158
  responsive: Annotated[
159
- Responsive | None, Field(description="Indicates which dimensions are responsive/fluid")
159
+ Responsive | None, Field(description='Indicates which dimensions are responsive/fluid')
160
160
  ] = None
161
- unit: Annotated[Unit, Field(description="Unit of measurement for dimensions")]
162
- width: Annotated[float | None, Field(description="Fixed width in specified units", ge=0.0)] = (
161
+ unit: Annotated[Unit, Field(description='Unit of measurement for dimensions')]
162
+ width: Annotated[float | None, Field(description='Fixed width in specified units', ge=0.0)] = (
163
163
  None
164
164
  )
165
165
 
166
166
 
167
167
  class Render(AdCPBaseModel):
168
- dimensions: Annotated[Dimensions, Field(description="Dimensions for this rendered piece")]
168
+ dimensions: Annotated[Dimensions, Field(description='Dimensions for this rendered piece')]
169
169
  role: Annotated[
170
170
  str,
171
171
  Field(
@@ -175,86 +175,86 @@ class Render(AdCPBaseModel):
175
175
 
176
176
 
177
177
  class Type(Enum):
178
- audio = "audio"
179
- video = "video"
180
- display = "display"
181
- native = "native"
182
- dooh = "dooh"
183
- rich_media = "rich_media"
184
- universal = "universal"
178
+ audio = 'audio'
179
+ video = 'video'
180
+ display = 'display'
181
+ native = 'native'
182
+ dooh = 'dooh'
183
+ rich_media = 'rich_media'
184
+ universal = 'universal'
185
185
 
186
186
 
187
187
  class Format(AdCPBaseModel):
188
188
  model_config = ConfigDict(
189
- extra="forbid",
189
+ extra='forbid',
190
190
  )
191
191
  assets_required: Annotated[
192
192
  list[AssetsRequired | AssetsRequired1] | None,
193
193
  Field(
194
- description="Array of required assets or asset groups for this format. Each asset is identified by its asset_id, which must be used as the key in creative manifests. Can contain individual assets or repeatable asset sequences (e.g., carousel products, slideshow frames)."
194
+ description='Array of required assets or asset groups for this format. Each asset is identified by its asset_id, which must be used as the key in creative manifests. Can contain individual assets or repeatable asset sequences (e.g., carousel products, slideshow frames).'
195
195
  ),
196
196
  ] = None
197
197
  delivery: Annotated[
198
198
  dict[str, Any] | None,
199
- Field(description="Delivery method specifications (e.g., hosted, VAST, third-party tags)"),
199
+ Field(description='Delivery method specifications (e.g., hosted, VAST, third-party tags)'),
200
200
  ] = None
201
201
  description: Annotated[
202
202
  str | None,
203
203
  Field(
204
- description="Plain text explanation of what this format does and what assets it requires"
204
+ description='Plain text explanation of what this format does and what assets it requires'
205
205
  ),
206
206
  ] = None
207
207
  example_url: Annotated[
208
208
  AnyUrl | None,
209
209
  Field(
210
- description="Optional URL to showcase page with examples and interactive demos of this format"
210
+ description='Optional URL to showcase page with examples and interactive demos of this format'
211
211
  ),
212
212
  ] = None
213
213
  format_card: Annotated[
214
214
  FormatCard | None,
215
215
  Field(
216
- description="Optional standard visual card (300x400px) for displaying this format in user interfaces. Can be rendered via preview_creative or pre-generated."
216
+ description='Optional standard visual card (300x400px) for displaying this format in user interfaces. Can be rendered via preview_creative or pre-generated.'
217
217
  ),
218
218
  ] = None
219
219
  format_card_detailed: Annotated[
220
220
  FormatCardDetailed | None,
221
221
  Field(
222
- description="Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages."
222
+ description='Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages.'
223
223
  ),
224
224
  ] = None
225
225
  format_id: Annotated[
226
226
  format_id_1.FormatId,
227
- Field(description="Structured format identifier with agent URL and format name"),
227
+ Field(description='Structured format identifier with agent URL and format name'),
228
228
  ]
229
- name: Annotated[str, Field(description="Human-readable format name")]
229
+ name: Annotated[str, Field(description='Human-readable format name')]
230
230
  output_format_ids: Annotated[
231
231
  list[format_id_1.FormatId] | None,
232
232
  Field(
233
- description="For generative formats: array of format IDs that this format can generate. When a format accepts inputs like brand_manifest and message, this specifies what concrete output formats can be produced (e.g., a generative banner format might output standard image banner formats)."
233
+ description='For generative formats: array of format IDs that this format can generate. When a format accepts inputs like brand_manifest and message, this specifies what concrete output formats can be produced (e.g., a generative banner format might output standard image banner formats).'
234
234
  ),
235
235
  ] = None
236
236
  preview_image: Annotated[
237
237
  AnyUrl | None,
238
238
  Field(
239
- description="DEPRECATED: Use format_card instead. Optional preview image URL for format browsing/discovery UI. Should be 400x300px (4:3 aspect ratio) PNG or JPG. Used as thumbnail/card image in format browsers. This field is maintained for backward compatibility but format_card provides a more flexible, structured approach."
239
+ description='DEPRECATED: Use format_card instead. Optional preview image URL for format browsing/discovery UI. Should be 400x300px (4:3 aspect ratio) PNG or JPG. Used as thumbnail/card image in format browsers. This field is maintained for backward compatibility but format_card provides a more flexible, structured approach.'
240
240
  ),
241
241
  ] = None
242
242
  renders: Annotated[
243
243
  list[Render] | None,
244
244
  Field(
245
- description="Specification of rendered pieces for this format. Most formats produce a single render. Companion ad formats (video + banner), adaptive formats, and multi-placement formats produce multiple renders. Each render specifies its role and dimensions.",
245
+ description='Specification of rendered pieces for this format. Most formats produce a single render. Companion ad formats (video + banner), adaptive formats, and multi-placement formats produce multiple renders. Each render specifies its role and dimensions.',
246
246
  min_length=1,
247
247
  ),
248
248
  ] = None
249
249
  supported_macros: Annotated[
250
250
  list[str] | None,
251
251
  Field(
252
- description="List of universal macros supported by this format (e.g., MEDIA_BUY_ID, CACHEBUSTER, DEVICE_ID). Used for validation and developer tooling."
252
+ description='List of universal macros supported by this format (e.g., MEDIA_BUY_ID, CACHEBUSTER, DEVICE_ID). Used for validation and developer tooling.'
253
253
  ),
254
254
  ] = None
255
255
  type: Annotated[
256
256
  Type,
257
257
  Field(
258
- description="Media type of this format - determines rendering method and asset requirements"
258
+ description='Media type of this format - determines rendering method and asset requirements'
259
259
  ),
260
260
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: format-id.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,7 +12,7 @@ from pydantic import AnyUrl, ConfigDict, Field
12
12
 
13
13
  class FormatId(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra="forbid",
15
+ extra='forbid',
16
16
  )
17
17
  agent_url: Annotated[
18
18
  AnyUrl,
@@ -24,6 +24,6 @@ class FormatId(AdCPBaseModel):
24
24
  str,
25
25
  Field(
26
26
  description="Format identifier within the agent's namespace (e.g., 'display_300x250', 'video_standard_30s')",
27
- pattern="^[a-zA-Z0-9_-]+$",
27
+ pattern='^[a-zA-Z0-9_-]+$',
28
28
  ),
29
29
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: frequency-cap.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,8 +12,8 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class FrequencyCap(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra="forbid",
15
+ extra='forbid',
16
16
  )
17
17
  suppress_minutes: Annotated[
18
- float, Field(description="Minutes to suppress after impression", ge=0.0)
18
+ float, Field(description='Minutes to suppress after impression', ge=0.0)
19
19
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: frequency-cap-scope.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,8 +9,8 @@ from typing import Annotated, Literal
9
9
  from pydantic import Field, RootModel
10
10
 
11
11
 
12
- class FrequencyCapScope(RootModel[Literal["package"]]):
12
+ class FrequencyCapScope(RootModel[Literal['package']]):
13
13
  root: Annotated[
14
- Literal["package"],
15
- Field(description="Scope for frequency cap application", title="Frequency Cap Scope"),
14
+ Literal['package'],
15
+ Field(description='Scope for frequency cap application', title='Frequency Cap Scope'),
16
16
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: get-media-buy-delivery-request.json
3
- # timestamp: 2025-11-15T22:03:55+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,54 +12,54 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
 
14
14
  class StatusFilter(Enum):
15
- active = "active"
16
- pending = "pending"
17
- paused = "paused"
18
- completed = "completed"
19
- failed = "failed"
20
- all = "all"
15
+ active = 'active'
16
+ pending = 'pending'
17
+ paused = 'paused'
18
+ completed = 'completed'
19
+ failed = 'failed'
20
+ all = 'all'
21
21
 
22
22
 
23
23
  class StatusFilterEnum(Enum):
24
- active = "active"
25
- pending = "pending"
26
- paused = "paused"
27
- completed = "completed"
28
- failed = "failed"
24
+ active = 'active'
25
+ pending = 'pending'
26
+ paused = 'paused'
27
+ completed = 'completed'
28
+ failed = 'failed'
29
29
 
30
30
 
31
31
  class GetMediaBuyDeliveryRequest(AdCPBaseModel):
32
32
  model_config = ConfigDict(
33
- extra="forbid",
33
+ extra='forbid',
34
34
  )
35
35
  buyer_refs: Annotated[
36
- list[str] | None, Field(description="Array of buyer reference IDs to get delivery data for")
36
+ list[str] | None, Field(description='Array of buyer reference IDs to get delivery data for')
37
37
  ] = None
38
38
  context: Annotated[
39
39
  dict[str, Any] | None,
40
40
  Field(
41
- 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."
41
+ 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.'
42
42
  ),
43
43
  ] = None
44
44
  end_date: Annotated[
45
45
  str | None,
46
46
  Field(
47
- description="End date for reporting period (YYYY-MM-DD)",
48
- pattern="^\\d{4}-\\d{2}-\\d{2}$",
47
+ description='End date for reporting period (YYYY-MM-DD)',
48
+ pattern='^\\d{4}-\\d{2}-\\d{2}$',
49
49
  ),
50
50
  ] = None
51
51
  media_buy_ids: Annotated[
52
52
  list[str] | None,
53
- Field(description="Array of publisher media buy IDs to get delivery data for"),
53
+ Field(description='Array of publisher media buy IDs to get delivery data for'),
54
54
  ] = None
55
55
  start_date: Annotated[
56
56
  str | None,
57
57
  Field(
58
- description="Start date for reporting period (YYYY-MM-DD)",
59
- pattern="^\\d{4}-\\d{2}-\\d{2}$",
58
+ description='Start date for reporting period (YYYY-MM-DD)',
59
+ pattern='^\\d{4}-\\d{2}-\\d{2}$',
60
60
  ),
61
61
  ] = None
62
62
  status_filter: Annotated[
63
63
  StatusFilter | list[StatusFilterEnum] | None,
64
- Field(description="Filter by status. Can be a single status or array of statuses"),
64
+ Field(description='Filter by status. Can be a single status or array of statuses'),
65
65
  ] = None