diff --git a/scripts/consolidate_exports.py b/scripts/consolidate_exports.py index 5796a8f22..aa8ec3a5b 100644 --- a/scripts/consolidate_exports.py +++ b/scripts/consolidate_exports.py @@ -28,6 +28,10 @@ def extract_exports_from_module(module_path: Path) -> set[str]: exports = set() + def _add_public_type_name(name: str) -> None: + if name and not name.startswith("_") and name[0].isupper(): + exports.add(name) + # Only look at module-level nodes (not inside classes) for node in tree.body: # Class definitions @@ -39,8 +43,11 @@ def extract_exports_from_module(module_path: Path) -> set[str]: for target in node.targets: if isinstance(target, ast.Name) and not target.id.startswith("_"): # Only export if it looks like a type name (starts with capital) - if target.id and target.id[0].isupper(): - exports.add(target.id) + _add_public_type_name(target.id) + elif isinstance(node, ast.AnnAssign) and isinstance(node.target, ast.Name): + # ``Foo: TypeAlias = ...`` is common in post-generated response + # unions; keep those public aliases in the consolidated namespace. + _add_public_type_name(node.target.id) return exports @@ -484,11 +491,11 @@ def _stem_matches_export(module_stem: str, export_name: str) -> bool: content = "\n".join(lines) # Product is generated as a RootModel union, but the SDK's public Product # export intentionally points at the concrete first arm for subclassing. - # Avoid importing the RootModel under the public name so mypy sees the - # later compatibility assignment as a plain class alias, not a class - # redefinition. + # Avoid importing the RootModel so mypy sees the later compatibility + # assignment as the first public Product binding, not a class redefinition. content = content.replace( - " Product,\n Product1,\n", " Product as ProductUnion,\n Product1,\n" + " Product,\n Product1,\n", + " Product1,\n", ) return content diff --git a/scripts/post_generate_fixes.py b/scripts/post_generate_fixes.py index edf3c7373..715c1176f 100644 --- a/scripts/post_generate_fixes.py +++ b/scripts/post_generate_fixes.py @@ -46,6 +46,28 @@ def _load_resolve_bundle_key(): OUTPUT_DIR = REPO_ROOT / "src" / "adcp" / "types" / "generated_poc" SCHEMA_DIR = REPO_ROOT / "schemas" / "cache" / _BUNDLE_KEY +_PROTOCOL_ENVELOPE_IMPORT = "from ..core.protocol_envelope import ProtocolEnvelope\n" +_VERSION_ENVELOPE_IMPORT = "from ..core.version_envelope import AdcpVersionEnvelope\n" + + +def _sync_protocol_envelope_import(source: str) -> str: + """Keep the ProtocolEnvelope import aligned with restored response arms.""" + uses_protocol_envelope = "ProtocolEnvelope" in source.replace(_PROTOCOL_ENVELOPE_IMPORT, "") + if not uses_protocol_envelope: + return source.replace(_PROTOCOL_ENVELOPE_IMPORT, "") + if _PROTOCOL_ENVELOPE_IMPORT in source: + return source + if _VERSION_ENVELOPE_IMPORT in source: + return source.replace( + _VERSION_ENVELOPE_IMPORT, + _PROTOCOL_ENVELOPE_IMPORT + _VERSION_ENVELOPE_IMPORT, + 1, + ) + future_import = "from __future__ import annotations\n\n" + if future_import in source: + return source.replace(future_import, future_import + _PROTOCOL_ENVELOPE_IMPORT, 1) + return _PROTOCOL_ENVELOPE_IMPORT + source + def add_model_validator_to_product(): """Add model_validators to Product class. @@ -1593,15 +1615,12 @@ def restore_response_variant_aliases() -> None: def _remove_original_response_class(source: str, base: str) -> str: """Remove the generator's envelope-only class before restoring a union alias.""" - protocol_import = "from ..core.protocol_envelope import ProtocolEnvelope\n" source = re.sub( rf"\n\nclass {re.escape(base)}\(AdcpVersionEnvelope, ProtocolEnvelope\):\n pass\n", "\n", source, ) - if "ProtocolEnvelope" not in source.replace(protocol_import, ""): - source = source.replace(protocol_import, "") - return source + return _sync_protocol_envelope_import(source) def _normalize_existing_arms(target: Path, base: str) -> None: """Keep compatibility arms payload-shaped and expose final names as aliases.""" @@ -1621,6 +1640,7 @@ def _normalize_existing_arms(target: Path, base: str) -> None: f"\n{base}: TypeAlias = ", new_source, ) + new_source = _sync_protocol_envelope_import(new_source) if new_source != original: target.write_text(new_source) diff --git a/src/adcp/types/_ergonomic.py b/src/adcp/types/_ergonomic.py index 50bdd0976..1931bdece 100644 --- a/src/adcp/types/_ergonomic.py +++ b/src/adcp/types/_ergonomic.py @@ -51,6 +51,7 @@ from adcp.types.generated_poc.core.error import Error from adcp.types.generated_poc.core.ext import ExtensionObject from adcp.types.generated_poc.core.format import Format +from adcp.types.generated_poc.core.package import Package from adcp.types.generated_poc.core.product import Product from adcp.types.generated_poc.enums.advertiser_industry import AdvertiserIndustry from adcp.types.generated_poc.enums.asset_content_type import AssetContentType @@ -58,6 +59,7 @@ from adcp.types.generated_poc.enums.delivery_type import DeliveryType from adcp.types.generated_poc.enums.disclosure_persistence import DisclosurePersistence from adcp.types.generated_poc.enums.disclosure_position import DisclosurePosition +from adcp.types.generated_poc.enums.media_buy_status import MediaBuyStatus from adcp.types.generated_poc.enums.pacing import Pacing from adcp.types.generated_poc.enums.sort_direction import SortDirection from adcp.types.generated_poc.enums.task_status import TaskStatus @@ -79,6 +81,9 @@ ) from adcp.types.generated_poc.media_buy.package_request import PackageRequest from adcp.types.generated_poc.media_buy.package_update import PackageUpdate +from adcp.types.generated_poc.media_buy.create_media_buy_response import ( + CreateMediaBuyResponse1, +) from adcp.types.generated_poc.media_buy.get_media_buy_delivery_response import ( GetMediaBuyDeliveryResponse, MediaBuyDelivery, @@ -476,6 +481,24 @@ def _apply_coercion() -> None: ) ListCreativeFormatsResponse.model_rebuild(force=True) + # Apply coercion to CreateMediaBuyResponse1 + # - packages: list[Package] (accepts subclass instances) + # - media_buy_status: MediaBuyStatus | str | None + _patch_field_annotation( + CreateMediaBuyResponse1, + "packages", + Annotated[ + list[Package], + BeforeValidator(coerce_subclass_list(Package)), + ], + ) + _patch_field_annotation( + CreateMediaBuyResponse1, + "media_buy_status", + Annotated[MediaBuyStatus | None, BeforeValidator(coerce_to_enum(MediaBuyStatus))], + ) + CreateMediaBuyResponse1.model_rebuild(force=True) + # Apply coercion to GetMediaBuyDeliveryResponse # - context: ContextObject | dict | None # - status: TaskStatus | str | None diff --git a/src/adcp/types/_generated.py b/src/adcp/types/_generated.py index 4cb5fa0ee..7ea38e75e 100644 --- a/src/adcp/types/_generated.py +++ b/src/adcp/types/_generated.py @@ -10,7 +10,7 @@ DO NOT EDIT MANUALLY. Generated from: https://github.com/adcontextprotocol/adcp/tree/main/schemas -Generation date: 2026-05-22 14:10:57 UTC +Generation date: 2026-05-24 21:33:52 UTC """ # ruff: noqa: E501, I001 @@ -260,7 +260,13 @@ Tags, ) from adcp.types.generated_poc.brand.acquire_rights_request import AcquireRightsRequest, Campaign -from adcp.types.generated_poc.brand.acquire_rights_response import AcquireRightsResponse +from adcp.types.generated_poc.brand.acquire_rights_response import ( + AcquireRightsResponse, + AcquireRightsResponse1, + AcquireRightsResponse2, + AcquireRightsResponse3, + AcquireRightsResponse4, +) from adcp.types.generated_poc.brand.creative_approval_request import CreativeApprovalRequest from adcp.types.generated_poc.brand.creative_approval_response import CreativeApprovalResponse from adcp.types.generated_poc.brand.get_brand_identity_request import ( @@ -273,6 +279,8 @@ FontRole, FontRole2, GetBrandIdentityResponse, + GetBrandIdentityResponse1, + GetBrandIdentityResponse2, OpentypeFeature, Style, WeightRangeItem, @@ -305,8 +313,15 @@ UpdateRightsResponse2, ) from adcp.types.generated_poc.brand.verification_status import VerificationStatus -from adcp.types.generated_poc.brand.verify_brand_claim_request import VerifyBrandClaimRequest -from adcp.types.generated_poc.brand.verify_brand_claim_response import VerifyBrandClaimResponse +from adcp.types.generated_poc.brand.verify_brand_claim_request import ( + ClaimType, + VerifyBrandClaimRequest, +) +from adcp.types.generated_poc.brand.verify_brand_claim_response import ( + VerifyBrandClaimErrorResponse, + VerifyBrandClaimResponse, + VerifyBrandClaimSuccessResponse, +) from adcp.types.generated_poc.brand.verify_brand_claims_request import ( Claim, Claim1, @@ -322,7 +337,6 @@ VerifyBrandClaimsRequestBulk, ) from adcp.types.generated_poc.brand.verify_brand_claims_response import ( - ClaimType, ResultEntry, ResultEntry1, ResultEntry2, @@ -435,13 +449,18 @@ ) from adcp.types.generated_poc.content_standards.get_content_standards_response import ( GetContentStandardsResponse, + GetContentStandardsResponse1, + GetContentStandardsResponse2, ) from adcp.types.generated_poc.content_standards.get_media_buy_artifacts_request import ( GetMediaBuyArtifactsRequest, TimeRange, ) from adcp.types.generated_poc.content_standards.get_media_buy_artifacts_response import ( + ArtifactRecord, GetMediaBuyArtifactsResponse, + GetMediaBuyArtifactsResponse1, + GetMediaBuyArtifactsResponse2, ) from adcp.types.generated_poc.content_standards.list_content_standards_request import ( ListContentStandardsRequest, @@ -753,7 +772,6 @@ MaterialSubmission, MetricOptimization, MetricOptimization1, - Product as ProductUnion, Product1, Product2, ProductCardDetailed, @@ -1043,6 +1061,8 @@ ) from adcp.types.generated_poc.creative.get_creative_features_response import ( GetCreativeFeaturesResponse, + GetCreativeFeaturesResponse1, + GetCreativeFeaturesResponse2, ) from adcp.types.generated_poc.creative.list_creative_formats_request import ( AssetType, @@ -1719,24 +1739,12 @@ # Backward compatibility aliases for renamed types MediaBuyPackage = _PackageFromGetMediaBuysResponse DeliveryStatus = _DeliveryStatusFromGetMediaBuysResponse -AcquireRightsResponse1 = AcquireRightsResponse -AcquireRightsResponse2 = AcquireRightsResponse -AcquireRightsResponse3 = AcquireRightsResponse -AcquireRightsResponse4 = AcquireRightsResponse ComplyTestControllerResponse1 = ComplyTestControllerResponse ComplyTestControllerResponse2 = ComplyTestControllerResponse ComplyTestControllerResponse3 = ComplyTestControllerResponse ComplyTestControllerResponse4 = ComplyTestControllerResponse CreateContentStandardsResponse1 = CreateContentStandardsResponse CreateContentStandardsResponse2 = CreateContentStandardsResponse -GetBrandIdentityResponse1 = GetBrandIdentityResponse -GetBrandIdentityResponse2 = GetBrandIdentityResponse -GetContentStandardsResponse1 = GetContentStandardsResponse -GetContentStandardsResponse2 = GetContentStandardsResponse -GetCreativeFeaturesResponse1 = GetCreativeFeaturesResponse -GetCreativeFeaturesResponse2 = GetCreativeFeaturesResponse -GetMediaBuyArtifactsResponse1 = GetMediaBuyArtifactsResponse -GetMediaBuyArtifactsResponse2 = GetMediaBuyArtifactsResponse ListContentStandardsResponse1 = ListContentStandardsResponse ListContentStandardsResponse2 = ListContentStandardsResponse UpdateContentStandardsResponse1 = UpdateContentStandardsResponse @@ -1831,6 +1839,7 @@ "Area", "Arm", "Artifact", + "ArtifactRecord", "ArtifactRef", "ArtifactWebhook", "ArtifactWebhookPayload", @@ -3056,8 +3065,10 @@ "VerificationStatus", "VerifyAgent", "VerifyAgent759", + "VerifyBrandClaimErrorResponse", "VerifyBrandClaimRequest", "VerifyBrandClaimResponse", + "VerifyBrandClaimSuccessResponse", "VerifyBrandClaimsRequest", "VerifyBrandClaimsRequestBulk", "VerifyBrandClaimsResponseBulk", diff --git a/src/adcp/types/aliases.py b/src/adcp/types/aliases.py index 8e0146d0a..ea2785bd4 100644 --- a/src/adcp/types/aliases.py +++ b/src/adcp/types/aliases.py @@ -102,103 +102,123 @@ CreateMediaBuyResponse3, ) -AcquireRightsResponse1 = getattr(_g, "AcquireRightsResponse1", _g.AcquireRightsResponse) -AcquireRightsResponse2 = getattr(_g, "AcquireRightsResponse2", _g.AcquireRightsResponse) -AcquireRightsResponse3 = getattr(_g, "AcquireRightsResponse3", _g.AcquireRightsResponse) -AcquireRightsResponse4 = getattr(_g, "AcquireRightsResponse4", _g.AcquireRightsResponse) -ActivateSignalResponse1 = getattr(_g, "ActivateSignalResponse1", _g.ActivateSignalResponse) -ActivateSignalResponse2 = getattr(_g, "ActivateSignalResponse2", _g.ActivateSignalResponse) -BuildCreativeResponse1 = getattr(_g, "BuildCreativeResponse1", _g.BuildCreativeResponse) -BuildCreativeResponse2 = getattr(_g, "BuildCreativeResponse2", _g.BuildCreativeResponse) -CalibrateContentResponse1 = getattr(_g, "CalibrateContentResponse1", _g.CalibrateContentResponse) -CalibrateContentResponse2 = getattr(_g, "CalibrateContentResponse2", _g.CalibrateContentResponse) -ComplyTestControllerResponse1 = getattr( - _g, "ComplyTestControllerResponse1", _g.ComplyTestControllerResponse -) -ComplyTestControllerResponse2 = getattr( - _g, "ComplyTestControllerResponse2", _g.ComplyTestControllerResponse -) -ComplyTestControllerResponse3 = getattr( - _g, "ComplyTestControllerResponse3", _g.ComplyTestControllerResponse -) -ComplyTestControllerResponse4 = getattr( - _g, "ComplyTestControllerResponse4", _g.ComplyTestControllerResponse -) -CreateContentStandardsResponse1 = getattr( - _g, "CreateContentStandardsResponse1", _g.CreateContentStandardsResponse -) -CreateContentStandardsResponse2 = getattr( - _g, "CreateContentStandardsResponse2", _g.CreateContentStandardsResponse -) -GetAccountFinancialsResponse1 = getattr( - _g, "GetAccountFinancialsResponse1", _g.GetAccountFinancialsResponse -) -GetAccountFinancialsResponse2 = getattr( - _g, "GetAccountFinancialsResponse2", _g.GetAccountFinancialsResponse -) -GetBrandIdentityResponse1 = getattr(_g, "GetBrandIdentityResponse1", _g.GetBrandIdentityResponse) -GetBrandIdentityResponse2 = getattr(_g, "GetBrandIdentityResponse2", _g.GetBrandIdentityResponse) -GetContentStandardsResponse1 = getattr( - _g, "GetContentStandardsResponse1", _g.GetContentStandardsResponse -) -GetContentStandardsResponse2 = getattr( - _g, "GetContentStandardsResponse2", _g.GetContentStandardsResponse -) -GetCreativeFeaturesResponse1 = getattr( - _g, "GetCreativeFeaturesResponse1", _g.GetCreativeFeaturesResponse -) -GetCreativeFeaturesResponse2 = getattr( - _g, "GetCreativeFeaturesResponse2", _g.GetCreativeFeaturesResponse -) -GetMediaBuyArtifactsResponse1 = getattr( - _g, "GetMediaBuyArtifactsResponse1", _g.GetMediaBuyArtifactsResponse -) -GetMediaBuyArtifactsResponse2 = getattr( - _g, "GetMediaBuyArtifactsResponse2", _g.GetMediaBuyArtifactsResponse -) -GetRightsResponse1 = getattr(_g, "GetRightsResponse1", _g.GetRightsResponse) -GetRightsResponse2 = getattr(_g, "GetRightsResponse2", _g.GetRightsResponse) -ListContentStandardsResponse1 = getattr( - _g, "ListContentStandardsResponse1", _g.ListContentStandardsResponse -) -ListContentStandardsResponse2 = getattr( - _g, "ListContentStandardsResponse2", _g.ListContentStandardsResponse -) -LogEventResponse1 = getattr(_g, "LogEventResponse1", _g.LogEventResponse) -LogEventResponse2 = getattr(_g, "LogEventResponse2", _g.LogEventResponse) -PreviewCreativeResponse1 = getattr(_g, "PreviewCreativeResponse1", _g.PreviewCreativeResponse) -PreviewCreativeResponse2 = getattr(_g, "PreviewCreativeResponse2", _g.PreviewCreativeResponse) -PreviewCreativeResponse3 = getattr(_g, "PreviewCreativeResponse3", _g.PreviewCreativeResponse) -ProvidePerformanceFeedbackResponse1 = getattr( - _g, "ProvidePerformanceFeedbackResponse1", _g.ProvidePerformanceFeedbackResponse -) -ProvidePerformanceFeedbackResponse2 = getattr( - _g, "ProvidePerformanceFeedbackResponse2", _g.ProvidePerformanceFeedbackResponse -) -SyncAccountsResponse1 = getattr(_g, "SyncAccountsResponse1", _g.SyncAccountsResponse) -SyncAccountsResponse2 = getattr(_g, "SyncAccountsResponse2", _g.SyncAccountsResponse) -SyncAudiencesResponse1 = getattr(_g, "SyncAudiencesResponse1", _g.SyncAudiencesResponse) -SyncAudiencesResponse2 = getattr(_g, "SyncAudiencesResponse2", _g.SyncAudiencesResponse) -SyncCatalogsResponse1 = getattr(_g, "SyncCatalogsResponse1", _g.SyncCatalogsResponse) -SyncCatalogsResponse2 = getattr(_g, "SyncCatalogsResponse2", _g.SyncCatalogsResponse) -SyncCreativesResponse1 = getattr(_g, "SyncCreativesResponse1", _g.SyncCreativesResponse) -SyncCreativesResponse2 = getattr(_g, "SyncCreativesResponse2", _g.SyncCreativesResponse) -SyncEventSourcesResponse1 = getattr(_g, "SyncEventSourcesResponse1", _g.SyncEventSourcesResponse) -SyncEventSourcesResponse2 = getattr(_g, "SyncEventSourcesResponse2", _g.SyncEventSourcesResponse) -UpdateContentStandardsResponse1 = getattr( - _g, "UpdateContentStandardsResponse1", _g.UpdateContentStandardsResponse -) -UpdateContentStandardsResponse2 = getattr( - _g, "UpdateContentStandardsResponse2", _g.UpdateContentStandardsResponse -) -UpdateMediaBuyResponse1 = getattr(_g, "UpdateMediaBuyResponse1", _g.UpdateMediaBuyResponse) -UpdateMediaBuyResponse2 = getattr(_g, "UpdateMediaBuyResponse2", _g.UpdateMediaBuyResponse) -UpdateMediaBuyResponse3 = getattr(_g, "UpdateMediaBuyResponse3", _g.UpdateMediaBuyResponse) -ValidateContentDeliveryResponse1 = getattr( - _g, "ValidateContentDeliveryResponse1", _g.ValidateContentDeliveryResponse -) -ValidateContentDeliveryResponse2 = getattr( - _g, "ValidateContentDeliveryResponse2", _g.ValidateContentDeliveryResponse + +def _generated_alias(name: str, fallback_name: str) -> Any: + try: + return getattr(_g, name) + except AttributeError: + return getattr(_g, fallback_name) + + +AcquireRightsResponse1 = _generated_alias("AcquireRightsResponse1", "AcquireRightsResponse") +AcquireRightsResponse2 = _generated_alias("AcquireRightsResponse2", "AcquireRightsResponse") +AcquireRightsResponse3 = _generated_alias("AcquireRightsResponse3", "AcquireRightsResponse") +AcquireRightsResponse4 = _generated_alias("AcquireRightsResponse4", "AcquireRightsResponse") +ActivateSignalResponse1 = _generated_alias("ActivateSignalResponse1", "ActivateSignalResponse") +ActivateSignalResponse2 = _generated_alias("ActivateSignalResponse2", "ActivateSignalResponse") +BuildCreativeResponse1 = _generated_alias("BuildCreativeResponse1", "BuildCreativeResponse") +BuildCreativeResponse2 = _generated_alias("BuildCreativeResponse2", "BuildCreativeResponse") +CalibrateContentResponse1 = _generated_alias( + "CalibrateContentResponse1", "CalibrateContentResponse" +) +CalibrateContentResponse2 = _generated_alias( + "CalibrateContentResponse2", "CalibrateContentResponse" +) +ComplyTestControllerResponse1 = _generated_alias( + "ComplyTestControllerResponse1", "ComplyTestControllerResponse" +) +ComplyTestControllerResponse2 = _generated_alias( + "ComplyTestControllerResponse2", "ComplyTestControllerResponse" +) +ComplyTestControllerResponse3 = _generated_alias( + "ComplyTestControllerResponse3", "ComplyTestControllerResponse" +) +ComplyTestControllerResponse4 = _generated_alias( + "ComplyTestControllerResponse4", "ComplyTestControllerResponse" +) +CreateContentStandardsResponse1 = _generated_alias( + "CreateContentStandardsResponse1", "CreateContentStandardsResponse" +) +CreateContentStandardsResponse2 = _generated_alias( + "CreateContentStandardsResponse2", "CreateContentStandardsResponse" +) +GetAccountFinancialsResponse1 = _generated_alias( + "GetAccountFinancialsResponse1", "GetAccountFinancialsResponse" +) +GetAccountFinancialsResponse2 = _generated_alias( + "GetAccountFinancialsResponse2", "GetAccountFinancialsResponse" +) +GetBrandIdentityResponse1 = _generated_alias( + "GetBrandIdentityResponse1", "GetBrandIdentityResponse" +) +GetBrandIdentityResponse2 = _generated_alias( + "GetBrandIdentityResponse2", "GetBrandIdentityResponse" +) +GetContentStandardsResponse1 = _generated_alias( + "GetContentStandardsResponse1", "GetContentStandardsResponse" +) +GetContentStandardsResponse2 = _generated_alias( + "GetContentStandardsResponse2", "GetContentStandardsResponse" +) +GetCreativeFeaturesResponse1 = _generated_alias( + "GetCreativeFeaturesResponse1", "GetCreativeFeaturesResponse" +) +GetCreativeFeaturesResponse2 = _generated_alias( + "GetCreativeFeaturesResponse2", "GetCreativeFeaturesResponse" +) +GetMediaBuyArtifactsResponse1 = _generated_alias( + "GetMediaBuyArtifactsResponse1", "GetMediaBuyArtifactsResponse" +) +GetMediaBuyArtifactsResponse2 = _generated_alias( + "GetMediaBuyArtifactsResponse2", "GetMediaBuyArtifactsResponse" +) +GetRightsResponse1 = _generated_alias("GetRightsResponse1", "GetRightsResponse") +GetRightsResponse2 = _generated_alias("GetRightsResponse2", "GetRightsResponse") +ListContentStandardsResponse1 = _generated_alias( + "ListContentStandardsResponse1", "ListContentStandardsResponse" +) +ListContentStandardsResponse2 = _generated_alias( + "ListContentStandardsResponse2", "ListContentStandardsResponse" +) +LogEventResponse1 = _generated_alias("LogEventResponse1", "LogEventResponse") +LogEventResponse2 = _generated_alias("LogEventResponse2", "LogEventResponse") +PreviewCreativeResponse1 = _generated_alias("PreviewCreativeResponse1", "PreviewCreativeResponse") +PreviewCreativeResponse2 = _generated_alias("PreviewCreativeResponse2", "PreviewCreativeResponse") +PreviewCreativeResponse3 = _generated_alias("PreviewCreativeResponse3", "PreviewCreativeResponse") +ProvidePerformanceFeedbackResponse1 = _generated_alias( + "ProvidePerformanceFeedbackResponse1", "ProvidePerformanceFeedbackResponse" +) +ProvidePerformanceFeedbackResponse2 = _generated_alias( + "ProvidePerformanceFeedbackResponse2", "ProvidePerformanceFeedbackResponse" +) +SyncAccountsResponse1 = _generated_alias("SyncAccountsResponse1", "SyncAccountsResponse") +SyncAccountsResponse2 = _generated_alias("SyncAccountsResponse2", "SyncAccountsResponse") +SyncAudiencesResponse1 = _generated_alias("SyncAudiencesResponse1", "SyncAudiencesResponse") +SyncAudiencesResponse2 = _generated_alias("SyncAudiencesResponse2", "SyncAudiencesResponse") +SyncCatalogsResponse1 = _generated_alias("SyncCatalogsResponse1", "SyncCatalogsResponse") +SyncCatalogsResponse2 = _generated_alias("SyncCatalogsResponse2", "SyncCatalogsResponse") +SyncCreativesResponse1 = _generated_alias("SyncCreativesResponse1", "SyncCreativesResponse") +SyncCreativesResponse2 = _generated_alias("SyncCreativesResponse2", "SyncCreativesResponse") +SyncEventSourcesResponse1 = _generated_alias( + "SyncEventSourcesResponse1", "SyncEventSourcesResponse" +) +SyncEventSourcesResponse2 = _generated_alias( + "SyncEventSourcesResponse2", "SyncEventSourcesResponse" +) +UpdateContentStandardsResponse1 = _generated_alias( + "UpdateContentStandardsResponse1", "UpdateContentStandardsResponse" +) +UpdateContentStandardsResponse2 = _generated_alias( + "UpdateContentStandardsResponse2", "UpdateContentStandardsResponse" +) +UpdateMediaBuyResponse1 = _generated_alias("UpdateMediaBuyResponse1", "UpdateMediaBuyResponse") +UpdateMediaBuyResponse2 = _generated_alias("UpdateMediaBuyResponse2", "UpdateMediaBuyResponse") +UpdateMediaBuyResponse3 = _generated_alias("UpdateMediaBuyResponse3", "UpdateMediaBuyResponse") +ValidateContentDeliveryResponse1 = _generated_alias( + "ValidateContentDeliveryResponse1", "ValidateContentDeliveryResponse" +) +ValidateContentDeliveryResponse2 = _generated_alias( + "ValidateContentDeliveryResponse2", "ValidateContentDeliveryResponse" ) # CatalogFieldBinding1 = catalog_group binding; give it a semantic name. diff --git a/src/adcp/types/generated_poc/account/get_account_financials_response.py b/src/adcp/types/generated_poc/account/get_account_financials_response.py index c9358d5a1..8fe8aa917 100644 --- a/src/adcp/types/generated_poc/account/get_account_financials_response.py +++ b/src/adcp/types/generated_poc/account/get_account_financials_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: account/get_account_financials_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/types/generated_poc/account/sync_accounts_response.py b/src/adcp/types/generated_poc/account/sync_accounts_response.py index b361f9829..bb84465d7 100644 --- a/src/adcp/types/generated_poc/account/sync_accounts_response.py +++ b/src/adcp/types/generated_poc/account/sync_accounts_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: account/sync_accounts_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/types/generated_poc/brand/acquire_rights_response.py b/src/adcp/types/generated_poc/brand/acquire_rights_response.py index d380e322b..d3d4d6f83 100644 --- a/src/adcp/types/generated_poc/brand/acquire_rights_response.py +++ b/src/adcp/types/generated_poc/brand/acquire_rights_response.py @@ -1,15 +1,17 @@ # generated by datamodel-codegen: # filename: brand/acquire_rights_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations +from ..core.version_envelope import AdcpVersionEnvelope + + from typing import Any, Literal, TypeAlias from pydantic import ConfigDict from ..core import error as error_1 -from ..core.version_envelope import AdcpVersionEnvelope class AcquireRightsResponse1(AdcpVersionEnvelope): diff --git a/src/adcp/types/generated_poc/brand/get_brand_identity_response.py b/src/adcp/types/generated_poc/brand/get_brand_identity_response.py index a7ff7f6c8..3b2ff8399 100644 --- a/src/adcp/types/generated_poc/brand/get_brand_identity_response.py +++ b/src/adcp/types/generated_poc/brand/get_brand_identity_response.py @@ -1,16 +1,15 @@ # generated by datamodel-codegen: # filename: brand/get_brand_identity_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from enum import Enum -from typing import Any, Annotated, TypeAlias +from typing import Any, Annotated from adcp.types.base import AdCPBaseModel from pydantic import AnyUrl, ConfigDict, Field, RootModel -from ..core import error as error_1 from ..core.version_envelope import AdcpVersionEnvelope @@ -77,6 +76,13 @@ def __getattr__(self, name: str) -> Any: return getattr(self.root, name) +from typing import TypeAlias + +from pydantic import ConfigDict + +from ..core import error as error_1 + + class GetBrandIdentityResponse1(AdcpVersionEnvelope): model_config = ConfigDict(extra='allow') brand_id: str diff --git a/src/adcp/types/generated_poc/brand/get_rights_response.py b/src/adcp/types/generated_poc/brand/get_rights_response.py index 93d7d95fe..370cf9a2c 100644 --- a/src/adcp/types/generated_poc/brand/get_rights_response.py +++ b/src/adcp/types/generated_poc/brand/get_rights_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: brand/get_rights_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/types/generated_poc/brand/update_rights_response.py b/src/adcp/types/generated_poc/brand/update_rights_response.py index f3e8f485d..3dff892e3 100644 --- a/src/adcp/types/generated_poc/brand/update_rights_response.py +++ b/src/adcp/types/generated_poc/brand/update_rights_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: brand/update_rights_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/types/generated_poc/brand/verify_brand_claim_response.py b/src/adcp/types/generated_poc/brand/verify_brand_claim_response.py index 5b2bdea72..f7077c911 100644 --- a/src/adcp/types/generated_poc/brand/verify_brand_claim_response.py +++ b/src/adcp/types/generated_poc/brand/verify_brand_claim_response.py @@ -1,6 +1,5 @@ # generated by datamodel-codegen: # filename: brand/verify_brand_claim_response.json -# timestamp: 2026-05-22T13:15:12+00:00 from __future__ import annotations @@ -9,8 +8,8 @@ from pydantic import ConfigDict, Field -from ..core import error as error_1 from ..core import context as context_1 +from ..core import error as error_1 from ..core import ext as ext_1 from ..core.protocol_envelope import ProtocolEnvelope from ..core.version_envelope import AdcpVersionEnvelope diff --git a/src/adcp/types/generated_poc/brand/verify_brand_claims_response.py b/src/adcp/types/generated_poc/brand/verify_brand_claims_response.py index b10dfdc06..618ec7787 100644 --- a/src/adcp/types/generated_poc/brand/verify_brand_claims_response.py +++ b/src/adcp/types/generated_poc/brand/verify_brand_claims_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: brand/verify_brand_claims_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations @@ -10,8 +10,8 @@ from adcp.types.base import AdCPBaseModel from pydantic import ConfigDict, Field, RootModel -from ..core import error as error_1 from ..core import context as context_1 +from ..core import error as error_1 from ..core import ext as ext_1 from ..core.protocol_envelope import ProtocolEnvelope from ..core.version_envelope import AdcpVersionEnvelope diff --git a/src/adcp/types/generated_poc/content_standards/calibrate_content_response.py b/src/adcp/types/generated_poc/content_standards/calibrate_content_response.py index 7ee97e25a..71ec0d285 100644 --- a/src/adcp/types/generated_poc/content_standards/calibrate_content_response.py +++ b/src/adcp/types/generated_poc/content_standards/calibrate_content_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: content_standards/calibrate_content_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/types/generated_poc/content_standards/get_content_standards_response.py b/src/adcp/types/generated_poc/content_standards/get_content_standards_response.py index 18c81805a..157214426 100644 --- a/src/adcp/types/generated_poc/content_standards/get_content_standards_response.py +++ b/src/adcp/types/generated_poc/content_standards/get_content_standards_response.py @@ -1,15 +1,17 @@ # generated by datamodel-codegen: # filename: content_standards/get_content_standards_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations +from ..core.version_envelope import AdcpVersionEnvelope + + from typing import TypeAlias from pydantic import ConfigDict from ..core import error as error_1 -from ..core.version_envelope import AdcpVersionEnvelope class GetContentStandardsResponse1(AdcpVersionEnvelope): diff --git a/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py b/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py index 5999c2cd4..1605f2230 100644 --- a/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +++ b/src/adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py @@ -1,15 +1,17 @@ # generated by datamodel-codegen: # filename: content_standards/get_media_buy_artifacts_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations +from ..core.version_envelope import AdcpVersionEnvelope + + from typing import Any, TypeAlias from pydantic import ConfigDict from ..core import error as error_1 -from ..core.version_envelope import AdcpVersionEnvelope from . import artifact as artifact_1 diff --git a/src/adcp/types/generated_poc/content_standards/validate_content_delivery_response.py b/src/adcp/types/generated_poc/content_standards/validate_content_delivery_response.py index fdd4d7929..072f240fd 100644 --- a/src/adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +++ b/src/adcp/types/generated_poc/content_standards/validate_content_delivery_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: content_standards/validate_content_delivery_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/types/generated_poc/creative/get_creative_features_response.py b/src/adcp/types/generated_poc/creative/get_creative_features_response.py index 311fbcdcd..999d88726 100644 --- a/src/adcp/types/generated_poc/creative/get_creative_features_response.py +++ b/src/adcp/types/generated_poc/creative/get_creative_features_response.py @@ -1,16 +1,18 @@ # generated by datamodel-codegen: # filename: creative/get_creative_features_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations -from typing import Any, TypeAlias +from ..core.version_envelope import AdcpVersionEnvelope + + +from typing import TypeAlias from pydantic import ConfigDict from ..core import creative_consumption as creative_consumption_1 from ..core import error as error_1 -from ..core.version_envelope import AdcpVersionEnvelope from . import creative_feature_result as creative_feature_result_1 diff --git a/src/adcp/types/generated_poc/creative/preview_creative_response.py b/src/adcp/types/generated_poc/creative/preview_creative_response.py index e0f4f6350..0ad619e02 100644 --- a/src/adcp/types/generated_poc/creative/preview_creative_response.py +++ b/src/adcp/types/generated_poc/creative/preview_creative_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: creative/preview_creative_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/types/generated_poc/creative/sync_creatives_response.py b/src/adcp/types/generated_poc/creative/sync_creatives_response.py index d9c0281a7..805e47bb8 100644 --- a/src/adcp/types/generated_poc/creative/sync_creatives_response.py +++ b/src/adcp/types/generated_poc/creative/sync_creatives_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: creative/sync_creatives_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/types/generated_poc/media_buy/build_creative_response.py b/src/adcp/types/generated_poc/media_buy/build_creative_response.py index 3b6d4cc9e..e61478399 100644 --- a/src/adcp/types/generated_poc/media_buy/build_creative_response.py +++ b/src/adcp/types/generated_poc/media_buy/build_creative_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: media_buy/build_creative_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py b/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py index c441b5db9..4c30fff3a 100644 --- a/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py +++ b/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py @@ -1,9 +1,12 @@ # generated by datamodel-codegen: # filename: media_buy/create_media_buy_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations +from ..core.version_envelope import AdcpVersionEnvelope + + # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. @@ -17,11 +20,9 @@ from ..core import ext as ext_1 from ..core import package as package_1 from ..core.protocol_envelope import ProtocolEnvelope -from ..core.version_envelope import AdcpVersionEnvelope from ..enums import media_buy_status as media_buy_status_1 from ..enums import task_status as task_status_1 - class CreateMediaBuyResponse1(AdcpVersionEnvelope): model_config = ConfigDict(extra='allow') media_buy_id: str diff --git a/src/adcp/types/generated_poc/media_buy/log_event_response.py b/src/adcp/types/generated_poc/media_buy/log_event_response.py index 074b5b014..18cb35405 100644 --- a/src/adcp/types/generated_poc/media_buy/log_event_response.py +++ b/src/adcp/types/generated_poc/media_buy/log_event_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: media_buy/log_event_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py b/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py index e42fcebc1..84b53d11f 100644 --- a/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +++ b/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: media_buy/provide_performance_feedback_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/types/generated_poc/media_buy/sync_audiences_response.py b/src/adcp/types/generated_poc/media_buy/sync_audiences_response.py index 936897ee7..cbc05b7a9 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_audiences_response.py +++ b/src/adcp/types/generated_poc/media_buy/sync_audiences_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: media_buy/sync_audiences_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/types/generated_poc/media_buy/sync_catalogs_response.py b/src/adcp/types/generated_poc/media_buy/sync_catalogs_response.py index db85ba149..9817b0046 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_catalogs_response.py +++ b/src/adcp/types/generated_poc/media_buy/sync_catalogs_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: media_buy/sync_catalogs_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/types/generated_poc/media_buy/sync_event_sources_response.py b/src/adcp/types/generated_poc/media_buy/sync_event_sources_response.py index 8deed575e..794ae3076 100644 --- a/src/adcp/types/generated_poc/media_buy/sync_event_sources_response.py +++ b/src/adcp/types/generated_poc/media_buy/sync_event_sources_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: media_buy/sync_event_sources_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py b/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py index 4276e5706..b15c14773 100644 --- a/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py +++ b/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py @@ -1,9 +1,12 @@ # generated by datamodel-codegen: # filename: media_buy/update_media_buy_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations +from ..core.version_envelope import AdcpVersionEnvelope + + # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. @@ -18,7 +21,6 @@ from ..core import ext as ext_1 from ..core import package as package_1 from ..core.protocol_envelope import ProtocolEnvelope -from ..core.version_envelope import AdcpVersionEnvelope from ..enums import media_buy_status as media_buy_status_1 from ..enums import task_status as task_status_1 diff --git a/src/adcp/types/generated_poc/signals/activate_signal_response.py b/src/adcp/types/generated_poc/signals/activate_signal_response.py index d15eb81b4..c9e9a5fee 100644 --- a/src/adcp/types/generated_poc/signals/activate_signal_response.py +++ b/src/adcp/types/generated_poc/signals/activate_signal_response.py @@ -1,13 +1,12 @@ # generated by datamodel-codegen: # filename: signals/activate_signal_response.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-05-24T21:27:05+00:00 from __future__ import annotations from ..core.version_envelope import AdcpVersionEnvelope - # Backward-compatible SDK response arms. Upstream beta 3 schemas collapse this # task response to the common protocol envelope, but the Python SDK keeps the # historical numbered variants as ergonomic construction/parsing aliases. diff --git a/src/adcp/utils/preview_cache.py b/src/adcp/utils/preview_cache.py index 17bc0aac1..04c0a7b24 100644 --- a/src/adcp/utils/preview_cache.py +++ b/src/adcp/utils/preview_cache.py @@ -6,7 +6,7 @@ import hashlib import logging -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING, Any, cast if TYPE_CHECKING: from adcp.client import ADCPClient @@ -353,7 +353,7 @@ async def add_preview_urls_to_products( # Add preview data to products result = [] for product in products: - product_dict = product.model_dump(exclude_none=True) + product_dict = cast(dict[str, Any], product.model_dump(exclude_none=True)) if product.product_id in product_previews: product_dict["format_previews"] = product_previews[product.product_id] result.append(product_dict) diff --git a/tests/test_code_generation.py b/tests/test_code_generation.py index 99a463045..be3e6d91f 100644 --- a/tests/test_code_generation.py +++ b/tests/test_code_generation.py @@ -10,6 +10,107 @@ from __future__ import annotations +def test_protocol_envelope_import_restored_for_manual_response_arms(): + """Manual response arms that inherit ProtocolEnvelope must keep the import.""" + from scripts.post_generate_fixes import _sync_protocol_envelope_import + + source = ( + "from __future__ import annotations\n\n" + "from ..core.version_envelope import AdcpVersionEnvelope\n\n" + "class CreateMediaBuyResponse3(AdcpVersionEnvelope, ProtocolEnvelope):\n" + " pass\n" + ) + + fixed = _sync_protocol_envelope_import(source) + + protocol_import = "from ..core.protocol_envelope import ProtocolEnvelope\n" + version_import = "from ..core.version_envelope import AdcpVersionEnvelope\n" + assert protocol_import in fixed + assert fixed.index(protocol_import) < fixed.index(version_import) + + +def test_aliases_do_not_use_eager_generated_fallbacks(): + """Avoid getattr defaults that eagerly evaluate stale generated names.""" + import re + from pathlib import Path + + source = Path("src/adcp/types/aliases.py").read_text() + unsafe_getattrs = re.findall( + r'getattr\(_g,\s*"[^"]+",\s*_g\.[A-Za-z_][A-Za-z0-9_]*\s*\)', + source, + flags=re.DOTALL, + ) + + assert unsafe_getattrs == [] + + +def test_consolidated_exports_include_annotated_type_aliases(tmp_path): + """Annotated TypeAlias response unions are part of the public generated API.""" + from scripts.consolidate_exports import extract_exports_from_module + + module_path = tmp_path / "example_response.py" + module_path.write_text( + "from typing import TypeAlias\n\n" + "class ExampleResponse1:\n" + " pass\n\n" + "ExampleResponse: TypeAlias = ExampleResponse1\n" + ) + + assert extract_exports_from_module(module_path) == {"ExampleResponse", "ExampleResponse1"} + + +def test_semantic_response_aliases_resolve_to_concrete_generated_arms(): + """Semantic aliases must not fall back to the whole response union.""" + from importlib import import_module + + import adcp.types as adcp_types + + expected_aliases = [ + ( + "ActivateSignalSuccessResponse", + "adcp.types.generated_poc.signals.activate_signal_response", + "ActivateSignalResponse1", + ), + ( + "AcquireRightsAcquiredResponse", + "adcp.types.generated_poc.brand.acquire_rights_response", + "AcquireRightsResponse1", + ), + ( + "GetBrandIdentitySuccessResponse", + "adcp.types.generated_poc.brand.get_brand_identity_response", + "GetBrandIdentityResponse1", + ), + ( + "GetContentStandardsSuccessResponse", + "adcp.types.generated_poc.content_standards.get_content_standards_response", + "GetContentStandardsResponse1", + ), + ( + "GetCreativeFeaturesSuccessResponse", + "adcp.types.generated_poc.creative.get_creative_features_response", + "GetCreativeFeaturesResponse1", + ), + ( + "GetMediaBuyArtifactsSuccessResponse", + "adcp.types.generated_poc.content_standards.get_media_buy_artifacts_response", + "GetMediaBuyArtifactsResponse1", + ), + ( + "CreateMediaBuySubmittedResponse", + "adcp.types.generated_poc.media_buy.create_media_buy_response", + "CreateMediaBuyResponse3", + ), + ] + + for alias_name, module_name, class_name in expected_aliases: + alias = getattr(adcp_types, alias_name) + expected = getattr(import_module(module_name), class_name) + + assert isinstance(alias, type), f"{alias_name} resolved to non-class {alias!r}" + assert alias is expected, f"{alias_name} no longer points at {module_name}.{class_name}" + + def test_generated_types_can_import(): """Test that generated types module can be imported.""" from adcp.types import _generated as generated @@ -220,7 +321,6 @@ def test_consumer_subclassability_contract(): except Exception as exc: failures.append(f"{type_name}: subclassing failed — {exc}") - assert failures == [], ( - "Consumer subclassability contract violated:\n" - + "\n".join(f" - {f}" for f in failures) + assert failures == [], "Consumer subclassability contract violated:\n" + "\n".join( + f" - {f}" for f in failures )