adcp 2.13.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.
- {adcp-2.13.0/src/adcp.egg-info → adcp-2.15.0}/PKG-INFO +2 -2
- {adcp-2.13.0 → adcp-2.15.0}/pyproject.toml +2 -2
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/__init__.py +14 -1
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/adagents.py +53 -9
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/client.py +361 -57
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/protocols/mcp.py +1 -3
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/__init__.py +30 -34
- adcp-2.15.0/src/adcp/types/_ergonomic.py +279 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/_generated.py +82 -13
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/aliases.py +23 -0
- adcp-2.15.0/src/adcp/types/coercion.py +194 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/adagents.py +9 -13
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/activation_key.py +12 -2
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/daast_asset.py +12 -2
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/image_asset.py +9 -5
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/vast_asset.py +12 -2
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/video_asset.py +9 -5
- adcp-2.15.0/src/adcp/types/generated_poc/core/async_response_data.py +72 -0
- adcp-2.15.0/src/adcp/types/generated_poc/core/brand_manifest_ref.py +35 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_asset.py +4 -6
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_manifest.py +4 -6
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/deployment.py +16 -8
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/destination.py +12 -2
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/format.py +3 -3
- adcp-2.13.0/src/adcp/types/generated_poc/core/webhook_payload.py → adcp-2.15.0/src/adcp/types/generated_poc/core/mcp_webhook_payload.py +8 -33
- adcp-2.15.0/src/adcp/types/generated_poc/core/pricing_option.py +51 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/product.py +4 -29
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/promoted_offerings.py +5 -21
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/property.py +4 -6
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/publisher_property_selector.py +15 -2
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/push_notification_config.py +1 -4
- adcp-2.15.0/src/adcp/types/generated_poc/core/start_timing.py +18 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/sub_asset.py +12 -2
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/preview_creative_response.py +3 -14
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/preview_render.py +3 -11
- adcp-2.15.0/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +37 -0
- adcp-2.15.0/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +19 -0
- adcp-2.15.0/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +31 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/create_media_buy_request.py +7 -26
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +4 -2
- adcp-2.15.0/src/adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +38 -0
- adcp-2.15.0/src/adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +24 -0
- adcp-2.15.0/src/adcp/types/generated_poc/media_buy/get_products_async_response_working.py +35 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_products_request.py +5 -20
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_creatives_response.py +5 -7
- adcp-2.15.0/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +31 -0
- adcp-2.15.0/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +19 -0
- adcp-2.15.0/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +37 -0
- adcp-2.15.0/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +30 -0
- adcp-2.15.0/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +19 -0
- adcp-2.15.0/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +31 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/update_media_buy_request.py +4 -14
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/activate_signal_request.py +2 -2
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/activate_signal_response.py +2 -2
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/get_signals_request.py +2 -2
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/get_signals_response.py +2 -3
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/utils/preview_cache.py +6 -4
- adcp-2.15.0/src/adcp/webhooks.py +508 -0
- {adcp-2.13.0 → adcp-2.15.0/src/adcp.egg-info}/PKG-INFO +2 -2
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp.egg-info/SOURCES.txt +23 -3
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp.egg-info/requires.txt +1 -1
- {adcp-2.13.0 → adcp-2.15.0}/tests/test_adagents.py +275 -26
- {adcp-2.13.0 → adcp-2.15.0}/tests/test_preview_html.py +2 -1
- adcp-2.15.0/tests/test_type_coercion.py +396 -0
- adcp-2.15.0/tests/test_webhook_handling.py +1033 -0
- adcp-2.13.0/src/adcp/types/generated_poc/core/dimensions.py +0 -18
- {adcp-2.13.0 → adcp-2.15.0}/LICENSE +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/MANIFEST.in +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/README.md +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/setup.cfg +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/ADCP_VERSION +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/__main__.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/config.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/exceptions.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/protocols/__init__.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/protocols/a2a.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/protocols/base.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/py.typed +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/simple.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/testing/__init__.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/testing/test_helpers.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/base.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/core.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/__init__.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/__init__.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/__init__.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/audio_asset.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/css_asset.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/html_asset.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/javascript_asset.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/text_asset.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/url_asset.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/webhook_asset.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/brand_manifest.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/context.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_assignment.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_filters.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_policy.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/delivery_metrics.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/error.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/ext.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/format_id.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/frequency_cap.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/measurement.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/media_buy.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/package.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/performance_feedback.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/placement.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/product_filters.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/promoted_products.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/property_id.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/property_tag.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/protocol_envelope.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/reporting_capabilities.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/response.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/signal_filters.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/targeting.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/__init__.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/list_creative_formats_request.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/list_creative_formats_response.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/preview_creative_request.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/__init__.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/adcp_domain.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/asset_content_type.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/auth_scheme.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/available_metric.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/channels.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/co_branding_requirement.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/creative_action.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/creative_agent_capability.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/creative_sort_field.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/creative_status.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/daast_tracking_event.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/daast_version.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/delivery_type.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/dimension_unit.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/feed_format.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/feedback_source.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/format_category.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/format_id_parameter.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/frequency_cap_scope.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/history_entry_type.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/http_method.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/identifier_types.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/javascript_module_type.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/landing_page_requirement.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/markdown_flavor.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/media_buy_status.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/metric_type.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/notification_type.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/pacing.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/preview_output_format.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/pricing_model.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/property_type.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/publisher_identifier_types.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/reporting_frequency.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/signal_catalog_type.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/sort_direction.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/standard_format_ids.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/task_status.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/task_type.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/update_frequency.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/url_asset_type.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/validation_mode.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/vast_tracking_event.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/vast_version.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/webhook_response_type.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/webhook_security_method.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/__init__.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/build_creative_request.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/build_creative_response.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_products_response.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_creative_formats_request.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_creative_formats_response.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_creatives_request.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/package_request.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/sync_creatives_request.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/sync_creatives_response.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/__init__.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpc_option.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpcv_option.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpm_auction_option.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpp_option.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpv_option.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/flat_rate_option.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/protocols/__init__.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/protocols/adcp_extension.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/__init__.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/utils/__init__.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/utils/operation_id.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/utils/response_parser.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp/validation.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp.egg-info/dependency_links.txt +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp.egg-info/entry_points.txt +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/src/adcp.egg-info/top_level.txt +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/tests/test_cli.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/tests/test_client.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/tests/test_code_generation.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/tests/test_discriminated_unions.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/tests/test_format_id_validation.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/tests/test_helpers.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/tests/test_protocols.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/tests/test_public_api.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/tests/test_response_parser.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/tests/test_response_str.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/tests/test_simple_api.py +0 -0
- {adcp-2.13.0 → adcp-2.15.0}/tests/test_type_aliases.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: adcp
|
|
3
|
-
Version: 2.
|
|
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
|
|
@@ -25,7 +25,7 @@ Requires-Dist: httpx>=0.24.0
|
|
|
25
25
|
Requires-Dist: pydantic>=2.0.0
|
|
26
26
|
Requires-Dist: typing-extensions>=4.5.0
|
|
27
27
|
Requires-Dist: a2a-sdk>=0.3.0
|
|
28
|
-
Requires-Dist: mcp>=
|
|
28
|
+
Requires-Dist: mcp>=1.23.2
|
|
29
29
|
Requires-Dist: email-validator>=2.0.0
|
|
30
30
|
Provides-Extra: dev
|
|
31
31
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "adcp"
|
|
7
|
-
version = "2.
|
|
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"}
|
|
@@ -30,7 +30,7 @@ dependencies = [
|
|
|
30
30
|
"pydantic>=2.0.0",
|
|
31
31
|
"typing-extensions>=4.5.0",
|
|
32
32
|
"a2a-sdk>=0.3.0",
|
|
33
|
-
"mcp>=
|
|
33
|
+
"mcp>=1.23.2",
|
|
34
34
|
"email-validator>=2.0.0",
|
|
35
35
|
]
|
|
36
36
|
|
|
@@ -101,6 +101,7 @@ from adcp.types import (
|
|
|
101
101
|
ListCreativeFormatsResponse,
|
|
102
102
|
ListCreativesRequest,
|
|
103
103
|
ListCreativesResponse,
|
|
104
|
+
McpWebhookPayload,
|
|
104
105
|
MediaBuy,
|
|
105
106
|
MediaBuyStatus,
|
|
106
107
|
Package,
|
|
@@ -178,8 +179,14 @@ from adcp.validation import (
|
|
|
178
179
|
validate_product,
|
|
179
180
|
validate_publisher_properties_item,
|
|
180
181
|
)
|
|
182
|
+
from adcp.webhooks import (
|
|
183
|
+
create_a2a_webhook_payload,
|
|
184
|
+
create_mcp_webhook_payload,
|
|
185
|
+
extract_webhook_result_data,
|
|
186
|
+
get_adcp_signed_headers_for_webhook,
|
|
187
|
+
)
|
|
181
188
|
|
|
182
|
-
__version__ = "2.
|
|
189
|
+
__version__ = "2.15.0"
|
|
183
190
|
|
|
184
191
|
|
|
185
192
|
def get_adcp_version() -> str:
|
|
@@ -215,6 +222,12 @@ __all__ = [
|
|
|
215
222
|
"TaskResult",
|
|
216
223
|
"TaskStatus",
|
|
217
224
|
"WebhookMetadata",
|
|
225
|
+
# Webhook utilities
|
|
226
|
+
"create_mcp_webhook_payload",
|
|
227
|
+
"create_a2a_webhook_payload",
|
|
228
|
+
"get_adcp_signed_headers_for_webhook",
|
|
229
|
+
"extract_webhook_result_data",
|
|
230
|
+
"McpWebhookPayload",
|
|
218
231
|
# Common request/response types (re-exported for convenience)
|
|
219
232
|
"CreateMediaBuyRequest",
|
|
220
233
|
"CreateMediaBuyResponse",
|
|
@@ -478,12 +478,19 @@ def get_all_tags(adagents_data: dict[str, Any]) -> set[str]:
|
|
|
478
478
|
def get_properties_by_agent(adagents_data: dict[str, Any], agent_url: str) -> list[dict[str, Any]]:
|
|
479
479
|
"""Get all properties authorized for a specific agent.
|
|
480
480
|
|
|
481
|
+
Handles all authorization types per the AdCP specification:
|
|
482
|
+
- inline_properties: Properties defined directly in the agent's properties array
|
|
483
|
+
- property_ids: Filter top-level properties by property_id
|
|
484
|
+
- property_tags: Filter top-level properties by tags
|
|
485
|
+
- publisher_properties: References properties from other publisher domains
|
|
486
|
+
(returns the selector objects, not resolved properties)
|
|
487
|
+
|
|
481
488
|
Args:
|
|
482
489
|
adagents_data: Parsed adagents.json data
|
|
483
490
|
agent_url: URL of the agent to filter by
|
|
484
491
|
|
|
485
492
|
Returns:
|
|
486
|
-
List of properties for the specified agent (empty if agent not found
|
|
493
|
+
List of properties for the specified agent (empty if agent not found)
|
|
487
494
|
|
|
488
495
|
Raises:
|
|
489
496
|
AdagentsValidationError: If adagents_data is malformed
|
|
@@ -495,6 +502,11 @@ def get_properties_by_agent(adagents_data: dict[str, Any], agent_url: str) -> li
|
|
|
495
502
|
if not isinstance(authorized_agents, list):
|
|
496
503
|
raise AdagentsValidationError("adagents.json must have 'authorized_agents' array")
|
|
497
504
|
|
|
505
|
+
# Get top-level properties for reference-based authorization types
|
|
506
|
+
top_level_properties = adagents_data.get("properties", [])
|
|
507
|
+
if not isinstance(top_level_properties, list):
|
|
508
|
+
top_level_properties = []
|
|
509
|
+
|
|
498
510
|
# Normalize the agent URL for comparison
|
|
499
511
|
normalized_agent_url = normalize_url(agent_url)
|
|
500
512
|
|
|
@@ -510,12 +522,44 @@ def get_properties_by_agent(adagents_data: dict[str, Any], agent_url: str) -> li
|
|
|
510
522
|
if normalize_url(agent_url_from_json) != normalized_agent_url:
|
|
511
523
|
continue
|
|
512
524
|
|
|
513
|
-
# Found the agent -
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
525
|
+
# Found the agent - determine authorization type
|
|
526
|
+
authorization_type = agent.get("authorization_type", "")
|
|
527
|
+
|
|
528
|
+
# Handle inline_properties (properties array directly on agent)
|
|
529
|
+
if authorization_type == "inline_properties" or "properties" in agent:
|
|
530
|
+
properties = agent.get("properties", [])
|
|
531
|
+
if not isinstance(properties, list):
|
|
532
|
+
return []
|
|
533
|
+
return [p for p in properties if isinstance(p, dict)]
|
|
534
|
+
|
|
535
|
+
# Handle property_ids (filter top-level properties by property_id)
|
|
536
|
+
if authorization_type == "property_ids":
|
|
537
|
+
authorized_ids = set(agent.get("property_ids", []))
|
|
538
|
+
return [
|
|
539
|
+
p
|
|
540
|
+
for p in top_level_properties
|
|
541
|
+
if isinstance(p, dict) and p.get("property_id") in authorized_ids
|
|
542
|
+
]
|
|
543
|
+
|
|
544
|
+
# Handle property_tags (filter top-level properties by tags)
|
|
545
|
+
if authorization_type == "property_tags":
|
|
546
|
+
authorized_tags = set(agent.get("property_tags", []))
|
|
547
|
+
return [
|
|
548
|
+
p
|
|
549
|
+
for p in top_level_properties
|
|
550
|
+
if isinstance(p, dict) and set(p.get("tags", [])) & authorized_tags
|
|
551
|
+
]
|
|
552
|
+
|
|
553
|
+
# Handle publisher_properties (cross-domain references)
|
|
554
|
+
# Returns the selector objects; caller must resolve against other domains
|
|
555
|
+
if authorization_type == "publisher_properties":
|
|
556
|
+
publisher_props = agent.get("publisher_properties", [])
|
|
557
|
+
if not isinstance(publisher_props, list):
|
|
558
|
+
return []
|
|
559
|
+
return [p for p in publisher_props if isinstance(p, dict)]
|
|
560
|
+
|
|
561
|
+
# No recognized authorization type - return empty
|
|
562
|
+
return []
|
|
519
563
|
|
|
520
564
|
return []
|
|
521
565
|
|
|
@@ -544,8 +588,8 @@ class AuthorizationContext:
|
|
|
544
588
|
if not isinstance(prop, dict):
|
|
545
589
|
continue
|
|
546
590
|
|
|
547
|
-
# Extract property ID
|
|
548
|
-
prop_id = prop.get("
|
|
591
|
+
# Extract property ID (per AdCP v2 schema, the field is "property_id")
|
|
592
|
+
prop_id = prop.get("property_id")
|
|
549
593
|
if prop_id and isinstance(prop_id, str):
|
|
550
594
|
self.property_ids.append(prop_id)
|
|
551
595
|
|