Skip to content

Commit 53034fd

Browse files
committed
Added Databricks Connect fixture
1 parent 7fea983 commit 53034fd

File tree

6 files changed

+65
-6
lines changed

6 files changed

+65
-6
lines changed

README.md

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ Loads environment variables specified in [`debug_env_name` fixture](#debug_env_n
185185
for local debugging in IDEs, otherwise allowing the tests to run with the default environment variables
186186
specified in the CI/CD pipeline.
187187

188-
See also [`env_or_skip`](#env_or_skip-fixture), [`ws`](#ws-fixture), [`debug_env_name`](#debug_env_name-fixture).
188+
See also [`env_or_skip`](#env_or_skip-fixture), [`ws`](#ws-fixture), [`debug_env_name`](#debug_env_name-fixture), [`is_in_debug`](#is_in_debug-fixture).
189189

190190

191191
[[back to top](#python-testing-for-databricks)]
@@ -204,7 +204,7 @@ def test_something(env_or_skip):
204204
assert token is not None
205205
```
206206

207-
See also [`make_udf`](#make_udf-fixture), [`sql_backend`](#sql_backend-fixture), [`debug_env`](#debug_env-fixture).
207+
See also [`make_udf`](#make_udf-fixture), [`sql_backend`](#sql_backend-fixture), [`debug_env`](#debug_env-fixture), [`is_in_debug`](#is_in_debug-fixture).
208208

209209

210210
[[back to top](#python-testing-for-databricks)]
@@ -227,7 +227,22 @@ def test_workspace_operations(ws):
227227
assert len(clusters) >= 0
228228
```
229229

230-
See also [`log_workspace_link`](#log_workspace_link-fixture), [`make_alert_permissions`](#make_alert_permissions-fixture), [`make_authorization_permissions`](#make_authorization_permissions-fixture), [`make_catalog`](#make_catalog-fixture), [`make_cluster`](#make_cluster-fixture), [`make_cluster_permissions`](#make_cluster_permissions-fixture), [`make_cluster_policy`](#make_cluster_policy-fixture), [`make_cluster_policy_permissions`](#make_cluster_policy_permissions-fixture), [`make_dashboard_permissions`](#make_dashboard_permissions-fixture), [`make_directory`](#make_directory-fixture), [`make_directory_permissions`](#make_directory_permissions-fixture), [`make_experiment`](#make_experiment-fixture), [`make_experiment_permissions`](#make_experiment_permissions-fixture), [`make_feature_table_permissions`](#make_feature_table_permissions-fixture), [`make_group`](#make_group-fixture), [`make_instance_pool`](#make_instance_pool-fixture), [`make_instance_pool_permissions`](#make_instance_pool_permissions-fixture), [`make_job`](#make_job-fixture), [`make_job_permissions`](#make_job_permissions-fixture), [`make_lakeview_dashboard_permissions`](#make_lakeview_dashboard_permissions-fixture), [`make_model`](#make_model-fixture), [`make_notebook`](#make_notebook-fixture), [`make_notebook_permissions`](#make_notebook_permissions-fixture), [`make_pipeline`](#make_pipeline-fixture), [`make_pipeline_permissions`](#make_pipeline_permissions-fixture), [`make_query`](#make_query-fixture), [`make_query_permissions`](#make_query_permissions-fixture), [`make_registered_model_permissions`](#make_registered_model_permissions-fixture), [`make_repo`](#make_repo-fixture), [`make_repo_permissions`](#make_repo_permissions-fixture), [`make_secret_scope`](#make_secret_scope-fixture), [`make_secret_scope_acl`](#make_secret_scope_acl-fixture), [`make_serving_endpoint`](#make_serving_endpoint-fixture), [`make_serving_endpoint_permissions`](#make_serving_endpoint_permissions-fixture), [`make_storage_credential`](#make_storage_credential-fixture), [`make_udf`](#make_udf-fixture), [`make_user`](#make_user-fixture), [`make_warehouse`](#make_warehouse-fixture), [`make_warehouse_permissions`](#make_warehouse_permissions-fixture), [`make_workspace_file_path_permissions`](#make_workspace_file_path_permissions-fixture), [`make_workspace_file_permissions`](#make_workspace_file_permissions-fixture), [`sql_backend`](#sql_backend-fixture), [`debug_env`](#debug_env-fixture), [`product_info`](#product_info-fixture).
230+
See also [`log_workspace_link`](#log_workspace_link-fixture), [`make_alert_permissions`](#make_alert_permissions-fixture), [`make_authorization_permissions`](#make_authorization_permissions-fixture), [`make_catalog`](#make_catalog-fixture), [`make_cluster`](#make_cluster-fixture), [`make_cluster_permissions`](#make_cluster_permissions-fixture), [`make_cluster_policy`](#make_cluster_policy-fixture), [`make_cluster_policy_permissions`](#make_cluster_policy_permissions-fixture), [`make_dashboard_permissions`](#make_dashboard_permissions-fixture), [`make_directory`](#make_directory-fixture), [`make_directory_permissions`](#make_directory_permissions-fixture), [`make_experiment`](#make_experiment-fixture), [`make_experiment_permissions`](#make_experiment_permissions-fixture), [`make_feature_table_permissions`](#make_feature_table_permissions-fixture), [`make_group`](#make_group-fixture), [`make_instance_pool`](#make_instance_pool-fixture), [`make_instance_pool_permissions`](#make_instance_pool_permissions-fixture), [`make_job`](#make_job-fixture), [`make_job_permissions`](#make_job_permissions-fixture), [`make_lakeview_dashboard_permissions`](#make_lakeview_dashboard_permissions-fixture), [`make_model`](#make_model-fixture), [`make_notebook`](#make_notebook-fixture), [`make_notebook_permissions`](#make_notebook_permissions-fixture), [`make_pipeline`](#make_pipeline-fixture), [`make_pipeline_permissions`](#make_pipeline_permissions-fixture), [`make_query`](#make_query-fixture), [`make_query_permissions`](#make_query_permissions-fixture), [`make_registered_model_permissions`](#make_registered_model_permissions-fixture), [`make_repo`](#make_repo-fixture), [`make_repo_permissions`](#make_repo_permissions-fixture), [`make_secret_scope`](#make_secret_scope-fixture), [`make_secret_scope_acl`](#make_secret_scope_acl-fixture), [`make_serving_endpoint`](#make_serving_endpoint-fixture), [`make_serving_endpoint_permissions`](#make_serving_endpoint_permissions-fixture), [`make_storage_credential`](#make_storage_credential-fixture), [`make_udf`](#make_udf-fixture), [`make_user`](#make_user-fixture), [`make_warehouse`](#make_warehouse-fixture), [`make_warehouse_permissions`](#make_warehouse_permissions-fixture), [`make_workspace_file_path_permissions`](#make_workspace_file_path_permissions-fixture), [`make_workspace_file_permissions`](#make_workspace_file_permissions-fixture), [`spark`](#spark-fixture), [`sql_backend`](#sql_backend-fixture), [`debug_env`](#debug_env-fixture), [`product_info`](#product_info-fixture).
231+
232+
233+
[[back to top](#python-testing-for-databricks)]
234+
235+
### `spark` fixture
236+
Get Databricks Connect Spark session. Requires `databricks-connect` package to be installed.
237+
238+
Usage:
239+
```python
240+
def test_databricks_connect(spark):
241+
rows = spark.sql("SELECT 1").collect()
242+
assert rows[0][0] == 1
243+
```
244+
245+
See also [`ws`](#ws-fixture).
231246

232247

233248
[[back to top](#python-testing-for-databricks)]
@@ -990,6 +1005,14 @@ HEX-encoded purge time suffix for test objects.
9901005
See also [`make_cluster_policy`](#make_cluster_policy-fixture), [`make_directory`](#make_directory-fixture), [`make_experiment`](#make_experiment-fixture), [`make_group`](#make_group-fixture), [`make_notebook`](#make_notebook-fixture), [`make_pipeline`](#make_pipeline-fixture), [`make_query`](#make_query-fixture), [`make_repo`](#make_repo-fixture), [`make_user`](#make_user-fixture), [`watchdog_remove_after`](#watchdog_remove_after-fixture).
9911006

9921007

1008+
[[back to top](#python-testing-for-databricks)]
1009+
1010+
### `is_in_debug` fixture
1011+
_No description yet._
1012+
1013+
See also [`debug_env`](#debug_env-fixture), [`env_or_skip`](#env_or_skip-fixture).
1014+
1015+
9931016
[[back to top](#python-testing-for-databricks)]
9941017

9951018
<!-- END FIXTURES -->
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import logging
2+
3+
from pytest import fixture, skip
4+
from databricks.sdk import WorkspaceClient
5+
6+
logger = logging.getLogger(__name__)
7+
8+
9+
@fixture
10+
def spark(ws: WorkspaceClient):
11+
"""
12+
Get Databricks Connect Spark session. Requires `databricks-connect` package to be installed.
13+
14+
Usage:
15+
```python
16+
def test_databricks_connect(spark):
17+
rows = spark.sql("SELECT 1").collect()
18+
assert rows[0][0] == 1
19+
```
20+
"""
21+
if not ws.config.cluster_id:
22+
skip("No cluster_id found in the environment")
23+
ws.clusters.ensure_cluster_is_running(ws.config.cluster_id)
24+
try:
25+
# pylint: disable-next=import-outside-toplevel
26+
from databricks.connect import ( # type: ignore[import-untyped]
27+
DatabricksSession,
28+
)
29+
30+
return DatabricksSession.builder.sdkConfig(ws.config).getOrCreate()
31+
except ImportError:
32+
skip("Please run `pip install databricks-connect`")
33+
return None

src/databricks/labs/pytester/fixtures/plugin.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,14 @@
5151
from databricks.labs.pytester.fixtures.ml import make_experiment, make_model, make_serving_endpoint
5252
from databricks.labs.pytester.fixtures.redash import make_query
5353
from databricks.labs.pytester.fixtures.watchdog import watchdog_remove_after, watchdog_purge_suffix
54+
from databricks.labs.pytester.fixtures.connect import spark
5455

5556
__all__ = [
5657
'debug_env_name',
5758
'debug_env',
5859
'env_or_skip',
5960
'ws',
61+
'spark',
6062
'sql_backend',
6163
'sql_exec',
6264
'sql_fetch_all',
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
def test_databricks_connect(spark):
2+
rows = spark.sql("SELECT 1").collect()
3+
assert rows[0][0] == 1

tests/unit/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
pytest_plugins = ['pytester']
1+
pytest_plugins = ['pytester']

tests/unit/fixtures/test_plugin.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,3 @@ def test_a_thing(pytester):
4545
pytester.makepyfile(INLINE)
4646
result = pytester.runpytest()
4747
result.assert_outcomes(passed=1)
48-
49-

0 commit comments

Comments
 (0)