@@ -79,6 +79,7 @@ def is_adcp_success(response: Any) -> bool:
7979 CalibrateContentErrorResponse ,
8080 CalibrateContentSuccessResponse ,
8181 CreateMediaBuyErrorResponse ,
82+ CreateMediaBuySubmittedResponse ,
8283 CreateMediaBuySuccessResponse ,
8384 GetAccountFinancialsErrorResponse ,
8485 GetAccountFinancialsSuccessResponse ,
@@ -103,7 +104,9 @@ def is_adcp_success(response: Any) -> bool:
103104)
104105
105106# Type aliases for response unions
106- CreateMediaBuyResponse = CreateMediaBuySuccessResponse | CreateMediaBuyErrorResponse
107+ CreateMediaBuyResponse = (
108+ CreateMediaBuySuccessResponse | CreateMediaBuyErrorResponse | CreateMediaBuySubmittedResponse
109+ )
107110UpdateMediaBuyResponse = UpdateMediaBuySuccessResponse | UpdateMediaBuyErrorResponse
108111ActivateSignalResponse = ActivateSignalSuccessResponse | ActivateSignalErrorResponse
109112BuildCreativeResponse = BuildCreativeSuccessResponse | BuildCreativeErrorResponse
@@ -116,22 +119,49 @@ def is_adcp_success(response: Any) -> bool:
116119
117120# --- Create Media Buy ---
118121
122+
123+ def is_create_media_buy_submitted (
124+ response : CreateMediaBuyResponse ,
125+ ) -> TypeGuard [CreateMediaBuySubmittedResponse ]:
126+ """Check if a CreateMediaBuyResponse is the async submitted envelope.
127+
128+ The submitted branch carries ``status == 'submitted'`` and a ``task_id``
129+ the buyer uses to poll ``tasks/get`` (or correlate with push-notification
130+ callbacks). It is neither a synchronous success nor a terminal error.
131+ """
132+ return getattr (response , "status" , None ) == "submitted" and hasattr (response , "task_id" )
133+
134+
119135def is_create_media_buy_success (
120136 response : CreateMediaBuyResponse ,
121137) -> TypeGuard [CreateMediaBuySuccessResponse ]:
122- """Check if a CreateMediaBuyResponse is a success."""
138+ """Check if a CreateMediaBuyResponse is a synchronous success.
139+
140+ Returns False for the submitted (async) envelope — use
141+ ``is_create_media_buy_submitted`` for that branch.
142+ """
143+ if is_create_media_buy_submitted (response ):
144+ return False
123145 return not is_adcp_error (response )
124146
125147
126148def is_create_media_buy_error (
127149 response : CreateMediaBuyResponse ,
128150) -> TypeGuard [CreateMediaBuyErrorResponse ]:
129- """Check if a CreateMediaBuyResponse is an error."""
151+ """Check if a CreateMediaBuyResponse is an error.
152+
153+ Returns False for the submitted (async) envelope, even if it carries
154+ advisory (non-blocking) errors. Use ``is_create_media_buy_submitted``
155+ for that branch.
156+ """
157+ if is_create_media_buy_submitted (response ):
158+ return False
130159 return is_adcp_error (response )
131160
132161
133162# --- Update Media Buy ---
134163
164+
135165def is_update_media_buy_success (
136166 response : UpdateMediaBuyResponse ,
137167) -> TypeGuard [UpdateMediaBuySuccessResponse ]:
@@ -148,6 +178,7 @@ def is_update_media_buy_error(
148178
149179# --- Activate Signal ---
150180
181+
151182def is_activate_signal_success (
152183 response : ActivateSignalResponse ,
153184) -> TypeGuard [ActivateSignalSuccessResponse ]:
@@ -164,6 +195,7 @@ def is_activate_signal_error(
164195
165196# --- Build Creative ---
166197
198+
167199def is_build_creative_success (
168200 response : BuildCreativeResponse ,
169201) -> TypeGuard [BuildCreativeSuccessResponse ]:
@@ -180,6 +212,7 @@ def is_build_creative_error(
180212
181213# --- Sync Creatives ---
182214
215+
183216def is_sync_creatives_success (
184217 response : SyncCreativesResponse ,
185218) -> TypeGuard [SyncCreativesSuccessResponse ]:
@@ -196,6 +229,7 @@ def is_sync_creatives_error(
196229
197230# --- Performance Feedback ---
198231
232+
199233def is_performance_feedback_success (
200234 response : ProvidePerformanceFeedbackSuccessResponse | ProvidePerformanceFeedbackErrorResponse ,
201235) -> TypeGuard [ProvidePerformanceFeedbackSuccessResponse ]:
@@ -212,6 +246,7 @@ def is_performance_feedback_error(
212246
213247# --- Sync Accounts ---
214248
249+
215250def is_sync_accounts_success (
216251 response : SyncAccountsResponse ,
217252) -> TypeGuard [SyncAccountsSuccessResponse ]:
@@ -228,6 +263,7 @@ def is_sync_accounts_error(
228263
229264# --- Log Event ---
230265
266+
231267def is_log_event_success (
232268 response : LogEventResponse ,
233269) -> TypeGuard [LogEventSuccessResponse ]:
@@ -244,6 +280,7 @@ def is_log_event_error(
244280
245281# --- Sync Catalogs ---
246282
283+
247284def is_sync_catalogs_success (
248285 response : SyncCatalogsResponse ,
249286) -> TypeGuard [SyncCatalogsSuccessResponse ]:
@@ -260,6 +297,7 @@ def is_sync_catalogs_error(
260297
261298# --- Get Account Financials ---
262299
300+
263301def is_get_account_financials_success (
264302 response : GetAccountFinancialsSuccessResponse | GetAccountFinancialsErrorResponse ,
265303) -> TypeGuard [GetAccountFinancialsSuccessResponse ]:
@@ -276,6 +314,7 @@ def is_get_account_financials_error(
276314
277315# --- Content Standards ---
278316
317+
279318def is_calibrate_content_success (
280319 response : CalibrateContentSuccessResponse | CalibrateContentErrorResponse ,
281320) -> TypeGuard [CalibrateContentSuccessResponse ]:
@@ -292,6 +331,7 @@ def is_validate_content_delivery_success(
292331
293332# --- Creative Features ---
294333
334+
295335def is_get_creative_features_success (
296336 response : GetCreativeFeaturesSuccessResponse | GetCreativeFeaturesErrorResponse ,
297337) -> TypeGuard [GetCreativeFeaturesSuccessResponse ]:
@@ -310,6 +350,7 @@ def is_get_creative_features_success(
310350 # Media buy guards
311351 "is_create_media_buy_success" ,
312352 "is_create_media_buy_error" ,
353+ "is_create_media_buy_submitted" ,
313354 "is_update_media_buy_success" ,
314355 "is_update_media_buy_error" ,
315356 # Signal guards
0 commit comments