@@ -240,19 +240,22 @@ def add_and_trim_labels(job_config):
240240 )
241241
242242
243- def publish_bq_event (event ):
244- if isinstance (event , google .cloud .bigquery ._job_helpers .QueryFinishedEvent ):
245- bf_event = bigframes .core .events .BigQueryFinishedEvent .from_bqclient (event )
246- elif isinstance (event , google .cloud .bigquery ._job_helpers .QueryReceivedEvent ):
247- bf_event = bigframes .core .events .BigQueryReceivedEvent .from_bqclient (event )
248- elif isinstance (event , google .cloud .bigquery ._job_helpers .QueryRetryEvent ):
249- bf_event = bigframes .core .events .BigQueryRetryEvent .from_bqclient (event )
250- elif isinstance (event , google .cloud .bigquery ._job_helpers .QuerySentEvent ):
251- bf_event = bigframes .core .events .BigQuerySentEvent .from_bqclient (event )
252- else :
253- bf_event = bigframes .core .events .BigQueryUnknownEvent (event )
243+ def create_bq_event_callback (publisher ):
244+ def publish_bq_event (event ):
245+ if isinstance (event , google .cloud .bigquery ._job_helpers .QueryFinishedEvent ):
246+ bf_event = bigframes .core .events .BigQueryFinishedEvent .from_bqclient (event )
247+ elif isinstance (event , google .cloud .bigquery ._job_helpers .QueryReceivedEvent ):
248+ bf_event = bigframes .core .events .BigQueryReceivedEvent .from_bqclient (event )
249+ elif isinstance (event , google .cloud .bigquery ._job_helpers .QueryRetryEvent ):
250+ bf_event = bigframes .core .events .BigQueryRetryEvent .from_bqclient (event )
251+ elif isinstance (event , google .cloud .bigquery ._job_helpers .QuerySentEvent ):
252+ bf_event = bigframes .core .events .BigQuerySentEvent .from_bqclient (event )
253+ else :
254+ bf_event = bigframes .core .events .BigQueryUnknownEvent (event )
254255
255- bigframes .core .events .publisher .send (bf_event )
256+ publisher .send (bf_event )
257+
258+ return publish_bq_event
256259
257260
258261@overload
@@ -266,6 +269,7 @@ def start_query_with_client(
266269 timeout : Optional [float ],
267270 metrics : Optional [bigframes .session .metrics .ExecutionMetrics ],
268271 query_with_job : Literal [True ],
272+ publisher : bigframes .core .events .Publisher ,
269273) -> Tuple [google .cloud .bigquery .table .RowIterator , bigquery .QueryJob ]:
270274 ...
271275
@@ -281,6 +285,7 @@ def start_query_with_client(
281285 timeout : Optional [float ],
282286 metrics : Optional [bigframes .session .metrics .ExecutionMetrics ],
283287 query_with_job : Literal [False ],
288+ publisher : bigframes .core .events .Publisher ,
284289) -> Tuple [google .cloud .bigquery .table .RowIterator , Optional [bigquery .QueryJob ]]:
285290 ...
286291
@@ -297,6 +302,7 @@ def start_query_with_client(
297302 metrics : Optional [bigframes .session .metrics .ExecutionMetrics ],
298303 query_with_job : Literal [True ],
299304 job_retry : google .api_core .retry .Retry ,
305+ publisher : bigframes .core .events .Publisher ,
300306) -> Tuple [google .cloud .bigquery .table .RowIterator , bigquery .QueryJob ]:
301307 ...
302308
@@ -313,6 +319,7 @@ def start_query_with_client(
313319 metrics : Optional [bigframes .session .metrics .ExecutionMetrics ],
314320 query_with_job : Literal [False ],
315321 job_retry : google .api_core .retry .Retry ,
322+ publisher : bigframes .core .events .Publisher ,
316323) -> Tuple [google .cloud .bigquery .table .RowIterator , Optional [bigquery .QueryJob ]]:
317324 ...
318325
@@ -332,6 +339,7 @@ def start_query_with_client(
332339 # https://github.com/googleapis/python-bigquery/pull/2256 merged, likely
333340 # version 3.36.0 or later.
334341 job_retry : google .api_core .retry .Retry = third_party_gcb_retry .DEFAULT_JOB_RETRY ,
342+ publisher : bigframes .core .events .Publisher ,
335343) -> Tuple [google .cloud .bigquery .table .RowIterator , Optional [bigquery .QueryJob ]]:
336344 """
337345 Starts query job and waits for results.
@@ -350,7 +358,7 @@ def start_query_with_client(
350358 project = project ,
351359 api_timeout = timeout ,
352360 job_retry = job_retry ,
353- callback = publish_bq_event ,
361+ callback = create_bq_event_callback ( publisher ) ,
354362 )
355363 if metrics is not None :
356364 metrics .count_job_stats (row_iterator = results_iterator )
@@ -370,7 +378,7 @@ def start_query_with_client(
370378 raise
371379
372380 if not query_job .configuration .dry_run :
373- bigframes . core . events . publisher .send (
381+ publisher .send (
374382 bigframes .core .events .BigQuerySentEvent (
375383 sql ,
376384 billing_project = query_job .project ,
@@ -381,7 +389,7 @@ def start_query_with_client(
381389 )
382390 results_iterator = query_job .result ()
383391 if not query_job .configuration .dry_run :
384- bigframes . core . events . publisher .send (
392+ publisher .send (
385393 bigframes .core .events .BigQueryFinishedEvent (
386394 billing_project = query_job .project ,
387395 location = query_job .location ,
@@ -436,6 +444,8 @@ def create_bq_dataset_reference(
436444 bq_client : bigquery .Client ,
437445 location : Optional [str ] = None ,
438446 project : Optional [str ] = None ,
447+ * ,
448+ publisher : bigframes .core .events .Publisher ,
439449) -> bigquery .DatasetReference :
440450 """Create and identify dataset(s) for temporary BQ resources.
441451
@@ -467,6 +477,7 @@ def create_bq_dataset_reference(
467477 timeout = None ,
468478 metrics = None ,
469479 query_with_job = True ,
480+ publisher = publisher ,
470481 )
471482
472483 # The anonymous dataset is used by BigQuery to write query results and
0 commit comments