Skip to content

Commit 9655153

Browse files
committed
Merge branch 'main' into feat/add-file-option-to-make-job
2 parents 7c2dd39 + 0975eb7 commit 9655153

File tree

6 files changed

+44
-26
lines changed

6 files changed

+44
-26
lines changed

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

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import logging
22
import random
33
import string
4+
from collections.abc import Callable, Generator
5+
from typing import Any, TypeVar
46

57
from pytest import fixture
68

@@ -55,7 +57,14 @@ def inner(k=16) -> str:
5557
return inner
5658

5759

58-
def factory(name, create, remove):
60+
T = TypeVar("T")
61+
62+
63+
def factory(
64+
name: str,
65+
create: Callable[..., T],
66+
remove: Callable[[T], None],
67+
) -> Generator[Callable[..., T], None, None]:
5968
"""
6069
Factory function for creating fixtures.
6170
@@ -95,13 +104,13 @@ def cleanup(scope):
95104
96105
yield from factory("secret scope", create, cleanup)
97106
"""
98-
cleanup = []
107+
cleanup: list[T] = []
99108

100-
def inner(**kwargs):
101-
some = create(**kwargs)
102-
_LOG.debug(f"added {name} fixture: {some}")
103-
cleanup.append(some)
104-
return some
109+
def inner(**kwargs: Any) -> T:
110+
out = create(**kwargs)
111+
_LOG.debug(f"added {name} fixture: {out}")
112+
cleanup.append(out)
113+
return out
105114

106115
yield inner
107116
_LOG.debug(f"clearing {len(cleanup)} {name} fixtures")

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

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import json
22
import warnings
3-
from collections.abc import Generator
3+
from collections.abc import Callable, Generator
44
from pathlib import Path
55
from unittest.mock import Mock
66

@@ -31,7 +31,7 @@ def make_cluster_policy(
3131
make_random,
3232
log_workspace_link,
3333
watchdog_purge_suffix,
34-
) -> Generator[CreatePolicyResponse, None, None]:
34+
) -> Generator[Callable[..., CreatePolicyResponse], None, None]:
3535
"""
3636
Create a Databricks cluster policy and clean it up after the test. Returns a function to create cluster policies,
3737
which returns `databricks.sdk.service.compute.CreatePolicyResponse` instance.
@@ -63,7 +63,9 @@ def create(*, name: str | None = None, **kwargs) -> CreatePolicyResponse:
6363

6464

6565
@fixture
66-
def make_cluster(ws, make_random, log_workspace_link, watchdog_remove_after) -> Generator[ClusterDetails, None, None]:
66+
def make_cluster(
67+
ws, make_random, log_workspace_link, watchdog_remove_after
68+
) -> Generator[Callable[..., Wait[ClusterDetails]], None, None]:
6769
"""
6870
Create a Databricks cluster, waits for it to start, and clean it up after the test.
6971
Returns a function to create clusters. You can get `cluster_id` attribute from the returned object.
@@ -127,7 +129,7 @@ def make_instance_pool(
127129
make_random,
128130
log_workspace_link,
129131
watchdog_remove_after,
130-
) -> Generator[CreateInstancePoolResponse, None, None]:
132+
) -> Generator[Callable[..., CreateInstancePoolResponse], None, None]:
131133
"""
132134
Create a Databricks instance pool and clean it up after the test. Returns a function to create instance pools.
133135
Use `instance_pool_id` attribute from the returned object to get an ID of the pool.
@@ -169,7 +171,7 @@ def make_job(
169171
make_workspace_file,
170172
log_workspace_link,
171173
watchdog_remove_after,
172-
) -> Generator[Job, None, None]:
174+
) -> Generator[Callable[..., Job], None, None]:
173175
"""
174176
Create a Databricks job and clean it up after the test. Returns a function to create jobs, that returns
175177
a `databricks.sdk.service.jobs.Job` instance.
@@ -265,7 +267,7 @@ def make_pipeline(
265267
make_notebook,
266268
watchdog_remove_after,
267269
watchdog_purge_suffix,
268-
) -> Generator[CreatePipelineResponse, None, None]:
270+
) -> Generator[Callable[..., CreatePipelineResponse], None, None]:
269271
"""
270272
Create Delta Live Table Pipeline and clean it up after the test. Returns a function to create pipelines.
271273
Results in a `databricks.sdk.service.pipelines.CreatePipelineResponse` instance.
@@ -309,7 +311,9 @@ def create(**kwargs) -> CreatePipelineResponse:
309311

310312

311313
@fixture
312-
def make_warehouse(ws, make_random, watchdog_remove_after) -> Generator[Wait[GetWarehouseResponse], None, None]:
314+
def make_warehouse(
315+
ws, make_random, watchdog_remove_after
316+
) -> Generator[Callable[..., Wait[GetWarehouseResponse]], None, None]:
313317
"""
314318
Create a Databricks warehouse and clean it up after the test. Returns a function to create warehouses.
315319

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import logging
22
import warnings
3-
from collections.abc import Generator
3+
from collections.abc import Callable, Generator
44
from datetime import timedelta
55

66
from pytest import fixture
@@ -140,7 +140,9 @@ def _double_check_group_in_listing() -> None:
140140
_double_check_group_in_listing()
141141

142142

143-
def _make_group(name: str, cfg: Config, interface, make_random, watchdog_purge_suffix) -> Generator[Group, None, None]:
143+
def _make_group(
144+
name: str, cfg: Config, interface, make_random, watchdog_purge_suffix
145+
) -> Generator[Callable[..., Group], None, None]:
144146
_not_specified = object()
145147

146148
@retried(on=[ResourceConflict], timeout=timedelta(seconds=30))

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from collections.abc import Generator, Callable
1+
from collections.abc import Callable, Generator
22

33
from pytest import fixture
44
from databricks.sdk.service._internal import Wait
@@ -9,7 +9,7 @@
99
ServedModelInputWorkloadSize,
1010
EndpointTag,
1111
)
12-
from databricks.sdk.service.ml import CreateExperimentResponse, ModelTag, GetModelResponse
12+
from databricks.sdk.service.ml import CreateExperimentResponse, ModelDatabricks, ModelTag
1313

1414
from databricks.labs.pytester.fixtures.baseline import factory
1515

@@ -21,7 +21,7 @@ def make_experiment(
2121
make_directory,
2222
log_workspace_link,
2323
watchdog_purge_suffix,
24-
) -> Generator[CreateExperimentResponse, None, None]:
24+
) -> Generator[Callable[..., CreateExperimentResponse], None, None]:
2525
"""
2626
Returns a function to create Databricks Experiments and clean them up after the test.
2727
The function returns a `databricks.sdk.service.ml.CreateExperimentResponse` object.
@@ -63,7 +63,7 @@ def create(
6363

6464

6565
@fixture
66-
def make_model(ws, make_random, watchdog_remove_after) -> Generator[Callable[..., GetModelResponse], None, None]:
66+
def make_model(ws, make_random, watchdog_remove_after) -> Generator[Callable[..., ModelDatabricks], None, None]:
6767
"""
6868
Returns a function to create Databricks Models and clean them up after the test.
6969
The function returns a `databricks.sdk.service.ml.GetModelResponse` object.
@@ -86,7 +86,7 @@ def test_models(make_group, make_model, make_registered_model_permissions):
8686
```
8787
"""
8888

89-
def create(*, model_name: str | None = None, **kwargs) -> GetModelResponse:
89+
def create(*, model_name: str | None = None, **kwargs) -> ModelDatabricks:
9090
if model_name is None:
9191
model_name = f"dummy-{make_random(4)}"
9292
remove_after_tag = ModelTag(key="RemoveAfter", value=watchdog_remove_after)
@@ -96,6 +96,7 @@ def create(*, model_name: str | None = None, **kwargs) -> GetModelResponse:
9696
kwargs["tags"].append(remove_after_tag)
9797
created_model = ws.model_registry.create_model(model_name, **kwargs)
9898
model = ws.model_registry.get_model(created_model.registered_model.name)
99+
assert model.registered_model_databricks is not None
99100
return model.registered_model_databricks
100101

101102
yield from factory("model", create, lambda item: ws.model_registry.delete_model(item.id))

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import io
22
import logging
33
import sys
4-
from collections.abc import Generator, Callable
4+
from collections.abc import Callable, Generator
55
from pathlib import Path
66
from unittest.mock import Mock
77

@@ -128,7 +128,9 @@ def create(
128128

129129

130130
@fixture
131-
def make_directory(ws: WorkspaceClient, make_random, watchdog_purge_suffix) -> Generator[WorkspacePath, None, None]:
131+
def make_directory(
132+
ws: WorkspaceClient, make_random, watchdog_purge_suffix
133+
) -> Generator[Callable[..., WorkspacePath], None, None]:
132134
"""
133135
Returns a function to create Databricks Workspace Folders and clean them up after the test.
134136
The function returns [`os.PathLike` object](https://github.com/databrickslabs/blueprint?tab=readme-ov-file#python-native-pathlibpath-like-interfaces).
@@ -159,7 +161,7 @@ def create(*, path: str | Path | None = None) -> WorkspacePath:
159161

160162

161163
@fixture
162-
def make_repo(ws, make_random, watchdog_purge_suffix) -> Generator[RepoInfo, None, None]:
164+
def make_repo(ws, make_random, watchdog_purge_suffix) -> Generator[Callable[..., RepoInfo], None, None]:
163165
"""
164166
Returns a function to create Databricks Repos and clean them up after the test.
165167
The function returns a `databricks.sdk.service.workspace.RepoInfo` object.

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import json
2-
from collections.abc import Generator
2+
from collections.abc import Callable, Generator
33

44
from pytest import fixture
55
from databricks.sdk.service.sql import LegacyQuery
@@ -14,7 +14,7 @@ def make_query(
1414
make_random,
1515
log_workspace_link,
1616
watchdog_remove_after,
17-
) -> Generator[LegacyQuery, None, None]:
17+
) -> Generator[Callable[..., LegacyQuery], None, None]:
1818
"""
1919
Create a query and remove it after the test is done. Returns the `databricks.sdk.service.sql.LegacyQuery` object.
2020

0 commit comments

Comments
 (0)