adcp 2.11.0__tar.gz → 2.11.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. {adcp-2.11.0/src/adcp.egg-info → adcp-2.11.1}/PKG-INFO +1 -1
  2. {adcp-2.11.0 → adcp-2.11.1}/pyproject.toml +1 -1
  3. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/__init__.py +1 -1
  4. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/__init__.py +0 -2
  5. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/_generated.py +6 -4
  6. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/adagents.py +55 -63
  7. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/property.py +7 -15
  8. adcp-2.11.1/src/adcp/types/generated_poc/property_id.py +21 -0
  9. adcp-2.11.1/src/adcp/types/generated_poc/property_tag.py +21 -0
  10. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/publisher_property_selector.py +6 -12
  11. {adcp-2.11.0 → adcp-2.11.1/src/adcp.egg-info}/PKG-INFO +1 -1
  12. {adcp-2.11.0 → adcp-2.11.1}/src/adcp.egg-info/SOURCES.txt +2 -0
  13. {adcp-2.11.0 → adcp-2.11.1}/tests/test_discriminated_unions.py +75 -0
  14. {adcp-2.11.0 → adcp-2.11.1}/tests/test_type_aliases.py +15 -3
  15. {adcp-2.11.0 → adcp-2.11.1}/LICENSE +0 -0
  16. {adcp-2.11.0 → adcp-2.11.1}/README.md +0 -0
  17. {adcp-2.11.0 → adcp-2.11.1}/setup.cfg +0 -0
  18. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/__main__.py +0 -0
  19. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/adagents.py +0 -0
  20. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/client.py +0 -0
  21. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/config.py +0 -0
  22. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/exceptions.py +0 -0
  23. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/protocols/__init__.py +0 -0
  24. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/protocols/a2a.py +0 -0
  25. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/protocols/base.py +0 -0
  26. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/protocols/mcp.py +0 -0
  27. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/py.typed +0 -0
  28. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/simple.py +0 -0
  29. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/testing/__init__.py +0 -0
  30. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/testing/test_helpers.py +0 -0
  31. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/aliases.py +0 -0
  32. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/base.py +0 -0
  33. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/core.py +0 -0
  34. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/__init__.py +0 -0
  35. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/activate_signal_request.py +0 -0
  36. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/activate_signal_response.py +0 -0
  37. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/activation_key.py +0 -0
  38. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/adcp_domain.py +0 -0
  39. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/asset_content_type.py +0 -0
  40. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/audio_asset.py +0 -0
  41. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/auth_scheme.py +0 -0
  42. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/available_metric.py +0 -0
  43. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/brand_manifest.py +0 -0
  44. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/build_creative_request.py +0 -0
  45. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/build_creative_response.py +0 -0
  46. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/channels.py +0 -0
  47. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/co_branding_requirement.py +0 -0
  48. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/cpc_option.py +0 -0
  49. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/cpcv_option.py +0 -0
  50. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/cpm_auction_option.py +0 -0
  51. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/cpm_fixed_option.py +0 -0
  52. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/cpp_option.py +0 -0
  53. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/cpv_option.py +0 -0
  54. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/create_media_buy_request.py +0 -0
  55. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/create_media_buy_response.py +0 -0
  56. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/creative_action.py +0 -0
  57. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/creative_agent_capability.py +0 -0
  58. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/creative_asset.py +0 -0
  59. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/creative_assignment.py +0 -0
  60. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/creative_filters.py +0 -0
  61. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/creative_manifest.py +0 -0
  62. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/creative_policy.py +0 -0
  63. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/creative_sort_field.py +0 -0
  64. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/creative_status.py +0 -0
  65. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/css_asset.py +0 -0
  66. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/daast_asset.py +0 -0
  67. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/daast_tracking_event.py +0 -0
  68. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/daast_version.py +0 -0
  69. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/delivery_metrics.py +0 -0
  70. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/delivery_type.py +0 -0
  71. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/deployment.py +0 -0
  72. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/destination.py +0 -0
  73. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/dimension_unit.py +0 -0
  74. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/error.py +0 -0
  75. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/feed_format.py +0 -0
  76. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/feedback_source.py +0 -0
  77. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/flat_rate_option.py +0 -0
  78. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/format.py +0 -0
  79. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/format_category.py +0 -0
  80. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/format_id.py +0 -0
  81. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/frequency_cap.py +0 -0
  82. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/frequency_cap_scope.py +0 -0
  83. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/get_media_buy_delivery_request.py +0 -0
  84. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/get_media_buy_delivery_response.py +0 -0
  85. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/get_products_request.py +0 -0
  86. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/get_products_response.py +0 -0
  87. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/get_signals_request.py +0 -0
  88. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/get_signals_response.py +0 -0
  89. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/history_entry_type.py +0 -0
  90. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/html_asset.py +0 -0
  91. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/http_method.py +0 -0
  92. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/identifier_types.py +0 -0
  93. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/image_asset.py +0 -0
  94. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/javascript_asset.py +0 -0
  95. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/javascript_module_type.py +0 -0
  96. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/landing_page_requirement.py +0 -0
  97. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/list_authorized_properties_request.py +0 -0
  98. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/list_authorized_properties_response.py +0 -0
  99. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/list_creative_formats_request.py +0 -0
  100. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/list_creative_formats_response.py +0 -0
  101. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/list_creatives_request.py +0 -0
  102. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/list_creatives_response.py +0 -0
  103. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/markdown_asset.py +0 -0
  104. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/markdown_flavor.py +0 -0
  105. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/measurement.py +0 -0
  106. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/media_buy.py +0 -0
  107. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/media_buy_status.py +0 -0
  108. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/metric_type.py +0 -0
  109. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/notification_type.py +0 -0
  110. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/pacing.py +0 -0
  111. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/package.py +0 -0
  112. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/package_request.py +0 -0
  113. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/package_status.py +0 -0
  114. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/performance_feedback.py +0 -0
  115. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/placement.py +0 -0
  116. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/preview_creative_request.py +0 -0
  117. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/preview_creative_response.py +0 -0
  118. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/preview_output_format.py +0 -0
  119. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/preview_render.py +0 -0
  120. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/pricing_model.py +0 -0
  121. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/product.py +0 -0
  122. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/product_filters.py +0 -0
  123. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/promoted_offerings.py +0 -0
  124. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/promoted_products.py +0 -0
  125. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/property_type.py +0 -0
  126. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/protocol_envelope.py +0 -0
  127. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/provide_performance_feedback_request.py +0 -0
  128. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/provide_performance_feedback_response.py +0 -0
  129. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/publisher_identifier_types.py +0 -0
  130. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/push_notification_config.py +0 -0
  131. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/reporting_capabilities.py +0 -0
  132. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/reporting_frequency.py +0 -0
  133. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/response.py +0 -0
  134. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/signal_catalog_type.py +0 -0
  135. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/signal_filters.py +0 -0
  136. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/sort_direction.py +0 -0
  137. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/standard_format_ids.py +0 -0
  138. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/sub_asset.py +0 -0
  139. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/sync_creatives_request.py +0 -0
  140. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/sync_creatives_response.py +0 -0
  141. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/targeting.py +0 -0
  142. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/task_status.py +0 -0
  143. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/task_type.py +0 -0
  144. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/tasks_get_request.py +0 -0
  145. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/tasks_get_response.py +0 -0
  146. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/tasks_list_request.py +0 -0
  147. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/tasks_list_response.py +0 -0
  148. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/text_asset.py +0 -0
  149. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/update_frequency.py +0 -0
  150. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/update_media_buy_request.py +0 -0
  151. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/update_media_buy_response.py +0 -0
  152. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/url_asset.py +0 -0
  153. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/url_asset_type.py +0 -0
  154. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/validation_mode.py +0 -0
  155. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/vast_asset.py +0 -0
  156. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/vast_tracking_event.py +0 -0
  157. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/vast_version.py +0 -0
  158. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/vcpm_auction_option.py +0 -0
  159. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/vcpm_fixed_option.py +0 -0
  160. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/video_asset.py +0 -0
  161. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/webhook_asset.py +0 -0
  162. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/webhook_payload.py +0 -0
  163. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/webhook_response_type.py +0 -0
  164. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/types/generated_poc/webhook_security_method.py +0 -0
  165. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/utils/__init__.py +0 -0
  166. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/utils/operation_id.py +0 -0
  167. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/utils/preview_cache.py +0 -0
  168. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/utils/response_parser.py +0 -0
  169. {adcp-2.11.0 → adcp-2.11.1}/src/adcp/validation.py +0 -0
  170. {adcp-2.11.0 → adcp-2.11.1}/src/adcp.egg-info/dependency_links.txt +0 -0
  171. {adcp-2.11.0 → adcp-2.11.1}/src/adcp.egg-info/entry_points.txt +0 -0
  172. {adcp-2.11.0 → adcp-2.11.1}/src/adcp.egg-info/requires.txt +0 -0
  173. {adcp-2.11.0 → adcp-2.11.1}/src/adcp.egg-info/top_level.txt +0 -0
  174. {adcp-2.11.0 → adcp-2.11.1}/tests/test_adagents.py +0 -0
  175. {adcp-2.11.0 → adcp-2.11.1}/tests/test_cli.py +0 -0
  176. {adcp-2.11.0 → adcp-2.11.1}/tests/test_client.py +0 -0
  177. {adcp-2.11.0 → adcp-2.11.1}/tests/test_code_generation.py +0 -0
  178. {adcp-2.11.0 → adcp-2.11.1}/tests/test_format_id_validation.py +0 -0
  179. {adcp-2.11.0 → adcp-2.11.1}/tests/test_helpers.py +0 -0
  180. {adcp-2.11.0 → adcp-2.11.1}/tests/test_preview_html.py +0 -0
  181. {adcp-2.11.0 → adcp-2.11.1}/tests/test_protocols.py +0 -0
  182. {adcp-2.11.0 → adcp-2.11.1}/tests/test_public_api.py +0 -0
  183. {adcp-2.11.0 → adcp-2.11.1}/tests/test_response_parser.py +0 -0
  184. {adcp-2.11.0 → adcp-2.11.1}/tests/test_simple_api.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: adcp
3
- Version: 2.11.0
3
+ Version: 2.11.1
4
4
  Summary: Official Python client for the Ad Context Protocol (AdCP)
5
5
  Author-email: AdCP Community <maintainers@adcontextprotocol.org>
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "adcp"
7
- version = "2.11.0"
7
+ version = "2.11.1"
8
8
  description = "Official Python client for the Ad Context Protocol (AdCP)"
9
9
  authors = [
10
10
  {name = "AdCP Community", email = "maintainers@adcontextprotocol.org"}
@@ -180,7 +180,7 @@ from adcp.validation import (
180
180
  validate_publisher_properties_item,
181
181
  )
182
182
 
183
- __version__ = "2.11.0"
183
+ __version__ = "2.11.1"
184
184
 
185
185
  __all__ = [
186
186
  # Client classes
@@ -182,7 +182,6 @@ from adcp.types._generated import (
182
182
  StatusSummary,
183
183
  SyncCreativesRequest,
184
184
  SyncCreativesResponse,
185
- Tag,
186
185
  Tags,
187
186
  TargetingOverlay,
188
187
  Task,
@@ -426,7 +425,6 @@ __all__ = [
426
425
  "Results",
427
426
  "Signal",
428
427
  "SignalFilters",
429
- "Tag",
430
428
  "Tags",
431
429
  "TargetingOverlay",
432
430
  "VenueBreakdownItem",
@@ -10,7 +10,7 @@ Auto-generated by datamodel-code-generator from JSON schemas.
10
10
  DO NOT EDIT MANUALLY.
11
11
 
12
12
  Generated from: https://github.com/adcontextprotocol/adcp/tree/main/schemas
13
- Generation date: 2025-11-21 15:57:17 UTC
13
+ Generation date: 2025-11-21 20:45:16 UTC
14
14
  """
15
15
  # ruff: noqa: E501, I001
16
16
  from __future__ import annotations
@@ -19,7 +19,7 @@ from __future__ import annotations
19
19
  from adcp.types.generated_poc.activate_signal_request import ActivateSignalRequest
20
20
  from adcp.types.generated_poc.activate_signal_response import ActivateSignalResponse, ActivateSignalResponse1, ActivateSignalResponse2
21
21
  from adcp.types.generated_poc.activation_key import ActivationKey1, ActivationKey2
22
- from adcp.types.generated_poc.adagents import AuthorizedAgents, AuthorizedAgents1, AuthorizedAgents2, AuthorizedAgents3, AuthorizedSalesAgents, Contact, PropertyId, PropertyTag, Tags
22
+ from adcp.types.generated_poc.adagents import AuthorizedAgents, AuthorizedAgents1, AuthorizedAgents2, AuthorizedAgents3, AuthorizedSalesAgents, Contact, Tags
23
23
  from adcp.types.generated_poc.adcp_domain import AdcpDomain
24
24
  from adcp.types.generated_poc.asset_content_type import AssetContentType
25
25
  from adcp.types.generated_poc.audio_asset import AudioAsset
@@ -104,7 +104,9 @@ from adcp.types.generated_poc.product import DeliveryMeasurement, Product, Produ
104
104
  from adcp.types.generated_poc.product_filters import ProductFilters
105
105
  from adcp.types.generated_poc.promoted_offerings import AssetSelectors, AssetType, Offering, PromotedOfferings
106
106
  from adcp.types.generated_poc.promoted_products import PromotedProducts
107
- from adcp.types.generated_poc.property import Identifier, Property, Tag
107
+ from adcp.types.generated_poc.property import Identifier, Property
108
+ from adcp.types.generated_poc.property_id import PropertyId
109
+ from adcp.types.generated_poc.property_tag import PropertyTag
108
110
  from adcp.types.generated_poc.property_type import PropertyType
109
111
  from adcp.types.generated_poc.protocol_envelope import ProtocolEnvelope
110
112
  from adcp.types.generated_poc.provide_performance_feedback_request import ProvidePerformanceFeedbackRequest, ProvidePerformanceFeedbackRequest1, ProvidePerformanceFeedbackRequest2
@@ -202,7 +204,7 @@ __all__ = [
202
204
  "SignalCatalogType", "SignalFilters", "Sort", "SortApplied", "SortDirection",
203
205
  "StandardFormatIds", "Status", "StatusSummary", "SubAsset1", "SubAsset2",
204
206
  "SyncCreativesRequest", "SyncCreativesResponse", "SyncCreativesResponse1",
205
- "SyncCreativesResponse2", "Tag", "Tags", "TargetingOverlay", "Task", "TaskStatus", "TaskType",
207
+ "SyncCreativesResponse2", "Tags", "TargetingOverlay", "Task", "TaskStatus", "TaskType",
206
208
  "TasksGetRequest", "TasksGetResponse", "TasksListRequest", "TasksListResponse", "TextAsset",
207
209
  "Totals", "Type", "UpdateFrequency", "UpdateMediaBuyRequest", "UpdateMediaBuyRequest1",
208
210
  "UpdateMediaBuyRequest2", "UpdateMediaBuyResponse", "UpdateMediaBuyResponse1",
@@ -1,75 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: adagents.json
3
- # timestamp: 2025-11-19T02:02:39+00:00
3
+ # timestamp: 2025-11-21T20:45:16+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
7
  from typing import Annotated, Literal
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
- from pydantic import AnyUrl, AwareDatetime, ConfigDict, EmailStr, Field, RootModel
10
+ from pydantic import AnyUrl, AwareDatetime, ConfigDict, EmailStr, Field
11
11
 
12
- from . import property, publisher_property_selector
13
-
14
-
15
- class PropertyId(RootModel[str]):
16
- root: Annotated[str, Field(pattern='^[a-z0-9_]+$')]
17
-
18
-
19
- class AuthorizedAgents(AdCPBaseModel):
20
- model_config = ConfigDict(
21
- extra='forbid',
22
- )
23
- authorization_type: Annotated[
24
- Literal['property_ids'],
25
- Field(description='Discriminator indicating authorization by specific property IDs'),
26
- ]
27
- authorized_for: Annotated[
28
- str,
29
- Field(
30
- description='Human-readable description of what this agent is authorized to sell',
31
- max_length=500,
32
- min_length=1,
33
- ),
34
- ]
35
- property_ids: Annotated[
36
- list[PropertyId],
37
- Field(
38
- description='Property IDs this agent is authorized for. Resolved against the top-level properties array in this file',
39
- min_length=1,
40
- ),
41
- ]
42
- url: Annotated[AnyUrl, Field(description="The authorized agent's API endpoint URL")]
43
-
44
-
45
- class PropertyTag(PropertyId):
46
- pass
47
-
48
-
49
- class AuthorizedAgents1(AdCPBaseModel):
50
- model_config = ConfigDict(
51
- extra='forbid',
52
- )
53
- authorization_type: Annotated[
54
- Literal['property_tags'],
55
- Field(description='Discriminator indicating authorization by property tags'),
56
- ]
57
- authorized_for: Annotated[
58
- str,
59
- Field(
60
- description='Human-readable description of what this agent is authorized to sell',
61
- max_length=500,
62
- min_length=1,
63
- ),
64
- ]
65
- property_tags: Annotated[
66
- list[PropertyTag],
67
- Field(
68
- description='Tags identifying which properties this agent is authorized for. Resolved against the top-level properties array in this file using tag matching',
69
- min_length=1,
70
- ),
71
- ]
72
- url: Annotated[AnyUrl, Field(description="The authorized agent's API endpoint URL")]
12
+ from . import property, property_id, property_tag, publisher_property_selector
73
13
 
74
14
 
75
15
  class Contact(AdCPBaseModel):
@@ -125,6 +65,58 @@ class Tags(AdCPBaseModel):
125
65
  name: Annotated[str, Field(description='Human-readable name for this tag')]
126
66
 
127
67
 
68
+ class AuthorizedAgents(AdCPBaseModel):
69
+ model_config = ConfigDict(
70
+ extra='forbid',
71
+ )
72
+ authorization_type: Annotated[
73
+ Literal['property_ids'],
74
+ Field(description='Discriminator indicating authorization by specific property IDs'),
75
+ ]
76
+ authorized_for: Annotated[
77
+ str,
78
+ Field(
79
+ description='Human-readable description of what this agent is authorized to sell',
80
+ max_length=500,
81
+ min_length=1,
82
+ ),
83
+ ]
84
+ property_ids: Annotated[
85
+ list[property_id.PropertyId],
86
+ Field(
87
+ description='Property IDs this agent is authorized for. Resolved against the top-level properties array in this file',
88
+ min_length=1,
89
+ ),
90
+ ]
91
+ url: Annotated[AnyUrl, Field(description="The authorized agent's API endpoint URL")]
92
+
93
+
94
+ class AuthorizedAgents1(AdCPBaseModel):
95
+ model_config = ConfigDict(
96
+ extra='forbid',
97
+ )
98
+ authorization_type: Annotated[
99
+ Literal['property_tags'],
100
+ Field(description='Discriminator indicating authorization by property tags'),
101
+ ]
102
+ authorized_for: Annotated[
103
+ str,
104
+ Field(
105
+ description='Human-readable description of what this agent is authorized to sell',
106
+ max_length=500,
107
+ min_length=1,
108
+ ),
109
+ ]
110
+ property_tags: Annotated[
111
+ list[property_tag.PropertyTag],
112
+ Field(
113
+ description='Tags identifying which properties this agent is authorized for. Resolved against the top-level properties array in this file using tag matching',
114
+ min_length=1,
115
+ ),
116
+ ]
117
+ url: Annotated[AnyUrl, Field(description="The authorized agent's API endpoint URL")]
118
+
119
+
128
120
  class AuthorizedAgents2(AdCPBaseModel):
129
121
  model_config = ConfigDict(
130
122
  extra='forbid',
@@ -1,15 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: property.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
3
+ # timestamp: 2025-11-21T20:45:16+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
7
  from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
- from pydantic import ConfigDict, Field, RootModel
10
+ from pydantic import ConfigDict, Field
11
11
 
12
- from . import identifier_types
12
+ from . import identifier_types, property_tag
13
13
  from . import property_type as property_type_1
14
14
 
15
15
 
@@ -29,16 +29,6 @@ class Identifier(AdCPBaseModel):
29
29
  ]
30
30
 
31
31
 
32
- class Tag(RootModel[str]):
33
- root: Annotated[
34
- str,
35
- Field(
36
- description="Lowercase tag with underscores (e.g., 'conde_nast_network', 'premium_content')",
37
- pattern='^[a-z0-9_]+$',
38
- ),
39
- ]
40
-
41
-
42
32
  class Property(AdCPBaseModel):
43
33
  model_config = ConfigDict(
44
34
  extra='forbid',
@@ -50,8 +40,10 @@ class Property(AdCPBaseModel):
50
40
  property_id: Annotated[
51
41
  str | None,
52
42
  Field(
53
- description="Unique identifier for this property (optional). Enables referencing properties by ID instead of repeating full objects. Recommended format: lowercase with underscores (e.g., 'cnn_ctv_app', 'instagram_mobile')",
43
+ description='Unique identifier for this property (optional). Enables referencing properties by ID instead of repeating full objects.',
44
+ examples=['cnn_ctv_app', 'homepage', 'mobile_ios', 'instagram'],
54
45
  pattern='^[a-z0-9_]+$',
46
+ title='Property ID',
55
47
  ),
56
48
  ] = None
57
49
  property_type: Annotated[
@@ -64,7 +56,7 @@ class Property(AdCPBaseModel):
64
56
  ),
65
57
  ] = None
66
58
  tags: Annotated[
67
- list[Tag] | None,
59
+ list[property_tag.PropertyTag] | None,
68
60
  Field(
69
61
  description='Tags for categorization and grouping (e.g., network membership, content categories)'
70
62
  ),
@@ -0,0 +1,21 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property-id.json
3
+ # timestamp: 2025-11-21T20:45:16+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated
8
+
9
+ from pydantic import Field, RootModel
10
+
11
+
12
+ class PropertyId(RootModel[str]):
13
+ root: Annotated[
14
+ str,
15
+ Field(
16
+ description='Identifier for a publisher property. Must be lowercase alphanumeric with underscores only.',
17
+ examples=['cnn_ctv_app', 'homepage', 'mobile_ios', 'instagram'],
18
+ pattern='^[a-z0-9_]+$',
19
+ title='Property ID',
20
+ ),
21
+ ]
@@ -0,0 +1,21 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: property-tag.json
3
+ # timestamp: 2025-11-21T20:45:16+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated
8
+
9
+ from pydantic import Field, RootModel
10
+
11
+
12
+ class PropertyTag(RootModel[str]):
13
+ root: Annotated[
14
+ str,
15
+ Field(
16
+ description='Tag for categorizing publisher properties. Must be lowercase alphanumeric with underscores only.',
17
+ examples=['ctv', 'premium', 'news', 'sports', 'meta_network', 'social_media'],
18
+ pattern='^[a-z0-9_]+$',
19
+ title='Property Tag',
20
+ ),
21
+ ]
@@ -1,13 +1,15 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: publisher-property-selector.json
3
- # timestamp: 2025-11-19T02:02:39+00:00
3
+ # timestamp: 2025-11-21T20:45:16+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
7
  from typing import Annotated, Literal
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
- from pydantic import ConfigDict, Field, RootModel
10
+ from pydantic import ConfigDict, Field
11
+
12
+ from . import property_id, property_tag
11
13
 
12
14
 
13
15
  class PublisherPropertySelector1(AdCPBaseModel):
@@ -29,16 +31,12 @@ class PublisherPropertySelector1(AdCPBaseModel):
29
31
  ]
30
32
 
31
33
 
32
- class PropertyId(RootModel[str]):
33
- root: Annotated[str, Field(pattern='^[a-z0-9_]+$')]
34
-
35
-
36
34
  class PublisherPropertySelector2(AdCPBaseModel):
37
35
  model_config = ConfigDict(
38
36
  extra='forbid',
39
37
  )
40
38
  property_ids: Annotated[
41
- list[PropertyId],
39
+ list[property_id.PropertyId],
42
40
  Field(description="Specific property IDs from the publisher's adagents.json", min_length=1),
43
41
  ]
44
42
  publisher_domain: Annotated[
@@ -54,16 +52,12 @@ class PublisherPropertySelector2(AdCPBaseModel):
54
52
  ]
55
53
 
56
54
 
57
- class PropertyTag(PropertyId):
58
- pass
59
-
60
-
61
55
  class PublisherPropertySelector3(AdCPBaseModel):
62
56
  model_config = ConfigDict(
63
57
  extra='forbid',
64
58
  )
65
59
  property_tags: Annotated[
66
- list[PropertyTag],
60
+ list[property_tag.PropertyTag],
67
61
  Field(
68
62
  description="Property tags from the publisher's adagents.json. Selector covers all properties with these tags",
69
63
  min_length=1,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: adcp
3
- Version: 2.11.0
3
+ Version: 2.11.1
4
4
  Summary: Official Python client for the Ad Context Protocol (AdCP)
5
5
  Author-email: AdCP Community <maintainers@adcontextprotocol.org>
6
6
  License: Apache-2.0
@@ -120,6 +120,8 @@ src/adcp/types/generated_poc/product_filters.py
120
120
  src/adcp/types/generated_poc/promoted_offerings.py
121
121
  src/adcp/types/generated_poc/promoted_products.py
122
122
  src/adcp/types/generated_poc/property.py
123
+ src/adcp/types/generated_poc/property_id.py
124
+ src/adcp/types/generated_poc/property_tag.py
123
125
  src/adcp/types/generated_poc/property_type.py
124
126
  src/adcp/types/generated_poc/protocol_envelope.py
125
127
  src/adcp/types/generated_poc/provide_performance_feedback_request.py
@@ -769,3 +769,78 @@ class TestSemanticAliasDiscriminatorRoundtrips:
769
769
  parsed = TextSubAsset.model_validate_json(json_str)
770
770
  assert parsed.asset_kind == "text"
771
771
  assert parsed.content == original.content
772
+
773
+
774
+ class TestPropertyTagSharedSchema:
775
+ """Test that PropertyTag uses shared schema definition.
776
+
777
+ As of AdCP v1.0.0, PropertyTag and PropertyId are defined in separate shared
778
+ schema files (property-tag.json and property-id.json) that are referenced by
779
+ both adagents.json and publisher-property-selector.json.
780
+
781
+ This eliminates the previous name collision where both files defined their own
782
+ identical PropertyTag types.
783
+ """
784
+
785
+ def test_public_property_tag_is_from_shared_schema(self):
786
+ """Public PropertyTag should be from the shared property_tag schema."""
787
+ from adcp import PropertyTag
788
+
789
+ # Should come from the shared schema, not embedded in another schema
790
+ assert PropertyTag.__module__ == "adcp.types.generated_poc.property_tag"
791
+
792
+ def test_property_id_is_from_shared_schema(self):
793
+ """Public PropertyId should be from the shared property_id schema."""
794
+ from adcp import PropertyId
795
+
796
+ # Should come from the shared schema
797
+ assert PropertyId.__module__ == "adcp.types.generated_poc.property_id"
798
+
799
+ def test_property_tag_works_with_publisher_properties_by_tag(self):
800
+ """PropertyTag should work correctly with PublisherPropertiesByTag."""
801
+ from adcp import PropertyTag, PublisherPropertiesByTag
802
+
803
+ props = PublisherPropertiesByTag(
804
+ publisher_domain="example.com",
805
+ selection_type="by_tag",
806
+ property_tags=[PropertyTag("premium"), PropertyTag("video")]
807
+ )
808
+
809
+ assert props.selection_type == "by_tag"
810
+ assert len(props.property_tags) == 2
811
+ assert str(props.property_tags[0].root) == "premium"
812
+ assert str(props.property_tags[1].root) == "video"
813
+
814
+ def test_shared_schema_prevents_collision(self):
815
+ """Verify that both adagents and publisher_property_selector import from shared schema."""
816
+ from adcp.types.generated_poc import property_tag
817
+ from adcp import PropertyTag
818
+
819
+ # The shared schema is the canonical definition
820
+ assert PropertyTag is property_tag.PropertyTag
821
+
822
+ # Both adagents.py and publisher_property_selector.py should import from property_tag module
823
+ # (not define their own)
824
+ import inspect
825
+ import adcp.types.generated_poc.adagents as adagents_module
826
+ import adcp.types.generated_poc.publisher_property_selector as selector_module
827
+
828
+ # Check that they import from property_tag, not define their own
829
+ adagents_source = inspect.getsource(adagents_module)
830
+ selector_source = inspect.getsource(selector_module)
831
+
832
+ # May be on same line as other imports or separate line
833
+ assert "property_tag" in adagents_source and "from . import" in adagents_source
834
+ assert "property_tag" in selector_source and "from . import" in selector_source
835
+
836
+ def test_property_tag_validation(self):
837
+ """PropertyTag should validate according to shared schema rules."""
838
+ from adcp import PropertyTag
839
+
840
+ # Valid tags: lowercase alphanumeric + underscores
841
+ valid = PropertyTag("premium_video")
842
+ assert str(valid.root) == "premium_video"
843
+
844
+ # Pattern validation should work
845
+ with pytest.raises(ValidationError):
846
+ PropertyTag("Invalid-Tag") # Hyphens not allowed in property tags
@@ -430,8 +430,14 @@ def test_publisher_properties_aliases_in_exports():
430
430
 
431
431
 
432
432
  def test_property_id_and_tag_are_root_models():
433
- """Test that PropertyId and PropertyTag are properly constrained string types."""
433
+ """Test that PropertyId and PropertyTag are properly constrained string types.
434
+
435
+ As of AdCP v1.0.0, PropertyId and PropertyTag are separate RootModel types
436
+ defined in their own schema files, not in an inheritance relationship.
437
+ Both use the same pattern constraint (^[a-z0-9_]+$) but are semantically distinct.
438
+ """
434
439
  from adcp import PropertyId, PropertyTag
440
+ from pydantic import RootModel
435
441
 
436
442
  # Create valid PropertyId and PropertyTag
437
443
  prop_id = PropertyId("my_property_id")
@@ -441,8 +447,14 @@ def test_property_id_and_tag_are_root_models():
441
447
  assert prop_id.root == "my_property_id"
442
448
  assert prop_tag.root == "premium"
443
449
 
444
- # PropertyTag should be a subclass of PropertyId
445
- assert issubclass(PropertyTag, PropertyId)
450
+ # Both should be RootModel subclasses (but not related to each other)
451
+ assert issubclass(PropertyId, RootModel)
452
+ assert issubclass(PropertyTag, RootModel)
453
+
454
+ # They are separate types, not in an inheritance relationship
455
+ assert PropertyId is not PropertyTag
456
+ assert not issubclass(PropertyTag, PropertyId)
457
+ assert not issubclass(PropertyId, PropertyTag)
446
458
 
447
459
 
448
460
  def test_deployment_aliases_imports():
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes