adcp 2.4.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 (119) 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 → _generated.py} +67 -11
  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 +1 -1
  11. adcp/types/generated_poc/activate_signal_response.py +1 -1
  12. adcp/types/generated_poc/activation_key.py +1 -1
  13. adcp/types/generated_poc/adagents.py +1 -1
  14. adcp/types/generated_poc/asset_type.py +1 -1
  15. adcp/types/generated_poc/audio_asset.py +1 -1
  16. adcp/types/generated_poc/brand_manifest.py +3 -62
  17. adcp/types/generated_poc/build_creative_request.py +1 -1
  18. adcp/types/generated_poc/build_creative_response.py +1 -1
  19. adcp/types/generated_poc/channels.py +1 -1
  20. adcp/types/generated_poc/cpc_option.py +1 -1
  21. adcp/types/generated_poc/cpcv_option.py +1 -1
  22. adcp/types/generated_poc/cpm_auction_option.py +1 -1
  23. adcp/types/generated_poc/cpm_fixed_option.py +1 -1
  24. adcp/types/generated_poc/cpp_option.py +1 -1
  25. adcp/types/generated_poc/cpv_option.py +1 -1
  26. adcp/types/generated_poc/create_media_buy_request.py +2 -2
  27. adcp/types/generated_poc/create_media_buy_response.py +1 -1
  28. adcp/types/generated_poc/creative_asset.py +1 -1
  29. adcp/types/generated_poc/creative_assignment.py +1 -1
  30. adcp/types/generated_poc/creative_manifest.py +1 -1
  31. adcp/types/generated_poc/creative_policy.py +1 -1
  32. adcp/types/generated_poc/creative_status.py +1 -1
  33. adcp/types/generated_poc/css_asset.py +1 -1
  34. adcp/types/generated_poc/daast_asset.py +1 -1
  35. adcp/types/generated_poc/delivery_metrics.py +1 -1
  36. adcp/types/generated_poc/delivery_type.py +1 -1
  37. adcp/types/generated_poc/deployment.py +1 -1
  38. adcp/types/generated_poc/destination.py +1 -1
  39. adcp/types/generated_poc/error.py +1 -1
  40. adcp/types/generated_poc/flat_rate_option.py +1 -1
  41. adcp/types/generated_poc/format.py +1 -1
  42. adcp/types/generated_poc/format_id.py +1 -1
  43. adcp/types/generated_poc/frequency_cap.py +1 -1
  44. adcp/types/generated_poc/frequency_cap_scope.py +1 -1
  45. adcp/types/generated_poc/get_media_buy_delivery_request.py +1 -1
  46. adcp/types/generated_poc/get_media_buy_delivery_response.py +1 -1
  47. adcp/types/generated_poc/get_products_request.py +2 -2
  48. adcp/types/generated_poc/get_products_response.py +1 -1
  49. adcp/types/generated_poc/get_signals_request.py +1 -1
  50. adcp/types/generated_poc/get_signals_response.py +1 -1
  51. adcp/types/generated_poc/html_asset.py +1 -1
  52. adcp/types/generated_poc/identifier_types.py +1 -1
  53. adcp/types/generated_poc/image_asset.py +1 -1
  54. adcp/types/generated_poc/javascript_asset.py +1 -1
  55. adcp/types/generated_poc/list_authorized_properties_request.py +1 -1
  56. adcp/types/generated_poc/list_authorized_properties_response.py +1 -1
  57. adcp/types/generated_poc/list_creative_formats_request.py +1 -1
  58. adcp/types/generated_poc/list_creative_formats_response.py +1 -1
  59. adcp/types/generated_poc/list_creatives_request.py +1 -1
  60. adcp/types/generated_poc/list_creatives_response.py +2 -17
  61. adcp/types/generated_poc/markdown_asset.py +1 -1
  62. adcp/types/generated_poc/measurement.py +1 -1
  63. adcp/types/generated_poc/media_buy.py +1 -1
  64. adcp/types/generated_poc/media_buy_status.py +1 -1
  65. adcp/types/generated_poc/pacing.py +1 -1
  66. adcp/types/generated_poc/package.py +1 -1
  67. adcp/types/generated_poc/package_request.py +1 -1
  68. adcp/types/generated_poc/package_status.py +1 -1
  69. adcp/types/generated_poc/performance_feedback.py +1 -1
  70. adcp/types/generated_poc/placement.py +1 -1
  71. adcp/types/generated_poc/preview_creative_request.py +1 -1
  72. adcp/types/generated_poc/preview_creative_response.py +1 -1
  73. adcp/types/generated_poc/preview_render.py +1 -1
  74. adcp/types/generated_poc/pricing_model.py +1 -1
  75. adcp/types/generated_poc/product.py +25 -16
  76. adcp/types/generated_poc/promoted_offerings.py +2 -2
  77. adcp/types/generated_poc/promoted_products.py +1 -1
  78. adcp/types/generated_poc/property.py +1 -1
  79. adcp/types/generated_poc/protocol_envelope.py +1 -1
  80. adcp/types/generated_poc/provide_performance_feedback_request.py +1 -1
  81. adcp/types/generated_poc/provide_performance_feedback_response.py +1 -1
  82. adcp/types/generated_poc/publisher_identifier_types.py +1 -1
  83. adcp/types/generated_poc/push_notification_config.py +1 -1
  84. adcp/types/generated_poc/reporting_capabilities.py +1 -1
  85. adcp/types/generated_poc/response.py +1 -1
  86. adcp/types/generated_poc/standard_format_ids.py +1 -1
  87. adcp/types/generated_poc/sub_asset.py +1 -1
  88. adcp/types/generated_poc/sync_creatives_request.py +1 -1
  89. adcp/types/generated_poc/sync_creatives_response.py +1 -1
  90. adcp/types/generated_poc/targeting.py +1 -1
  91. adcp/types/generated_poc/task_status.py +1 -1
  92. adcp/types/generated_poc/task_type.py +1 -1
  93. adcp/types/generated_poc/tasks_get_request.py +1 -1
  94. adcp/types/generated_poc/tasks_get_response.py +1 -1
  95. adcp/types/generated_poc/tasks_list_request.py +1 -1
  96. adcp/types/generated_poc/tasks_list_response.py +1 -1
  97. adcp/types/generated_poc/text_asset.py +1 -1
  98. adcp/types/generated_poc/update_media_buy_request.py +1 -1
  99. adcp/types/generated_poc/update_media_buy_response.py +1 -1
  100. adcp/types/generated_poc/url_asset.py +1 -1
  101. adcp/types/generated_poc/vast_asset.py +1 -1
  102. adcp/types/generated_poc/vcpm_auction_option.py +1 -1
  103. adcp/types/generated_poc/vcpm_fixed_option.py +1 -1
  104. adcp/types/generated_poc/video_asset.py +1 -1
  105. adcp/types/generated_poc/webhook_asset.py +1 -1
  106. adcp/types/generated_poc/webhook_payload.py +1 -1
  107. adcp/types/stable.py +175 -0
  108. adcp/utils/preview_cache.py +6 -6
  109. {adcp-2.4.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_poc/brand_manifest_ref.py +0 -361
  112. adcp/types/generated_poc/index.py +0 -17
  113. adcp/types/generated_poc/pricing_option.py +0 -365
  114. adcp/types/generated_poc/start_timing.py +0 -13
  115. adcp-2.4.0.dist-info/RECORD +0 -132
  116. {adcp-2.4.0.dist-info → adcp-2.4.1.dist-info}/WHEEL +0 -0
  117. {adcp-2.4.0.dist-info → adcp-2.4.1.dist-info}/entry_points.txt +0 -0
  118. {adcp-2.4.0.dist-info → adcp-2.4.1.dist-info}/licenses/LICENSE +0 -0
  119. {adcp-2.4.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: cpm-fixed-option.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: cpp-option.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: cpv-option.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: create-media-buy-request.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T04:34:42+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -10,7 +10,7 @@ from typing import Annotated, Any
10
10
  from adcp.types.base import AdCPBaseModel
11
11
  from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field
12
12
 
13
- from . import brand_manifest_ref as brand_manifest_1
13
+ from . import brand_manifest as brand_manifest_1
14
14
  from . import package_request
15
15
  from .push_notification_config import PushNotificationConfig
16
16
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: create-media-buy-response.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative-asset.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative-assignment.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative-manifest.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative-policy.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative-status.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: css-asset.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: daast-asset.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: delivery-metrics.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: delivery-type.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: deployment.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: destination.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: error.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: flat-rate-option.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: format.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: format-id.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: frequency-cap.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: frequency-cap-scope.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: get-media-buy-delivery-request.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: get-media-buy-delivery-response.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: get-products-request.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T04:34:42+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -10,7 +10,7 @@ from typing import Annotated, Any
10
10
  from adcp.types.base import AdCPBaseModel
11
11
  from pydantic import AnyUrl, ConfigDict, Field
12
12
 
13
- from . import brand_manifest_ref as brand_manifest_1
13
+ from . import brand_manifest as brand_manifest_1
14
14
  from . import delivery_type as delivery_type_1
15
15
  from . import format_id
16
16
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: get-products-response.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: get-signals-request.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: get-signals-response.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: html-asset.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: identifier-types.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: image-asset.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: javascript-asset.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: list-authorized-properties-request.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: list-authorized-properties-response.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: list-creative-formats-request.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: list-creative-formats-response.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: list-creatives-request.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T12:11:55+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: list-creatives-response.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T04:34:42+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -8,7 +8,7 @@ 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 AnyUrl, AwareDatetime, ConfigDict, Field
11
+ from pydantic import AwareDatetime, ConfigDict, Field
12
12
 
13
13
  from . import audio_asset, creative_status, css_asset, daast_asset
14
14
  from . import format_id as format_id_1
@@ -162,26 +162,14 @@ class Creative(AdCPBaseModel):
162
162
  Assignments | None,
163
163
  Field(description='Current package assignments (included when include_assignments=true)'),
164
164
  ] = None
165
- click_url: Annotated[AnyUrl | None, Field(description='Landing page URL for the creative')] = (
166
- None
167
- )
168
165
  created_date: Annotated[
169
166
  AwareDatetime, Field(description='When the creative was uploaded to the library')
170
167
  ]
171
168
  creative_id: Annotated[str, Field(description='Unique identifier for the creative')]
172
- duration: Annotated[
173
- float | None, Field(description='Duration in milliseconds (for video/audio)', ge=0.0)
174
- ] = None
175
169
  format_id: Annotated[
176
170
  format_id_1.FormatId,
177
171
  Field(description='Format identifier specifying which format this creative conforms to'),
178
172
  ]
179
- height: Annotated[
180
- float | None, Field(description='Height in pixels (for video/display)', ge=0.0)
181
- ] = None
182
- media_url: Annotated[
183
- AnyUrl | None, Field(description='URL of the creative file (for hosted assets)')
184
- ] = None
185
173
  name: Annotated[str, Field(description='Human-readable creative name')]
186
174
  performance: Annotated[
187
175
  Performance | None,
@@ -202,9 +190,6 @@ class Creative(AdCPBaseModel):
202
190
  list[str] | None, Field(description='User-defined tags for organization and searchability')
203
191
  ] = None
204
192
  updated_date: Annotated[AwareDatetime, Field(description='When the creative was last modified')]
205
- width: Annotated[
206
- float | None, Field(description='Width in pixels (for video/display)', ge=0.0)
207
- ] = None
208
193
 
209
194
 
210
195
  class ListCreativesResponse(AdCPBaseModel):
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: markdown-asset.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: measurement.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media-buy.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media-buy-status.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: pacing.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: package.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: package-request.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: package-status.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: performance-feedback.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: placement.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: preview-creative-request.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: preview-creative-response.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: preview-render.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: pricing-model.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,13 +1,13 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: product.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T05:05:53+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
7
  from typing import Annotated, Any, Literal
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
- from pydantic import AwareDatetime, ConfigDict, Field, RootModel, model_validator
10
+ from pydantic import AwareDatetime, ConfigDict, Field, RootModel
11
11
 
12
12
  from . import cpc_option, cpcv_option, cpm_auction_option, cpm_fixed_option, cpp_option, cpv_option
13
13
  from . import creative_policy as creative_policy_1
@@ -69,11 +69,30 @@ class ProductCardDetailed(AdCPBaseModel):
69
69
  ]
70
70
 
71
71
 
72
+ class PublisherProperties(AdCPBaseModel):
73
+ model_config = ConfigDict(
74
+ extra='forbid',
75
+ )
76
+ publisher_domain: Annotated[
77
+ str,
78
+ Field(
79
+ description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')",
80
+ pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
81
+ ),
82
+ ]
83
+ selection_type: Annotated[
84
+ Literal['all'],
85
+ Field(
86
+ description='Discriminator indicating all properties from this publisher are included'
87
+ ),
88
+ ]
89
+
90
+
72
91
  class PropertyId(RootModel[str]):
73
92
  root: Annotated[str, Field(pattern='^[a-z0-9_]+$')]
74
93
 
75
94
 
76
- class PublisherProperties(AdCPBaseModel):
95
+ class PublisherProperties4(AdCPBaseModel):
77
96
  model_config = ConfigDict(
78
97
  extra='forbid',
79
98
  )
@@ -98,7 +117,7 @@ class PropertyTag(PropertyId):
98
117
  pass
99
118
 
100
119
 
101
- class PublisherProperties3(AdCPBaseModel):
120
+ class PublisherProperties5(AdCPBaseModel):
102
121
  model_config = ConfigDict(
103
122
  extra='forbid',
104
123
  )
@@ -193,20 +212,10 @@ class Product(AdCPBaseModel):
193
212
  ] = None
194
213
  product_id: Annotated[str, Field(description='Unique identifier for the product')]
195
214
  publisher_properties: Annotated[
196
- list[PublisherProperties | PublisherProperties3],
215
+ list[PublisherProperties | PublisherProperties4 | PublisherProperties5],
197
216
  Field(
198
- description="Publisher properties covered by this product. Buyers fetch actual property definitions from each publisher's adagents.json and validate agent authorization.",
217
+ description="Publisher properties covered by this product. Buyers fetch actual property definitions from each publisher's adagents.json and validate agent authorization. Selection patterns mirror the authorization patterns in adagents.json for consistency.",
199
218
  min_length=1,
200
219
  ),
201
220
  ]
202
221
  reporting_capabilities: reporting_capabilities_1.ReportingCapabilities | None = None
203
-
204
-
205
- @model_validator(mode='after')
206
- def validate_publisher_properties_items(self) -> 'Product':
207
- """Validate all publisher_properties items."""
208
- from adcp.validation import validate_product
209
-
210
- data = self.model_dump()
211
- validate_product(data)
212
- return self
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: promoted-offerings.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T04:34:42+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -10,7 +10,7 @@ from typing import Annotated, Any
10
10
  from adcp.types.base import AdCPBaseModel
11
11
  from pydantic import AnyUrl, ConfigDict, Field
12
12
 
13
- from . import brand_manifest_ref as brand_manifest_1
13
+ from . import brand_manifest as brand_manifest_1
14
14
  from . import promoted_products
15
15
 
16
16
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: promoted-products.json
3
- # timestamp: 2025-11-18T03:04:10+00:00
3
+ # timestamp: 2025-11-18T03:35:10+00:00
4
4
 
5
5
  from __future__ import annotations
6
6