adcp 3.0.0__py3-none-any.whl → 3.2.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.
Files changed (243) hide show
  1. adcp/ADCP_VERSION +1 -1
  2. adcp/__init__.py +13 -5
  3. adcp/__main__.py +4 -4
  4. adcp/adagents.py +5 -9
  5. adcp/client.py +14 -12
  6. adcp/protocols/a2a.py +3 -3
  7. adcp/protocols/base.py +2 -2
  8. adcp/protocols/mcp.py +3 -3
  9. adcp/server/base.py +6 -10
  10. adcp/server/content_standards.py +17 -49
  11. adcp/server/governance.py +20 -59
  12. adcp/server/mcp_tools.py +8 -4
  13. adcp/server/proposal.py +1 -3
  14. adcp/server/sponsored_intelligence.py +10 -28
  15. adcp/simple.py +10 -10
  16. adcp/types/__init__.py +14 -6
  17. adcp/types/_generated.py +44 -27
  18. adcp/types/aliases.py +55 -0
  19. adcp/types/base.py +7 -7
  20. adcp/types/generated_poc/{protocols → a2ui}/__init__.py +1 -1
  21. adcp/types/generated_poc/a2ui/component.py +24 -0
  22. adcp/types/generated_poc/a2ui/surface.py +33 -0
  23. adcp/types/generated_poc/account/__init__.py +3 -0
  24. adcp/types/generated_poc/account/list_accounts_request.py +30 -0
  25. adcp/types/generated_poc/account/list_accounts_response.py +30 -0
  26. adcp/types/generated_poc/adagents.py +192 -195
  27. adcp/types/generated_poc/content_standards/artifact.py +69 -69
  28. adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +13 -13
  29. adcp/types/generated_poc/content_standards/calibrate_content_request.py +2 -2
  30. adcp/types/generated_poc/content_standards/calibrate_content_response.py +17 -17
  31. adcp/types/generated_poc/content_standards/content_standards.py +8 -8
  32. adcp/types/generated_poc/content_standards/create_content_standards_request.py +13 -13
  33. adcp/types/generated_poc/content_standards/create_content_standards_response.py +6 -6
  34. adcp/types/generated_poc/content_standards/get_content_standards_request.py +1 -1
  35. adcp/types/generated_poc/content_standards/get_content_standards_response.py +4 -4
  36. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +14 -14
  37. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +30 -30
  38. adcp/types/generated_poc/content_standards/list_content_standards_request.py +4 -4
  39. adcp/types/generated_poc/content_standards/list_content_standards_response.py +5 -5
  40. adcp/types/generated_poc/content_standards/update_content_standards_request.py +14 -14
  41. adcp/types/generated_poc/content_standards/update_content_standards_response.py +4 -4
  42. adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +13 -13
  43. adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +16 -16
  44. adcp/types/generated_poc/core/account.py +54 -0
  45. adcp/types/generated_poc/core/activation_key.py +8 -8
  46. adcp/types/generated_poc/core/assets/audio_asset.py +37 -8
  47. adcp/types/generated_poc/core/assets/css_asset.py +2 -2
  48. adcp/types/generated_poc/core/assets/daast_asset.py +18 -18
  49. adcp/types/generated_poc/core/assets/html_asset.py +2 -2
  50. adcp/types/generated_poc/core/assets/image_asset.py +6 -6
  51. adcp/types/generated_poc/core/assets/javascript_asset.py +3 -3
  52. adcp/types/generated_poc/core/assets/text_asset.py +2 -2
  53. adcp/types/generated_poc/core/assets/url_asset.py +3 -3
  54. adcp/types/generated_poc/core/assets/vast_asset.py +18 -18
  55. adcp/types/generated_poc/core/assets/video_asset.py +126 -10
  56. adcp/types/generated_poc/core/assets/webhook_asset.py +9 -9
  57. adcp/types/generated_poc/core/async_response_data.py +2 -2
  58. adcp/types/generated_poc/core/brand_manifest.py +66 -66
  59. adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
  60. adcp/types/generated_poc/core/context.py +1 -1
  61. adcp/types/generated_poc/core/creative_asset.py +12 -12
  62. adcp/types/generated_poc/core/creative_assignment.py +3 -3
  63. adcp/types/generated_poc/core/creative_filters.py +23 -17
  64. adcp/types/generated_poc/core/creative_manifest.py +4 -4
  65. adcp/types/generated_poc/core/creative_policy.py +4 -4
  66. adcp/types/generated_poc/core/delivery_metrics.py +32 -32
  67. adcp/types/generated_poc/core/deployment.py +20 -20
  68. adcp/types/generated_poc/core/destination.py +11 -11
  69. adcp/types/generated_poc/core/error.py +6 -6
  70. adcp/types/generated_poc/core/ext.py +1 -1
  71. adcp/types/generated_poc/core/format.py +49 -124
  72. adcp/types/generated_poc/core/format_id.py +5 -5
  73. adcp/types/generated_poc/core/frequency_cap.py +2 -2
  74. adcp/types/generated_poc/core/identifier.py +2 -2
  75. adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
  76. adcp/types/generated_poc/core/measurement.py +8 -8
  77. adcp/types/generated_poc/core/media_buy.py +12 -8
  78. adcp/types/generated_poc/core/media_buy_features.py +3 -3
  79. adcp/types/generated_poc/core/offering.py +9 -9
  80. adcp/types/generated_poc/core/package.py +8 -8
  81. adcp/types/generated_poc/core/performance_feedback.py +18 -18
  82. adcp/types/generated_poc/core/placement.py +4 -4
  83. adcp/types/generated_poc/core/pricing_option.py +1 -1
  84. adcp/types/generated_poc/core/product.py +27 -21
  85. adcp/types/generated_poc/core/product_allocation.py +5 -5
  86. adcp/types/generated_poc/core/product_filters.py +27 -27
  87. adcp/types/generated_poc/core/promoted_offerings.py +18 -18
  88. adcp/types/generated_poc/core/promoted_products.py +2 -2
  89. adcp/types/generated_poc/core/property.py +10 -10
  90. adcp/types/generated_poc/core/property_id.py +4 -4
  91. adcp/types/generated_poc/core/property_list_ref.py +4 -4
  92. adcp/types/generated_poc/core/property_tag.py +4 -4
  93. adcp/types/generated_poc/core/proposal.py +13 -13
  94. adcp/types/generated_poc/core/protocol_envelope.py +8 -8
  95. adcp/types/generated_poc/core/publisher_property_selector.py +13 -13
  96. adcp/types/generated_poc/core/push_notification_config.py +5 -5
  97. adcp/types/generated_poc/core/reporting_capabilities.py +8 -8
  98. adcp/types/generated_poc/core/reporting_webhook.py +10 -10
  99. adcp/types/generated_poc/core/response.py +4 -4
  100. adcp/types/generated_poc/core/signal_filters.py +5 -5
  101. adcp/types/generated_poc/core/start_timing.py +3 -3
  102. adcp/types/generated_poc/core/sub_asset.py +14 -14
  103. adcp/types/generated_poc/core/targeting.py +17 -10
  104. adcp/types/generated_poc/creative/list_creative_formats_request.py +20 -20
  105. adcp/types/generated_poc/creative/list_creative_formats_response.py +5 -5
  106. adcp/types/generated_poc/creative/preview_creative_request.py +24 -24
  107. adcp/types/generated_poc/creative/preview_creative_response.py +28 -28
  108. adcp/types/generated_poc/creative/preview_render.py +25 -25
  109. adcp/types/generated_poc/enums/adcp_domain.py +4 -4
  110. adcp/types/generated_poc/enums/asset_content_type.py +13 -13
  111. adcp/types/generated_poc/enums/auth_scheme.py +2 -2
  112. adcp/types/generated_poc/enums/available_metric.py +9 -9
  113. adcp/types/generated_poc/enums/channels.py +19 -19
  114. adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
  115. adcp/types/generated_poc/enums/creative_action.py +5 -5
  116. adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
  117. adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
  118. adcp/types/generated_poc/enums/creative_status.py +5 -5
  119. adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
  120. adcp/types/generated_poc/enums/daast_version.py +2 -2
  121. adcp/types/generated_poc/enums/delivery_type.py +2 -2
  122. adcp/types/generated_poc/enums/dimension_unit.py +4 -4
  123. adcp/types/generated_poc/enums/feed_format.py +3 -3
  124. adcp/types/generated_poc/enums/feedback_source.py +4 -4
  125. adcp/types/generated_poc/enums/format_category.py +7 -7
  126. adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
  127. adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
  128. adcp/types/generated_poc/enums/geo_level.py +4 -4
  129. adcp/types/generated_poc/enums/history_entry_type.py +2 -2
  130. adcp/types/generated_poc/enums/http_method.py +2 -2
  131. adcp/types/generated_poc/enums/identifier_types.py +19 -19
  132. adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
  133. adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
  134. adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
  135. adcp/types/generated_poc/enums/media_buy_status.py +4 -4
  136. adcp/types/generated_poc/enums/metric_type.py +8 -8
  137. adcp/types/generated_poc/enums/metro_system.py +5 -5
  138. adcp/types/generated_poc/enums/notification_type.py +4 -4
  139. adcp/types/generated_poc/enums/pacing.py +3 -3
  140. adcp/types/generated_poc/enums/postal_system.py +9 -9
  141. adcp/types/generated_poc/enums/preview_output_format.py +2 -2
  142. adcp/types/generated_poc/enums/pricing_model.py +7 -7
  143. adcp/types/generated_poc/enums/property_type.py +8 -8
  144. adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
  145. adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
  146. adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
  147. adcp/types/generated_poc/enums/sort_direction.py +2 -2
  148. adcp/types/generated_poc/enums/task_status.py +9 -9
  149. adcp/types/generated_poc/enums/task_type.py +11 -12
  150. adcp/types/generated_poc/enums/update_frequency.py +4 -4
  151. adcp/types/generated_poc/enums/url_asset_type.py +3 -3
  152. adcp/types/generated_poc/enums/validation_mode.py +2 -2
  153. adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
  154. adcp/types/generated_poc/enums/vast_version.py +5 -5
  155. adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
  156. adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
  157. adcp/types/generated_poc/extensions/extension_meta.py +14 -14
  158. adcp/types/generated_poc/media_buy/build_creative_request.py +4 -4
  159. adcp/types/generated_poc/media_buy/build_creative_response.py +6 -6
  160. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +5 -5
  161. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
  162. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +5 -5
  163. adcp/types/generated_poc/media_buy/create_media_buy_request.py +27 -21
  164. adcp/types/generated_poc/media_buy/create_media_buy_response.py +15 -8
  165. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +8 -8
  166. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +51 -51
  167. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +6 -6
  168. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +2 -2
  169. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +4 -4
  170. adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
  171. adcp/types/generated_poc/media_buy/get_products_response.py +5 -5
  172. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +9 -9
  173. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +5 -5
  174. adcp/types/generated_poc/media_buy/list_creatives_request.py +23 -23
  175. adcp/types/generated_poc/media_buy/list_creatives_response.py +53 -49
  176. adcp/types/generated_poc/media_buy/package_request.py +8 -8
  177. adcp/types/generated_poc/media_buy/package_update.py +16 -16
  178. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +19 -19
  179. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +6 -6
  180. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +5 -5
  181. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
  182. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +7 -7
  183. adcp/types/generated_poc/media_buy/sync_creatives_request.py +14 -8
  184. adcp/types/generated_poc/media_buy/sync_creatives_response.py +33 -29
  185. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +4 -4
  186. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
  187. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +5 -5
  188. adcp/types/generated_poc/media_buy/update_media_buy_request.py +14 -14
  189. adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
  190. adcp/types/generated_poc/pricing_options/cpc_option.py +13 -26
  191. adcp/types/generated_poc/pricing_options/cpcv_option.py +13 -26
  192. adcp/types/generated_poc/pricing_options/cpm_option.py +13 -20
  193. adcp/types/generated_poc/pricing_options/cpp_option.py +19 -32
  194. adcp/types/generated_poc/pricing_options/cpv_option.py +19 -32
  195. adcp/types/generated_poc/pricing_options/flat_rate_option.py +23 -36
  196. adcp/types/generated_poc/pricing_options/price_guidance.py +26 -0
  197. adcp/types/generated_poc/pricing_options/vcpm_option.py +13 -26
  198. adcp/types/generated_poc/property/base_property_source.py +15 -15
  199. adcp/types/generated_poc/property/create_property_list_request.py +4 -4
  200. adcp/types/generated_poc/property/create_property_list_response.py +3 -3
  201. adcp/types/generated_poc/property/delete_property_list_request.py +2 -2
  202. adcp/types/generated_poc/property/delete_property_list_response.py +3 -3
  203. adcp/types/generated_poc/property/feature_requirement.py +8 -8
  204. adcp/types/generated_poc/property/get_property_list_request.py +5 -5
  205. adcp/types/generated_poc/property/get_property_list_response.py +11 -11
  206. adcp/types/generated_poc/property/list_property_lists_request.py +5 -5
  207. adcp/types/generated_poc/property/list_property_lists_response.py +8 -8
  208. adcp/types/generated_poc/property/property_error.py +10 -10
  209. adcp/types/generated_poc/property/property_feature.py +4 -4
  210. adcp/types/generated_poc/property/property_feature_definition.py +18 -18
  211. adcp/types/generated_poc/property/property_list.py +11 -11
  212. adcp/types/generated_poc/property/property_list_changed_webhook.py +11 -11
  213. adcp/types/generated_poc/property/property_list_filters.py +7 -7
  214. adcp/types/generated_poc/property/update_property_list_request.py +8 -8
  215. adcp/types/generated_poc/property/update_property_list_response.py +2 -2
  216. adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +8 -6
  217. adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +59 -58
  218. adcp/types/generated_poc/signals/activate_signal_request.py +3 -3
  219. adcp/types/generated_poc/signals/activate_signal_response.py +6 -6
  220. adcp/types/generated_poc/signals/get_signals_request.py +8 -8
  221. adcp/types/generated_poc/signals/get_signals_response.py +15 -15
  222. adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +45 -30
  223. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +4 -4
  224. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +23 -23
  225. adcp/types/generated_poc/sponsored_intelligence/si_identity.py +16 -16
  226. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +5 -5
  227. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +7 -7
  228. adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +11 -11
  229. adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +37 -23
  230. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +17 -17
  231. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +15 -15
  232. adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +11 -11
  233. adcp/utils/format_assets.py +32 -32
  234. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/METADATA +10 -5
  235. adcp-3.2.0.dist-info/RECORD +268 -0
  236. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +0 -38
  237. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +0 -84
  238. adcp/types/generated_poc/protocols/adcp_extension.py +0 -50
  239. adcp-3.0.0.dist-info/RECORD +0 -264
  240. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/WHEEL +0 -0
  241. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/entry_points.txt +0 -0
  242. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/licenses/LICENSE +0 -0
  243. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/top_level.txt +0 -0
@@ -12,15 +12,15 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class VenueBreakdownItem(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
- impressions: Annotated[int, Field(description='Impressions delivered at this venue', ge=0)]
18
- loop_plays: Annotated[int | None, Field(description='Loop plays at this venue', ge=0)] = None
17
+ impressions: Annotated[int, Field(description="Impressions delivered at this venue", ge=0)]
18
+ loop_plays: Annotated[int | None, Field(description="Loop plays at this venue", ge=0)] = None
19
19
  screens_used: Annotated[
20
- int | None, Field(description='Number of screens used at this venue', ge=0)
20
+ int | None, Field(description="Number of screens used at this venue", ge=0)
21
21
  ] = None
22
- venue_id: Annotated[str, Field(description='Venue identifier')]
23
- venue_name: Annotated[str | None, Field(description='Human-readable venue name')] = None
22
+ venue_id: Annotated[str, Field(description="Venue identifier")]
23
+ venue_name: Annotated[str | None, Field(description="Human-readable venue name")] = None
24
24
  venue_type: Annotated[
25
25
  str | None,
26
26
  Field(description="Venue type (e.g., 'airport', 'transit', 'retail', 'billboard')"),
@@ -29,83 +29,83 @@ class VenueBreakdownItem(AdCPBaseModel):
29
29
 
30
30
  class DoohMetrics(AdCPBaseModel):
31
31
  model_config = ConfigDict(
32
- extra='allow',
32
+ extra="allow",
33
33
  )
34
34
  calculation_notes: Annotated[
35
- str | None, Field(description='Explanation of how DOOH impressions were calculated')
35
+ str | None, Field(description="Explanation of how DOOH impressions were calculated")
36
36
  ] = None
37
37
  loop_plays: Annotated[
38
- int | None, Field(description='Number of times ad played in rotation', ge=0)
38
+ int | None, Field(description="Number of times ad played in rotation", ge=0)
39
39
  ] = None
40
40
  screen_time_seconds: Annotated[
41
- int | None, Field(description='Total display time in seconds', ge=0)
41
+ int | None, Field(description="Total display time in seconds", ge=0)
42
42
  ] = None
43
43
  screens_used: Annotated[
44
- int | None, Field(description='Number of unique screens displaying the ad', ge=0)
44
+ int | None, Field(description="Number of unique screens displaying the ad", ge=0)
45
45
  ] = None
46
46
  sov_achieved: Annotated[
47
47
  float | None,
48
- Field(description='Actual share of voice delivered (0.0 to 1.0)', ge=0.0, le=1.0),
48
+ Field(description="Actual share of voice delivered (0.0 to 1.0)", ge=0.0, le=1.0),
49
49
  ] = None
50
50
  venue_breakdown: Annotated[
51
- list[VenueBreakdownItem] | None, Field(description='Per-venue performance breakdown')
51
+ list[VenueBreakdownItem] | None, Field(description="Per-venue performance breakdown")
52
52
  ] = None
53
53
 
54
54
 
55
55
  class QuartileData(AdCPBaseModel):
56
- q1_views: Annotated[float | None, Field(description='25% completion views', ge=0.0)] = None
57
- q2_views: Annotated[float | None, Field(description='50% completion views', ge=0.0)] = None
58
- q3_views: Annotated[float | None, Field(description='75% completion views', ge=0.0)] = None
59
- q4_views: Annotated[float | None, Field(description='100% completion views', ge=0.0)] = None
56
+ q1_views: Annotated[float | None, Field(description="25% completion views", ge=0.0)] = None
57
+ q2_views: Annotated[float | None, Field(description="50% completion views", ge=0.0)] = None
58
+ q3_views: Annotated[float | None, Field(description="75% completion views", ge=0.0)] = None
59
+ q4_views: Annotated[float | None, Field(description="100% completion views", ge=0.0)] = None
60
60
 
61
61
 
62
62
  class DeliveryMetrics(AdCPBaseModel):
63
63
  model_config = ConfigDict(
64
- extra='allow',
64
+ extra="allow",
65
65
  )
66
- clicks: Annotated[float | None, Field(description='Total clicks', ge=0.0)] = None
66
+ clicks: Annotated[float | None, Field(description="Total clicks", ge=0.0)] = None
67
67
  completed_views: Annotated[
68
- float | None, Field(description='100% completions (for CPCV)', ge=0.0)
68
+ float | None, Field(description="100% completions (for CPCV)", ge=0.0)
69
69
  ] = None
70
70
  completion_rate: Annotated[
71
71
  float | None,
72
- Field(description='Completion rate (completed_views/impressions)', ge=0.0, le=1.0),
72
+ Field(description="Completion rate (completed_views/impressions)", ge=0.0, le=1.0),
73
73
  ] = None
74
74
  conversions: Annotated[
75
75
  float | None,
76
- Field(description='Conversions (reserved for future CPA pricing support)', ge=0.0),
76
+ Field(description="Conversions (reserved for future CPA pricing support)", ge=0.0),
77
77
  ] = None
78
78
  ctr: Annotated[
79
- float | None, Field(description='Click-through rate (clicks/impressions)', ge=0.0, le=1.0)
79
+ float | None, Field(description="Click-through rate (clicks/impressions)", ge=0.0, le=1.0)
80
80
  ] = None
81
81
  dooh_metrics: Annotated[
82
82
  DoohMetrics | None,
83
- Field(description='DOOH-specific metrics (only included for DOOH campaigns)'),
83
+ Field(description="DOOH-specific metrics (only included for DOOH campaigns)"),
84
84
  ] = None
85
85
  frequency: Annotated[
86
86
  float | None,
87
87
  Field(
88
- description='Average frequency per individual (typically measured over campaign duration, but can vary by measurement provider)',
88
+ description="Average frequency per individual (typically measured over campaign duration, but can vary by measurement provider)",
89
89
  ge=0.0,
90
90
  ),
91
91
  ] = None
92
92
  grps: Annotated[
93
- float | None, Field(description='Gross Rating Points delivered (for CPP)', ge=0.0)
93
+ float | None, Field(description="Gross Rating Points delivered (for CPP)", ge=0.0)
94
94
  ] = None
95
- impressions: Annotated[float | None, Field(description='Impressions delivered', ge=0.0)] = None
95
+ impressions: Annotated[float | None, Field(description="Impressions delivered", ge=0.0)] = None
96
96
  leads: Annotated[
97
97
  float | None,
98
- Field(description='Leads generated (reserved for future CPL pricing support)', ge=0.0),
98
+ Field(description="Leads generated (reserved for future CPL pricing support)", ge=0.0),
99
99
  ] = None
100
100
  quartile_data: Annotated[
101
- QuartileData | None, Field(description='Video quartile completion data')
101
+ QuartileData | None, Field(description="Video quartile completion data")
102
102
  ] = None
103
103
  reach: Annotated[
104
104
  float | None,
105
105
  Field(
106
- description='Unique reach - units depend on measurement provider (e.g., individuals, households, devices, cookies). See delivery_measurement.provider for methodology.',
106
+ description="Unique reach - units depend on measurement provider (e.g., individuals, households, devices, cookies). See delivery_measurement.provider for methodology.",
107
107
  ge=0.0,
108
108
  ),
109
109
  ] = None
110
- spend: Annotated[float | None, Field(description='Amount spent', ge=0.0)] = None
111
- views: Annotated[float | None, Field(description='Views at threshold (for CPV)', ge=0.0)] = None
110
+ spend: Annotated[float | None, Field(description="Amount spent", ge=0.0)] = None
111
+ views: Annotated[float | None, Field(description="Views at threshold (for CPV)", ge=0.0)] = None
@@ -14,65 +14,65 @@ from . import activation_key as activation_key_1
14
14
 
15
15
  class Deployment1(AdCPBaseModel):
16
16
  model_config = ConfigDict(
17
- extra='allow',
17
+ extra="allow",
18
18
  )
19
- account: Annotated[str | None, Field(description='Account identifier if applicable')] = None
19
+ account: Annotated[str | None, Field(description="Account identifier if applicable")] = None
20
20
  activation_key: Annotated[
21
21
  activation_key_1.ActivationKey | None,
22
22
  Field(
23
- description='The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.'
23
+ description="The key to use for targeting. Only present if is_live=true AND requester has access to this deployment."
24
24
  ),
25
25
  ] = None
26
26
  deployed_at: Annotated[
27
27
  AwareDatetime | None,
28
- Field(description='Timestamp when activation completed (if is_live=true)'),
28
+ Field(description="Timestamp when activation completed (if is_live=true)"),
29
29
  ] = None
30
30
  estimated_activation_duration_minutes: Annotated[
31
31
  float | None,
32
32
  Field(
33
- description='Estimated time to activate if not live, or to complete activation if in progress',
33
+ description="Estimated time to activate if not live, or to complete activation if in progress",
34
34
  ge=0.0,
35
35
  ),
36
36
  ] = None
37
37
  is_live: Annotated[
38
- bool, Field(description='Whether signal is currently active on this deployment')
38
+ bool, Field(description="Whether signal is currently active on this deployment")
39
39
  ]
40
- platform: Annotated[str, Field(description='Platform identifier for DSPs')]
40
+ platform: Annotated[str, Field(description="Platform identifier for DSPs")]
41
41
  type: Annotated[
42
- Literal['platform'],
43
- Field(description='Discriminator indicating this is a platform-based deployment'),
42
+ Literal["platform"],
43
+ Field(description="Discriminator indicating this is a platform-based deployment"),
44
44
  ]
45
45
 
46
46
 
47
47
  class Deployment2(AdCPBaseModel):
48
48
  model_config = ConfigDict(
49
- extra='allow',
49
+ extra="allow",
50
50
  )
51
- account: Annotated[str | None, Field(description='Account identifier if applicable')] = None
51
+ account: Annotated[str | None, Field(description="Account identifier if applicable")] = None
52
52
  activation_key: Annotated[
53
53
  activation_key_1.ActivationKey | None,
54
54
  Field(
55
- description='The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.'
55
+ description="The key to use for targeting. Only present if is_live=true AND requester has access to this deployment."
56
56
  ),
57
57
  ] = None
58
- agent_url: Annotated[AnyUrl, Field(description='URL identifying the deployment agent')]
58
+ agent_url: Annotated[AnyUrl, Field(description="URL identifying the deployment agent")]
59
59
  deployed_at: Annotated[
60
60
  AwareDatetime | None,
61
- Field(description='Timestamp when activation completed (if is_live=true)'),
61
+ Field(description="Timestamp when activation completed (if is_live=true)"),
62
62
  ] = None
63
63
  estimated_activation_duration_minutes: Annotated[
64
64
  float | None,
65
65
  Field(
66
- description='Estimated time to activate if not live, or to complete activation if in progress',
66
+ description="Estimated time to activate if not live, or to complete activation if in progress",
67
67
  ge=0.0,
68
68
  ),
69
69
  ] = None
70
70
  is_live: Annotated[
71
- bool, Field(description='Whether signal is currently active on this deployment')
71
+ bool, Field(description="Whether signal is currently active on this deployment")
72
72
  ]
73
73
  type: Annotated[
74
- Literal['agent'],
75
- Field(description='Discriminator indicating this is an agent URL-based deployment'),
74
+ Literal["agent"],
75
+ Field(description="Discriminator indicating this is an agent URL-based deployment"),
76
76
  ]
77
77
 
78
78
 
@@ -80,7 +80,7 @@ class Deployment(RootModel[Deployment1 | Deployment2]):
80
80
  root: Annotated[
81
81
  Deployment1 | Deployment2,
82
82
  Field(
83
- description='A signal deployment to a specific deployment target with activation status and key',
84
- title='Deployment',
83
+ description="A signal deployment to a specific deployment target with activation status and key",
84
+ title="Deployment",
85
85
  ),
86
86
  ]
@@ -12,34 +12,34 @@ from pydantic import AnyUrl, ConfigDict, Field, RootModel
12
12
 
13
13
  class Destination1(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
17
  account: Annotated[
18
- str | None, Field(description='Optional account identifier on the platform')
18
+ str | None, Field(description="Optional account identifier on the platform")
19
19
  ] = None
20
20
  platform: Annotated[
21
21
  str,
22
22
  Field(description="Platform identifier for DSPs (e.g., 'the-trade-desk', 'amazon-dsp')"),
23
23
  ]
24
24
  type: Annotated[
25
- Literal['platform'],
26
- Field(description='Discriminator indicating this is a platform-based deployment'),
25
+ Literal["platform"],
26
+ Field(description="Discriminator indicating this is a platform-based deployment"),
27
27
  ]
28
28
 
29
29
 
30
30
  class Destination2(AdCPBaseModel):
31
31
  model_config = ConfigDict(
32
- extra='allow',
32
+ extra="allow",
33
33
  )
34
34
  account: Annotated[
35
- str | None, Field(description='Optional account identifier on the agent')
35
+ str | None, Field(description="Optional account identifier on the agent")
36
36
  ] = None
37
37
  agent_url: Annotated[
38
- AnyUrl, Field(description='URL identifying the deployment agent (for sales agents, etc.)')
38
+ AnyUrl, Field(description="URL identifying the deployment agent (for sales agents, etc.)")
39
39
  ]
40
40
  type: Annotated[
41
- Literal['agent'],
42
- Field(description='Discriminator indicating this is an agent URL-based deployment'),
41
+ Literal["agent"],
42
+ Field(description="Discriminator indicating this is an agent URL-based deployment"),
43
43
  ]
44
44
 
45
45
 
@@ -47,7 +47,7 @@ class Destination(RootModel[Destination1 | Destination2]):
47
47
  root: Annotated[
48
48
  Destination1 | Destination2,
49
49
  Field(
50
- description='A deployment target where signals can be activated (DSP, sales agent, etc.)',
51
- title='Destination',
50
+ description="A deployment target where signals can be activated (DSP, sales agent, etc.)",
51
+ title="Destination",
52
52
  ),
53
53
  ]
@@ -12,18 +12,18 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class Error(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
- code: Annotated[str, Field(description='Error code for programmatic handling')]
17
+ code: Annotated[str, Field(description="Error code for programmatic handling")]
18
18
  details: Annotated[
19
- dict[str, Any] | None, Field(description='Additional task-specific error details')
19
+ dict[str, Any] | None, Field(description="Additional task-specific error details")
20
20
  ] = None
21
21
  field: Annotated[
22
22
  str | None,
23
23
  Field(description="Field path associated with the error (e.g., 'packages[0].targeting')"),
24
24
  ] = None
25
- message: Annotated[str, Field(description='Human-readable error message')]
25
+ message: Annotated[str, Field(description="Human-readable error message")]
26
26
  retry_after: Annotated[
27
- float | None, Field(description='Seconds to wait before retrying the operation', ge=0.0)
27
+ float | None, Field(description="Seconds to wait before retrying the operation", ge=0.0)
28
28
  ] = None
29
- suggestion: Annotated[str | None, Field(description='Suggested fix for the error')] = None
29
+ suggestion: Annotated[str | None, Field(description="Suggested fix for the error")] = None
@@ -10,5 +10,5 @@ from pydantic import ConfigDict
10
10
 
11
11
  class ExtensionObject(AdCPBaseModel):
12
12
  model_config = ConfigDict(
13
- extra='allow',
13
+ extra="allow",
14
14
  )