adcp 2.14.0__tar.gz → 2.15.0__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 (216) hide show
  1. {adcp-2.14.0/src/adcp.egg-info → adcp-2.15.0}/PKG-INFO +1 -1
  2. {adcp-2.14.0 → adcp-2.15.0}/pyproject.toml +1 -1
  3. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/__init__.py +1 -1
  4. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/__init__.py +21 -1
  5. adcp-2.15.0/src/adcp/types/_ergonomic.py +279 -0
  6. adcp-2.15.0/src/adcp/types/coercion.py +194 -0
  7. {adcp-2.14.0 → adcp-2.15.0/src/adcp.egg-info}/PKG-INFO +1 -1
  8. {adcp-2.14.0 → adcp-2.15.0}/src/adcp.egg-info/SOURCES.txt +3 -0
  9. adcp-2.15.0/tests/test_type_coercion.py +396 -0
  10. {adcp-2.14.0 → adcp-2.15.0}/LICENSE +0 -0
  11. {adcp-2.14.0 → adcp-2.15.0}/MANIFEST.in +0 -0
  12. {adcp-2.14.0 → adcp-2.15.0}/README.md +0 -0
  13. {adcp-2.14.0 → adcp-2.15.0}/setup.cfg +0 -0
  14. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/ADCP_VERSION +0 -0
  15. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/__main__.py +0 -0
  16. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/adagents.py +0 -0
  17. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/client.py +0 -0
  18. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/config.py +0 -0
  19. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/exceptions.py +0 -0
  20. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/protocols/__init__.py +0 -0
  21. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/protocols/a2a.py +0 -0
  22. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/protocols/base.py +0 -0
  23. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/protocols/mcp.py +0 -0
  24. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/py.typed +0 -0
  25. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/simple.py +0 -0
  26. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/testing/__init__.py +0 -0
  27. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/testing/test_helpers.py +0 -0
  28. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/_generated.py +0 -0
  29. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/aliases.py +0 -0
  30. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/base.py +0 -0
  31. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/core.py +0 -0
  32. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/__init__.py +0 -0
  33. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/adagents.py +0 -0
  34. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/__init__.py +0 -0
  35. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/activation_key.py +0 -0
  36. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/__init__.py +0 -0
  37. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/audio_asset.py +0 -0
  38. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/css_asset.py +0 -0
  39. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/daast_asset.py +0 -0
  40. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/html_asset.py +0 -0
  41. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/image_asset.py +0 -0
  42. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/javascript_asset.py +0 -0
  43. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/text_asset.py +0 -0
  44. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/url_asset.py +0 -0
  45. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/vast_asset.py +0 -0
  46. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/video_asset.py +0 -0
  47. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/webhook_asset.py +0 -0
  48. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/async_response_data.py +0 -0
  49. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/brand_manifest.py +0 -0
  50. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/brand_manifest_ref.py +0 -0
  51. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/context.py +0 -0
  52. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_asset.py +0 -0
  53. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_assignment.py +0 -0
  54. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_filters.py +0 -0
  55. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_manifest.py +0 -0
  56. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_policy.py +0 -0
  57. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/delivery_metrics.py +0 -0
  58. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/deployment.py +0 -0
  59. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/destination.py +0 -0
  60. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/error.py +0 -0
  61. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/ext.py +0 -0
  62. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/format.py +0 -0
  63. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/format_id.py +0 -0
  64. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/frequency_cap.py +0 -0
  65. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/mcp_webhook_payload.py +0 -0
  66. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/measurement.py +0 -0
  67. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/media_buy.py +0 -0
  68. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/package.py +0 -0
  69. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/performance_feedback.py +0 -0
  70. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/placement.py +0 -0
  71. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/pricing_option.py +0 -0
  72. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/product.py +0 -0
  73. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/product_filters.py +0 -0
  74. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/promoted_offerings.py +0 -0
  75. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/promoted_products.py +0 -0
  76. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/property.py +0 -0
  77. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/property_id.py +0 -0
  78. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/property_tag.py +0 -0
  79. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/protocol_envelope.py +0 -0
  80. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/publisher_property_selector.py +0 -0
  81. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/push_notification_config.py +0 -0
  82. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/reporting_capabilities.py +0 -0
  83. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/response.py +0 -0
  84. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/signal_filters.py +0 -0
  85. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/start_timing.py +0 -0
  86. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/sub_asset.py +0 -0
  87. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/targeting.py +0 -0
  88. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/__init__.py +0 -0
  89. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/list_creative_formats_request.py +0 -0
  90. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/list_creative_formats_response.py +0 -0
  91. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/preview_creative_request.py +0 -0
  92. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/preview_creative_response.py +0 -0
  93. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/preview_render.py +0 -0
  94. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/__init__.py +0 -0
  95. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/adcp_domain.py +0 -0
  96. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/asset_content_type.py +0 -0
  97. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/auth_scheme.py +0 -0
  98. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/available_metric.py +0 -0
  99. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/channels.py +0 -0
  100. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/co_branding_requirement.py +0 -0
  101. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/creative_action.py +0 -0
  102. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/creative_agent_capability.py +0 -0
  103. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/creative_sort_field.py +0 -0
  104. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/creative_status.py +0 -0
  105. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/daast_tracking_event.py +0 -0
  106. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/daast_version.py +0 -0
  107. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/delivery_type.py +0 -0
  108. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/dimension_unit.py +0 -0
  109. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/feed_format.py +0 -0
  110. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/feedback_source.py +0 -0
  111. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/format_category.py +0 -0
  112. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/format_id_parameter.py +0 -0
  113. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/frequency_cap_scope.py +0 -0
  114. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/history_entry_type.py +0 -0
  115. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/http_method.py +0 -0
  116. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/identifier_types.py +0 -0
  117. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/javascript_module_type.py +0 -0
  118. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/landing_page_requirement.py +0 -0
  119. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/markdown_flavor.py +0 -0
  120. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/media_buy_status.py +0 -0
  121. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/metric_type.py +0 -0
  122. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/notification_type.py +0 -0
  123. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/pacing.py +0 -0
  124. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/preview_output_format.py +0 -0
  125. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/pricing_model.py +0 -0
  126. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/property_type.py +0 -0
  127. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/publisher_identifier_types.py +0 -0
  128. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/reporting_frequency.py +0 -0
  129. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/signal_catalog_type.py +0 -0
  130. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/sort_direction.py +0 -0
  131. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/standard_format_ids.py +0 -0
  132. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/task_status.py +0 -0
  133. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/task_type.py +0 -0
  134. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/update_frequency.py +0 -0
  135. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/url_asset_type.py +0 -0
  136. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/validation_mode.py +0 -0
  137. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/vast_tracking_event.py +0 -0
  138. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/vast_version.py +0 -0
  139. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/webhook_response_type.py +0 -0
  140. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/webhook_security_method.py +0 -0
  141. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/__init__.py +0 -0
  142. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/build_creative_request.py +0 -0
  143. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/build_creative_response.py +0 -0
  144. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +0 -0
  145. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +0 -0
  146. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +0 -0
  147. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/create_media_buy_request.py +0 -0
  148. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py +0 -0
  149. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +0 -0
  150. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +0 -0
  151. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +0 -0
  152. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +0 -0
  153. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_products_async_response_working.py +0 -0
  154. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_products_request.py +0 -0
  155. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_products_response.py +0 -0
  156. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +0 -0
  157. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +0 -0
  158. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_creative_formats_request.py +0 -0
  159. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_creative_formats_response.py +0 -0
  160. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_creatives_request.py +0 -0
  161. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_creatives_response.py +0 -0
  162. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/package_request.py +0 -0
  163. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +0 -0
  164. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +0 -0
  165. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +0 -0
  166. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +0 -0
  167. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +0 -0
  168. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/sync_creatives_request.py +0 -0
  169. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/sync_creatives_response.py +0 -0
  170. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +0 -0
  171. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +0 -0
  172. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +0 -0
  173. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/update_media_buy_request.py +0 -0
  174. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py +0 -0
  175. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/__init__.py +0 -0
  176. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpc_option.py +0 -0
  177. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpcv_option.py +0 -0
  178. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpm_auction_option.py +0 -0
  179. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -0
  180. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpp_option.py +0 -0
  181. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpv_option.py +0 -0
  182. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/flat_rate_option.py +0 -0
  183. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +0 -0
  184. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -0
  185. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/protocols/__init__.py +0 -0
  186. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/protocols/adcp_extension.py +0 -0
  187. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/__init__.py +0 -0
  188. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/activate_signal_request.py +0 -0
  189. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/activate_signal_response.py +0 -0
  190. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/get_signals_request.py +0 -0
  191. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/get_signals_response.py +0 -0
  192. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/utils/__init__.py +0 -0
  193. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/utils/operation_id.py +0 -0
  194. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/utils/preview_cache.py +0 -0
  195. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/utils/response_parser.py +0 -0
  196. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/validation.py +0 -0
  197. {adcp-2.14.0 → adcp-2.15.0}/src/adcp/webhooks.py +0 -0
  198. {adcp-2.14.0 → adcp-2.15.0}/src/adcp.egg-info/dependency_links.txt +0 -0
  199. {adcp-2.14.0 → adcp-2.15.0}/src/adcp.egg-info/entry_points.txt +0 -0
  200. {adcp-2.14.0 → adcp-2.15.0}/src/adcp.egg-info/requires.txt +0 -0
  201. {adcp-2.14.0 → adcp-2.15.0}/src/adcp.egg-info/top_level.txt +0 -0
  202. {adcp-2.14.0 → adcp-2.15.0}/tests/test_adagents.py +0 -0
  203. {adcp-2.14.0 → adcp-2.15.0}/tests/test_cli.py +0 -0
  204. {adcp-2.14.0 → adcp-2.15.0}/tests/test_client.py +0 -0
  205. {adcp-2.14.0 → adcp-2.15.0}/tests/test_code_generation.py +0 -0
  206. {adcp-2.14.0 → adcp-2.15.0}/tests/test_discriminated_unions.py +0 -0
  207. {adcp-2.14.0 → adcp-2.15.0}/tests/test_format_id_validation.py +0 -0
  208. {adcp-2.14.0 → adcp-2.15.0}/tests/test_helpers.py +0 -0
  209. {adcp-2.14.0 → adcp-2.15.0}/tests/test_preview_html.py +0 -0
  210. {adcp-2.14.0 → adcp-2.15.0}/tests/test_protocols.py +0 -0
  211. {adcp-2.14.0 → adcp-2.15.0}/tests/test_public_api.py +0 -0
  212. {adcp-2.14.0 → adcp-2.15.0}/tests/test_response_parser.py +0 -0
  213. {adcp-2.14.0 → adcp-2.15.0}/tests/test_response_str.py +0 -0
  214. {adcp-2.14.0 → adcp-2.15.0}/tests/test_simple_api.py +0 -0
  215. {adcp-2.14.0 → adcp-2.15.0}/tests/test_type_aliases.py +0 -0
  216. {adcp-2.14.0 → adcp-2.15.0}/tests/test_webhook_handling.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: adcp
3
- Version: 2.14.0
3
+ Version: 2.15.0
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.14.0"
7
+ version = "2.15.0"
8
8
  description = "Official Python client for the Ad Context Protocol (AdCP)"
9
9
  authors = [
10
10
  {name = "AdCP Community", email = "maintainers@adcontextprotocol.org"}
@@ -186,7 +186,7 @@ from adcp.webhooks import (
186
186
  get_adcp_signed_headers_for_webhook,
187
187
  )
188
188
 
189
- __version__ = "2.14.0"
189
+ __version__ = "2.15.0"
190
190
 
191
191
 
192
192
  def get_adcp_version() -> str:
@@ -6,13 +6,33 @@ Users should import from here or directly from adcp.
6
6
  Examples:
7
7
  from adcp.types import Product, CreativeFilters
8
8
  from adcp import Product, CreativeFilters
9
+
10
+ Type Coercion:
11
+ For developer ergonomics, request types accept flexible input:
12
+
13
+ - Enum fields accept string values:
14
+ ListCreativeFormatsRequest(type="video") # Works!
15
+ ListCreativeFormatsRequest(type=FormatCategory.video) # Also works
16
+
17
+ - Context fields accept dicts:
18
+ GetProductsRequest(context={"key": "value"}) # Works!
19
+
20
+ - FieldModel lists accept strings:
21
+ ListCreativesRequest(fields=["creative_id", "name"]) # Works!
22
+
23
+ See adcp.types.coercion for implementation details.
9
24
  """
10
25
 
11
26
  from __future__ import annotations
12
27
 
28
+ # Apply type coercion to generated types (must be imported before other types)
29
+ from adcp.types import (
30
+ _ergonomic, # noqa: F401
31
+ aliases, # noqa: F401
32
+ )
33
+
13
34
  # Also make submodules available for advanced use
14
35
  from adcp.types import _generated as generated # noqa: F401
15
- from adcp.types import aliases # noqa: F401
16
36
 
17
37
  # Import all types from generated code
18
38
  from adcp.types._generated import (
@@ -0,0 +1,279 @@
1
+ # AUTO-GENERATED by scripts/generate_ergonomic_coercion.py
2
+ # Do not edit manually - changes will be overwritten on next type generation.
3
+ # To regenerate: python scripts/generate_types.py
4
+ """Apply type coercion to generated types for better ergonomics.
5
+
6
+ This module patches the generated types to accept more flexible input types
7
+ while maintaining type safety. It uses Pydantic's model_rebuild() to add
8
+ BeforeValidator annotations to fields.
9
+
10
+ Why import-time patching?
11
+ We apply coercion at module load time rather than lazily because:
12
+ 1. Pydantic validation runs during __init__, before any lazy access
13
+ 2. model_rebuild() is the standard Pydantic pattern for post-hoc changes
14
+ 3. The cost is minimal (~10-20ms for all types, once at import)
15
+ 4. After import, there is zero runtime overhead
16
+ 5. This approach maintains full type checker compatibility
17
+
18
+ Coercion rules applied:
19
+ 1. Enum fields accept string values (e.g., "video" for FormatCategory.video)
20
+ 2. List[Enum] fields accept list of strings (e.g., ["image", "video"])
21
+ 3. ContextObject fields accept dict values
22
+ 4. ExtensionObject fields accept dict values
23
+ 5. FieldModel (enum) lists accept string lists
24
+
25
+ Note: List variance issues (list[Subclass] not assignable to list[BaseClass])
26
+ are a fundamental Python typing limitation. Users extending library types
27
+ should use Sequence[T] in their own code or cast() for type checker appeasement.
28
+ """
29
+
30
+ from __future__ import annotations
31
+
32
+ from typing import Annotated, Any
33
+
34
+ from pydantic import BeforeValidator
35
+
36
+ from adcp.types.coercion import (
37
+ coerce_subclass_list,
38
+ coerce_to_enum,
39
+ coerce_to_enum_list,
40
+ coerce_to_model,
41
+ )
42
+
43
+ # Import types that need coercion
44
+ from adcp.types.generated_poc.core.context import ContextObject
45
+ from adcp.types.generated_poc.core.creative_asset import CreativeAsset
46
+ from adcp.types.generated_poc.core.creative_assignment import CreativeAssignment
47
+ from adcp.types.generated_poc.core.ext import ExtensionObject
48
+ from adcp.types.generated_poc.enums.asset_content_type import AssetContentType
49
+ from adcp.types.generated_poc.enums.creative_sort_field import CreativeSortField
50
+ from adcp.types.generated_poc.enums.format_category import FormatCategory
51
+ from adcp.types.generated_poc.enums.pacing import Pacing
52
+ from adcp.types.generated_poc.enums.sort_direction import SortDirection
53
+ from adcp.types.generated_poc.media_buy.create_media_buy_request import (
54
+ CreateMediaBuyRequest,
55
+ )
56
+ from adcp.types.generated_poc.media_buy.get_products_request import GetProductsRequest
57
+ from adcp.types.generated_poc.media_buy.list_creative_formats_request import (
58
+ ListCreativeFormatsRequest,
59
+ )
60
+ from adcp.types.generated_poc.media_buy.list_creatives_request import (
61
+ FieldModel,
62
+ ListCreativesRequest,
63
+ Sort,
64
+ )
65
+ from adcp.types.generated_poc.media_buy.package_request import PackageRequest
66
+ from adcp.types.generated_poc.media_buy.update_media_buy_request import (
67
+ Packages,
68
+ Packages1,
69
+ )
70
+
71
+
72
+ def _apply_coercion() -> None:
73
+ """Apply coercion validators to generated types.
74
+
75
+ This function modifies the generated types in-place to accept
76
+ more flexible input types.
77
+ """
78
+ # Apply coercion to ListCreativeFormatsRequest
79
+ # - asset_types: list[AssetContentType | str] | None
80
+ # - context: ContextObject | dict | None
81
+ # - ext: ExtensionObject | dict | None
82
+ # - type: FormatCategory | str | None
83
+ _patch_field_annotation(
84
+ ListCreativeFormatsRequest,
85
+ "asset_types",
86
+ Annotated[
87
+ list[AssetContentType] | None,
88
+ BeforeValidator(coerce_to_enum_list(AssetContentType)),
89
+ ],
90
+ )
91
+ _patch_field_annotation(
92
+ ListCreativeFormatsRequest,
93
+ "context",
94
+ Annotated[ContextObject | None, BeforeValidator(coerce_to_model(ContextObject))],
95
+ )
96
+ _patch_field_annotation(
97
+ ListCreativeFormatsRequest,
98
+ "ext",
99
+ Annotated[ExtensionObject | None, BeforeValidator(coerce_to_model(ExtensionObject))],
100
+ )
101
+ _patch_field_annotation(
102
+ ListCreativeFormatsRequest,
103
+ "type",
104
+ Annotated[FormatCategory | None, BeforeValidator(coerce_to_enum(FormatCategory))],
105
+ )
106
+ ListCreativeFormatsRequest.model_rebuild(force=True)
107
+
108
+ # Apply coercion to ListCreativesRequest
109
+ # - context: ContextObject | dict | None
110
+ # - ext: ExtensionObject | dict | None
111
+ # - fields: list[FieldModel | str] | None
112
+ _patch_field_annotation(
113
+ ListCreativesRequest,
114
+ "context",
115
+ Annotated[ContextObject | None, BeforeValidator(coerce_to_model(ContextObject))],
116
+ )
117
+ _patch_field_annotation(
118
+ ListCreativesRequest,
119
+ "ext",
120
+ Annotated[ExtensionObject | None, BeforeValidator(coerce_to_model(ExtensionObject))],
121
+ )
122
+ _patch_field_annotation(
123
+ ListCreativesRequest,
124
+ "fields",
125
+ Annotated[
126
+ list[FieldModel] | None,
127
+ BeforeValidator(coerce_to_enum_list(FieldModel)),
128
+ ],
129
+ )
130
+ ListCreativesRequest.model_rebuild(force=True)
131
+
132
+ # Apply coercion to Sort
133
+ # - direction: SortDirection | str | None
134
+ # - field: CreativeSortField | str | None
135
+ _patch_field_annotation(
136
+ Sort,
137
+ "direction",
138
+ Annotated[SortDirection | None, BeforeValidator(coerce_to_enum(SortDirection))],
139
+ )
140
+ _patch_field_annotation(
141
+ Sort,
142
+ "field",
143
+ Annotated[CreativeSortField | None, BeforeValidator(coerce_to_enum(CreativeSortField))],
144
+ )
145
+ Sort.model_rebuild(force=True)
146
+
147
+ # Apply coercion to GetProductsRequest
148
+ # - context: ContextObject | dict | None
149
+ # - ext: ExtensionObject | dict | None
150
+ _patch_field_annotation(
151
+ GetProductsRequest,
152
+ "context",
153
+ Annotated[ContextObject | None, BeforeValidator(coerce_to_model(ContextObject))],
154
+ )
155
+ _patch_field_annotation(
156
+ GetProductsRequest,
157
+ "ext",
158
+ Annotated[ExtensionObject | None, BeforeValidator(coerce_to_model(ExtensionObject))],
159
+ )
160
+ GetProductsRequest.model_rebuild(force=True)
161
+
162
+ # Apply coercion to PackageRequest
163
+ # - creatives: list[CreativeAsset] (accepts subclass instances)
164
+ # - ext: ExtensionObject | dict | None
165
+ # - pacing: Pacing | str | None
166
+ _patch_field_annotation(
167
+ PackageRequest,
168
+ "creatives",
169
+ Annotated[
170
+ list[CreativeAsset] | None,
171
+ BeforeValidator(coerce_subclass_list(CreativeAsset)),
172
+ ],
173
+ )
174
+ _patch_field_annotation(
175
+ PackageRequest,
176
+ "ext",
177
+ Annotated[ExtensionObject | None, BeforeValidator(coerce_to_model(ExtensionObject))],
178
+ )
179
+ _patch_field_annotation(
180
+ PackageRequest,
181
+ "pacing",
182
+ Annotated[Pacing | None, BeforeValidator(coerce_to_enum(Pacing))],
183
+ )
184
+ PackageRequest.model_rebuild(force=True)
185
+
186
+ # Apply coercion to CreateMediaBuyRequest
187
+ # - context: ContextObject | dict | None
188
+ # - ext: ExtensionObject | dict | None
189
+ # - packages: list[PackageRequest] (accepts subclass instances)
190
+ _patch_field_annotation(
191
+ CreateMediaBuyRequest,
192
+ "context",
193
+ Annotated[ContextObject | None, BeforeValidator(coerce_to_model(ContextObject))],
194
+ )
195
+ _patch_field_annotation(
196
+ CreateMediaBuyRequest,
197
+ "ext",
198
+ Annotated[ExtensionObject | None, BeforeValidator(coerce_to_model(ExtensionObject))],
199
+ )
200
+ _patch_field_annotation(
201
+ CreateMediaBuyRequest,
202
+ "packages",
203
+ Annotated[
204
+ list[PackageRequest],
205
+ BeforeValidator(coerce_subclass_list(PackageRequest)),
206
+ ],
207
+ )
208
+ CreateMediaBuyRequest.model_rebuild(force=True)
209
+
210
+ # Apply coercion to Packages
211
+ # - creative_assignments: list[CreativeAssignment] (accepts subclass instances)
212
+ # - creatives: list[CreativeAsset] (accepts subclass instances)
213
+ # - pacing: Pacing | str | None
214
+ _patch_field_annotation(
215
+ Packages,
216
+ "creative_assignments",
217
+ Annotated[
218
+ list[CreativeAssignment] | None,
219
+ BeforeValidator(coerce_subclass_list(CreativeAssignment)),
220
+ ],
221
+ )
222
+ _patch_field_annotation(
223
+ Packages,
224
+ "creatives",
225
+ Annotated[
226
+ list[CreativeAsset] | None,
227
+ BeforeValidator(coerce_subclass_list(CreativeAsset)),
228
+ ],
229
+ )
230
+ _patch_field_annotation(
231
+ Packages,
232
+ "pacing",
233
+ Annotated[Pacing | None, BeforeValidator(coerce_to_enum(Pacing))],
234
+ )
235
+ Packages.model_rebuild(force=True)
236
+
237
+ # Apply coercion to Packages1
238
+ # - creative_assignments: list[CreativeAssignment] (accepts subclass instances)
239
+ # - creatives: list[CreativeAsset] (accepts subclass instances)
240
+ # - pacing: Pacing | str | None
241
+ _patch_field_annotation(
242
+ Packages1,
243
+ "creative_assignments",
244
+ Annotated[
245
+ list[CreativeAssignment] | None,
246
+ BeforeValidator(coerce_subclass_list(CreativeAssignment)),
247
+ ],
248
+ )
249
+ _patch_field_annotation(
250
+ Packages1,
251
+ "creatives",
252
+ Annotated[
253
+ list[CreativeAsset] | None,
254
+ BeforeValidator(coerce_subclass_list(CreativeAsset)),
255
+ ],
256
+ )
257
+ _patch_field_annotation(
258
+ Packages1,
259
+ "pacing",
260
+ Annotated[Pacing | None, BeforeValidator(coerce_to_enum(Pacing))],
261
+ )
262
+ Packages1.model_rebuild(force=True)
263
+
264
+
265
+ def _patch_field_annotation(
266
+ model: type,
267
+ field_name: str,
268
+ new_annotation: Any,
269
+ ) -> None:
270
+ """Patch a field annotation on a Pydantic model.
271
+
272
+ This modifies the model's __annotations__ dict to add
273
+ BeforeValidator coercion.
274
+ """
275
+ model.__annotations__[field_name] = new_annotation
276
+
277
+
278
+ # Apply coercion when module is imported
279
+ _apply_coercion()
@@ -0,0 +1,194 @@
1
+ """Type coercion utilities for improved type ergonomics.
2
+
3
+ This module provides validators and utilities that enable flexible input types
4
+ while maintaining type safety. It allows developers to use natural Python
5
+ patterns (strings for enums, dicts for models) without explicit type construction.
6
+
7
+ Examples:
8
+ # With coercion, these are equivalent:
9
+ ListCreativeFormatsRequest(type="video")
10
+ ListCreativeFormatsRequest(type=FormatCategory.video)
11
+
12
+ # Dict coercion for context:
13
+ ListCreativeFormatsRequest(context={"key": "value"})
14
+ ListCreativeFormatsRequest(context=ContextObject(key="value"))
15
+ """
16
+
17
+ from __future__ import annotations
18
+
19
+ from collections.abc import Callable
20
+ from enum import Enum
21
+ from typing import TYPE_CHECKING, Any, TypeVar
22
+
23
+ if TYPE_CHECKING:
24
+ from pydantic import BaseModel
25
+
26
+ T = TypeVar("T", bound=Enum)
27
+ M = TypeVar("M", bound="BaseModel")
28
+
29
+
30
+ def coerce_to_enum(enum_class: type[T]) -> Callable[[Any], T | None]:
31
+ """Create a validator that coerces strings to enum values.
32
+
33
+ This allows users to pass string values where enums are expected,
34
+ which Pydantic will coerce at runtime anyway, but this makes it
35
+ type-checker friendly.
36
+
37
+ Args:
38
+ enum_class: The enum class to coerce to.
39
+
40
+ Returns:
41
+ A validator function for use with Pydantic's BeforeValidator.
42
+
43
+ Example:
44
+ ```python
45
+ from pydantic import BeforeValidator
46
+ from typing import Annotated
47
+
48
+ type: Annotated[
49
+ FormatCategory | None,
50
+ BeforeValidator(coerce_to_enum(FormatCategory))
51
+ ] = None
52
+ ```
53
+ """
54
+
55
+ def validator(value: Any) -> T | None:
56
+ if value is None:
57
+ return None
58
+ if isinstance(value, enum_class):
59
+ return value
60
+ if isinstance(value, str):
61
+ try:
62
+ return enum_class(value)
63
+ except ValueError:
64
+ # Let Pydantic handle the validation error
65
+ return value # type: ignore
66
+ return value # type: ignore
67
+
68
+ return validator
69
+
70
+
71
+ def coerce_to_enum_list(enum_class: type[T]) -> Callable[[Any], list[T] | None]:
72
+ """Create a validator that coerces a list of strings to enum values.
73
+
74
+ Args:
75
+ enum_class: The enum class to coerce to.
76
+
77
+ Returns:
78
+ A validator function for use with Pydantic's BeforeValidator.
79
+ """
80
+
81
+ def validator(value: Any) -> list[T] | None:
82
+ if value is None:
83
+ return None
84
+ if not isinstance(value, (list, tuple)):
85
+ return value # type: ignore
86
+ result: list[T] = []
87
+ for item in value:
88
+ if isinstance(item, enum_class):
89
+ result.append(item)
90
+ elif isinstance(item, str):
91
+ try:
92
+ result.append(enum_class(item))
93
+ except ValueError:
94
+ # Let Pydantic handle the validation error
95
+ result.append(item) # type: ignore
96
+ else:
97
+ result.append(item)
98
+ return result
99
+
100
+ return validator
101
+
102
+
103
+ def coerce_to_model(model_class: type[M]) -> Callable[[Any], M | None]:
104
+ """Create a validator that coerces dicts to Pydantic model instances.
105
+
106
+ This allows users to pass dict values where model objects are expected,
107
+ making the API more ergonomic.
108
+
109
+ Args:
110
+ model_class: The Pydantic model class to coerce to.
111
+
112
+ Returns:
113
+ A validator function for use with Pydantic's BeforeValidator.
114
+
115
+ Example:
116
+ ```python
117
+ from pydantic import BeforeValidator
118
+ from typing import Annotated
119
+
120
+ context: Annotated[
121
+ ContextObject | None,
122
+ BeforeValidator(coerce_to_model(ContextObject))
123
+ ] = None
124
+ ```
125
+ """
126
+
127
+ def validator(value: Any) -> M | None:
128
+ if value is None:
129
+ return None
130
+ if isinstance(value, model_class):
131
+ return value
132
+ if isinstance(value, dict):
133
+ return model_class(**value)
134
+ return value # type: ignore
135
+
136
+ return validator
137
+
138
+
139
+ def coerce_subclass_list(base_class: type[M]) -> Callable[[Any], list[M] | None]:
140
+ """Create a validator that accepts lists containing subclass instances.
141
+
142
+ This addresses Python's list invariance limitation where `list[Subclass]`
143
+ cannot be assigned to `list[BaseClass]` despite being type-safe at runtime.
144
+
145
+ The validator:
146
+ 1. Accepts Any as input (satisfies mypy for subclass lists)
147
+ 2. Validates each item is an instance of base_class (or subclass)
148
+ 3. Returns list[base_class] (satisfies the field type)
149
+
150
+ Args:
151
+ base_class: The base Pydantic model class for list items.
152
+
153
+ Returns:
154
+ A validator function for use with Pydantic's BeforeValidator.
155
+
156
+ Example:
157
+ ```python
158
+ class ExtendedCreative(CreativeAsset):
159
+ internal_id: str = Field(exclude=True)
160
+
161
+ # Without coercion: requires cast()
162
+ # PackageRequest(creatives=cast(list[CreativeAsset], [extended]))
163
+
164
+ # With coercion: just works
165
+ PackageRequest(creatives=[extended]) # No cast needed!
166
+ ```
167
+ """
168
+
169
+ def validator(value: Any) -> list[M] | None:
170
+ if value is None:
171
+ return None
172
+ if not isinstance(value, (list, tuple)):
173
+ return value # type: ignore
174
+ # Return the list as-is - Pydantic will validate each item
175
+ # is an instance of base_class (including subclasses)
176
+ return list(value)
177
+
178
+ return validator
179
+
180
+
181
+ # =============================================================================
182
+ # List Variance Notes
183
+ # =============================================================================
184
+ #
185
+ # The coerce_subclass_list validator above handles the common case of passing
186
+ # `list[Subclass]` to a field expecting `list[BaseClass]` when constructing
187
+ # request models.
188
+ #
189
+ # For function signatures in your own code, use Sequence[T] which is covariant:
190
+ #
191
+ # from collections.abc import Sequence
192
+ # def process_creatives(creatives: Sequence[CreativeAsset]) -> None:
193
+ # ... # Accepts list[ExtendedCreative] without cast()
194
+ #
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: adcp
3
- Version: 2.14.0
3
+ Version: 2.15.0
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
@@ -26,9 +26,11 @@ src/adcp/protocols/mcp.py
26
26
  src/adcp/testing/__init__.py
27
27
  src/adcp/testing/test_helpers.py
28
28
  src/adcp/types/__init__.py
29
+ src/adcp/types/_ergonomic.py
29
30
  src/adcp/types/_generated.py
30
31
  src/adcp/types/aliases.py
31
32
  src/adcp/types/base.py
33
+ src/adcp/types/coercion.py
32
34
  src/adcp/types/core.py
33
35
  src/adcp/types/generated_poc/__init__.py
34
36
  src/adcp/types/generated_poc/adagents.py
@@ -208,4 +210,5 @@ tests/test_response_parser.py
208
210
  tests/test_response_str.py
209
211
  tests/test_simple_api.py
210
212
  tests/test_type_aliases.py
213
+ tests/test_type_coercion.py
211
214
  tests/test_webhook_handling.py