Skip to content

Commit 960da40

Browse files
authored
Add create_notebook_client in clients.py (#977)
1 parent 6fb49b1 commit 960da40

File tree

3 files changed

+29
-14
lines changed

3 files changed

+29
-14
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
kind: Fixes
2+
body: Add create_notebook_client
3+
time: 2025-04-04T21:56:40.174432349Z
4+
custom:
5+
Author: jialuoo
6+
Issue: "977"

dbt-bigquery/src/dbt/adapters/bigquery/clients.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1+
from typing import Optional
2+
13
from google.api_core.client_info import ClientInfo
24
from google.api_core.client_options import ClientOptions
35
from google.auth.exceptions import DefaultCredentialsError
6+
from google.cloud import aiplatform_v1
47
from google.cloud.bigquery import Client as BigQueryClient, DEFAULT_RETRY as BQ_DEFAULT_RETRY
58
from google.cloud.dataproc_v1 import BatchControllerClient, JobControllerClient
69
from google.cloud.storage import Client as StorageClient
710
from google.cloud.storage.retry import DEFAULT_RETRY as GCS_DEFAULT_RETRY
11+
from google.oauth2.credentials import Credentials as GoogleCredentials
812

913
from dbt.adapters.events.logging import AdapterLogger
1014

@@ -69,3 +73,15 @@ def _create_bigquery_client(credentials: BigQueryCredentials) -> BigQueryClient:
6973

7074
def _dataproc_endpoint(credentials: BigQueryCredentials) -> str:
7175
return f"{credentials.compute_region}-dataproc.googleapis.com:443"
76+
77+
78+
def create_notebook_client(
79+
credentials: GoogleCredentials, region: Optional[str]
80+
) -> aiplatform_v1.NotebookServiceClient:
81+
api_endpoint = f"{region}-aiplatform.googleapis.com"
82+
notebook_client = aiplatform_v1.NotebookServiceClient(
83+
credentials=credentials,
84+
client_options=ClientOptions(api_endpoint),
85+
)
86+
87+
return notebook_client

dbt-bigquery/src/dbt/adapters/bigquery/python_submissions.py

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
create_dataproc_batch_controller_client,
1111
create_dataproc_job_controller_client,
1212
create_gcs_client,
13+
create_notebook_client,
1314
)
1415
from dbt.adapters.bigquery.credentials import (
1516
BigQueryConnectionMethod,
@@ -19,7 +20,6 @@
1920
from dbt.adapters.bigquery.retry import RetryFactory
2021
from dbt.adapters.events.logging import AdapterLogger
2122
from dbt_common.exceptions import DbtRuntimeError
22-
from google.api_core.client_options import ClientOptions
2323

2424
from google.auth.transport.requests import Request
2525
from google.cloud import aiplatform_v1
@@ -201,12 +201,7 @@ def __init__(self, parsed_model: Dict, credentials: BigQueryCredentials) -> None
201201
self._model_name = parsed_model["alias"]
202202
self._connection_method = credentials.method
203203
self._GoogleCredentials = create_google_credentials(credentials)
204-
205-
# TODO(jialuo): Add a function in clients.py for it.
206-
self._ai_platform_client = aiplatform_v1.NotebookServiceClient(
207-
credentials=self._GoogleCredentials,
208-
client_options=ClientOptions(api_endpoint=f"{self._region}-aiplatform.googleapis.com"),
209-
)
204+
self._notebook_client = create_notebook_client(self._GoogleCredentials, self._region)
210205
self._notebook_template_id = parsed_model["config"].get("notebook_template_id")
211206
self._packages = parsed_model["config"].get("packages", [])
212207
retry = RetryFactory(credentials)
@@ -231,7 +226,7 @@ def _get_notebook_template_id(self) -> str:
231226
parent=f"projects/{self._project}/locations/{self._region}",
232227
filter="notebookRuntimeType = ONE_CLICK",
233228
)
234-
page_result = self._ai_platform_client.list_notebook_runtime_templates(request=request)
229+
page_result = self._notebook_client.list_notebook_runtime_templates(request=request)
235230

236231
try:
237232
# Check if a default runtime template is available and applicable.
@@ -280,9 +275,7 @@ def _create_notebook_template(self) -> str:
280275
notebook_runtime_template=template,
281276
)
282277

283-
operation = self._ai_platform_client.create_notebook_runtime_template(
284-
request=create_request
285-
)
278+
operation = self._notebook_client.create_notebook_runtime_template(request=create_request)
286279
response = operation.result()
287280

288281
return self._extract_template_id(response.name)
@@ -434,10 +427,10 @@ def _submit_bigframes_job(
434427
)
435428

436429
try:
437-
res = self._ai_platform_client.create_notebook_execution_job(request=request).result(
430+
res = self._notebook_client.create_notebook_execution_job(request=request).result(
438431
timeout=self._polling_retry.timeout
439432
)
440-
retrieved_job = self._ai_platform_client.get_notebook_execution_job(name=res.name)
433+
retrieved_job = self._notebook_client.get_notebook_execution_job(name=res.name)
441434
except TimeoutError as timeout_error:
442435
raise TimeoutError(
443436
f"The dbt operation encountered a timeout: {timeout_error}\n"
@@ -460,7 +453,7 @@ def _submit_bigframes_job(
460453
f"The colab notebook execution job '{retrieved_job.name}' finished with unexpected state: {retrieved_job.job_state.name}"
461454
)
462455

463-
return self._ai_platform_client.get_notebook_execution_job(name=res.name)
456+
return self._notebook_client.get_notebook_execution_job(name=res.name)
464457

465458

466459
def _install_packages(packages: list[str]) -> None:

0 commit comments

Comments
 (0)