@@ -98,7 +98,45 @@ def __call__(self) -> Dict[str, str]:
9898
9999
100100class PositContentCredentialsStrategy (CredentialsStrategy ):
101- """CredentialsStrategy implementation which returns a PositContentCredentialsProvider when called."""
101+ """`CredentialsStrategy` implementation which supports interacting with Service Account OAuth integrations on Connect.
102+
103+ This strategy callable class returns a `PositContentCredentialsProvider` when hosted on Connect, and
104+ its `local_strategy` strategy otherwise.
105+
106+ Example
107+ -------
108+ from posit.connect.external.databricks import PositContentCredentialsStrategy
109+
110+ import pandas as pd
111+ import requests
112+
113+ from databricks import sql
114+ from databricks.sdk.core import ApiClient, Config, databricks_cli
115+ from databricks.sdk.service.iam import CurrentUserAPI
116+
117+ # env vars
118+ DATABRICKS_HOST = "<REDACTED>"
119+ DATABRICKS_HOST_URL = f"https://{DATABRICKS_HOST}"
120+ SQL_HTTP_PATH = "<REDACTED>"
121+
122+ posit_strategy = PositContentCredentialsStrategy(local_strategy=databricks_cli)
123+
124+ cfg = Config(host=DATABRICKS_HOST_URL, credentials_strategy=posit_strategy)
125+
126+ databricks_user_info = CurrentUserAPI(ApiClient(cfg)).me()
127+ print(f"Hello, {databricks_user_info.display_name}!")
128+
129+ query = "SELECT * FROM samples.nyctaxi.trips LIMIT 10;"
130+ with sql.connect(
131+ server_hostname=DATABRICKS_HOST,
132+ http_path=SQL_HTTP_PATH,
133+ credentials_provider=posit_strategy.sql_credentials_provider(cfg),
134+ ) as connection:
135+ with connection.cursor() as cursor:
136+ cursor.execute(query)
137+ rows = cursor.fetchall()
138+ print(pd.DataFrame([row.asDict() for row in rows]))
139+ """
102140
103141 def __init__ (
104142 self ,
@@ -135,7 +173,58 @@ def __call__(self, *args, **kwargs) -> CredentialsProvider:
135173
136174
137175class PositCredentialsStrategy (CredentialsStrategy ):
138- """CredentialsStrategy implementation which returns a PositContentCredentialsProvider when called."""
176+ """`CredentialsStrategy` implementation which supports interacting with Viewer OAuth integrations on Connect.
177+
178+ This strategy callable class returns a `PositCredentialsProvider` when hosted on Connect, and
179+ its `local_strategy` strategy otherwise.
180+
181+ Example
182+ -------
183+ import os
184+
185+ import pandas as pd
186+ from databricks import sql
187+ from databricks.sdk.core import ApiClient, Config, databricks_cli
188+ from databricks.sdk.service.iam import CurrentUserAPI
189+ from posit.connect.external.databricks import PositCredentialsStrategy
190+ from shiny import App, Inputs, Outputs, Session, render, ui
191+
192+ # env vars
193+ DATABRICKS_HOST = "<REDACTED>"
194+ DATABRICKS_HOST_URL = f"https://{DATABRICKS_HOST}"
195+ SQL_HTTP_PATH = "<REDACTED>"
196+
197+ app_ui = ui.page_fluid(ui.output_text("text"), ui.output_data_frame("result"))
198+
199+ def server(i: Inputs, o: Outputs, session: Session):
200+ session_token = session.http_conn.headers.get("Posit-Connect-User-Session-Token")
201+ posit_strategy = PositCredentialsStrategy(
202+ local_strategy=databricks_cli, user_session_token=session_token
203+ )
204+ cfg = Config(host=DATABRICKS_HOST_URL, credentials_strategy=posit_strategy)
205+
206+ @render.data_frame
207+ def result():
208+ query = "SELECT * FROM samples.nyctaxi.trips LIMIT 10;"
209+
210+ with sql.connect(
211+ server_hostname=DATABRICKS_HOST,
212+ http_path=SQL_HTTP_PATH,
213+ credentials_provider=posit_strategy.sql_credentials_provider(cfg),
214+ ) as connection:
215+ with connection.cursor() as cursor:
216+ cursor.execute(query)
217+ rows = cursor.fetchall()
218+ df = pd.DataFrame(rows, columns=[col[0] for col in cursor.description])
219+ return df
220+
221+ @render.text
222+ def text():
223+ databricks_user_info = CurrentUserAPI(ApiClient(cfg)).me()
224+ return f"Hello, {databricks_user_info.display_name}!"
225+
226+ app = App(app_ui, server)
227+ """
139228
140229 def __init__ (
141230 self ,
0 commit comments