Skip to content

Commit 9c2cd7b

Browse files
authored
Fix nightly CI builds (#40)
1 parent 47a00ec commit 9c2cd7b

File tree

6 files changed

+50
-67
lines changed

6 files changed

+50
-67
lines changed

.github/workflows/no-cheat.yml

Lines changed: 0 additions & 32 deletions
This file was deleted.

CHANGELOG.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,3 @@
3939
Dependency updates:
4040

4141
* Updated pytest requirement from ~=8.1.0 to ~=8.3.3 ([#31](https://github.com/databrickslabs/pytester/pull/31)).
42-
43-
## 0.0.0
44-
45-
Initial release

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Python Testing for Databricks
22

3+
[![python](https://img.shields.io/badge/python-3.10,%203.11,%203.12-green)](https://github.com/databrickslabs/pytester/actions/workflows/push.yml)
4+
[![lines of code](https://tokei.rs/b1/github/databrickslabs/pytester)]([https://github.com/databrickslabs/pytester](https://github.com/databrickslabs/pytester))
5+
6+
37
<!-- TOC -->
48
* [Python Testing for Databricks](#python-testing-for-databricks)
59
* [Ecosystem](#ecosystem)
@@ -61,6 +65,17 @@
6165
* [Project Support](#project-support)
6266
<!-- TOC -->
6367

68+
## Installation
69+
70+
Add a `databricks-labs-pytester` dependency to your `pyproject.toml` file (or legacy `requirements.txt` file). You can
71+
also install it directly from the command line:
72+
73+
```shell
74+
pip install databricks-labs-pytester
75+
```
76+
77+
[[back to top](#python-testing-for-databricks)]
78+
6479
## Ecosystem
6580

6681
Built on top of [Databricks SDK for Python](https://github.com/databricks/databricks-sdk-py), this library is part of the Databricks Labs Python ecosystem, which includes the following projects:

pyproject.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ classifiers = [
4848
]
4949

5050
dependencies = [
51-
"databricks-sdk~=0.30",
52-
"databricks-labs-lsql~=0.10",
53-
"pytest~=8.3.3",
51+
"databricks-sdk>=0.30",
52+
"databricks-labs-lsql>=0.10",
53+
"pytest>=8.3",
5454
]
5555

5656
[project.entry-points.pytest11]

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

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import pytest
22
from databricks.sdk.errors import InvalidParameterValue
3-
from databricks.sdk.service import sql, iam
3+
from databricks.sdk.service import iam
44
from databricks.sdk.service.iam import PermissionLevel
5-
from databricks.sdk.service.sql import GetResponse
5+
from databricks.sdk.service.sql import GetResponse, ObjectTypePlural, AccessControl
6+
from databricks.sdk.service.sql import PermissionLevel as RedashPermissionLevel
67

78
from databricks.labs.pytester.fixtures.baseline import factory
89

@@ -31,18 +32,18 @@ def __repr__(self):
3132

3233

3334
class _RedashPermissionsChange:
34-
def __init__(self, object_id: str, before: list[sql.AccessControl], after: list[sql.AccessControl]):
35+
def __init__(self, object_id: str, before: list[AccessControl], after: list[AccessControl]):
3536
self.object_id = object_id
3637
self.before = before
3738
self.after = after
3839

3940
@staticmethod
40-
def _principal(acr: sql.AccessControl) -> str:
41+
def _principal(acr: AccessControl) -> str:
4142
if acr.user_name is not None:
4243
return f"user_name {acr.user_name}"
4344
return f"group_name {acr.group_name}"
4445

45-
def _list(self, acl: list[sql.AccessControl]):
46+
def _list(self, acl: list[AccessControl]):
4647
return ", ".join(f"{self._principal(_)} {_.permission_level.value}" for _ in acl)
4748

4849
def __repr__(self):
@@ -132,11 +133,11 @@ def remove(change: _PermissionsChange):
132133

133134
def _make_redash_permissions_factory(name, resource_type, levels, id_retriever):
134135
def _non_inherited(acl: GetResponse):
135-
out: list[sql.AccessControl] = []
136+
out: list[AccessControl] = []
136137
assert acl.access_control_list is not None
137138
for access_control in acl.access_control_list:
138139
out.append(
139-
sql.AccessControl(
140+
AccessControl(
140141
permission_level=access_control.permission_level,
141142
group_name=access_control.group_name,
142143
user_name=access_control.user_name,
@@ -148,10 +149,10 @@ def _make_permissions(ws):
148149
def create(
149150
*,
150151
object_id: str,
151-
permission_level: sql.PermissionLevel | None = None,
152+
permission_level: RedashPermissionLevel | None = None,
152153
group_name: str | None = None,
153154
user_name: str | None = None,
154-
access_control_list: list[sql.AccessControl] | None = None,
155+
access_control_list: list[AccessControl] | None = None,
155156
):
156157
nothing_specified = permission_level is None and access_control_list is None
157158
both_specified = permission_level is not None and access_control_list is not None
@@ -172,14 +173,14 @@ def create(
172173
access_control_list = []
173174
if group_name is not None:
174175
access_control_list.append(
175-
sql.AccessControl(
176+
AccessControl(
176177
group_name=group_name,
177178
permission_level=permission_level,
178179
)
179180
)
180181
if user_name is not None:
181182
access_control_list.append(
182-
sql.AccessControl(
183+
AccessControl(
183184
user_name=user_name,
184185
permission_level=permission_level,
185186
)
@@ -190,7 +191,9 @@ def create(
190191

191192
def remove(change: _RedashPermissionsChange):
192193
ws.dbsql_permissions.set(
193-
sql.ObjectTypePlural(resource_type), change.object_id, access_control_list=change.before
194+
ObjectTypePlural(resource_type),
195+
change.object_id,
196+
access_control_list=change.before,
194197
)
195198

196199
yield from factory(f"{name} permissions", create, remove)
@@ -371,38 +374,38 @@ def _path(ws, path):
371374
make_dashboard_permissions = pytest.fixture(
372375
_make_redash_permissions_factory(
373376
"dashboard",
374-
"dashboards",
377+
ObjectTypePlural.DASHBOARDS,
375378
[
376-
PermissionLevel.CAN_EDIT,
377-
PermissionLevel.CAN_RUN,
378-
PermissionLevel.CAN_MANAGE,
379-
PermissionLevel.CAN_VIEW,
379+
RedashPermissionLevel.CAN_EDIT,
380+
RedashPermissionLevel.CAN_RUN,
381+
RedashPermissionLevel.CAN_MANAGE,
382+
RedashPermissionLevel.CAN_VIEW,
380383
],
381384
_simple,
382385
)
383386
)
384387
make_alert_permissions = pytest.fixture(
385388
_make_redash_permissions_factory(
386389
"alert",
387-
"alerts",
390+
ObjectTypePlural.ALERTS,
388391
[
389-
PermissionLevel.CAN_EDIT,
390-
PermissionLevel.CAN_RUN,
391-
PermissionLevel.CAN_MANAGE,
392-
PermissionLevel.CAN_VIEW,
392+
RedashPermissionLevel.CAN_EDIT,
393+
RedashPermissionLevel.CAN_RUN,
394+
RedashPermissionLevel.CAN_MANAGE,
395+
RedashPermissionLevel.CAN_VIEW,
393396
],
394397
_simple,
395398
)
396399
)
397400
make_query_permissions = pytest.fixture(
398401
_make_redash_permissions_factory(
399402
"query",
400-
"queries",
403+
ObjectTypePlural.QUERIES,
401404
[
402-
PermissionLevel.CAN_EDIT,
403-
PermissionLevel.CAN_RUN,
404-
PermissionLevel.CAN_MANAGE,
405-
PermissionLevel.CAN_VIEW,
405+
RedashPermissionLevel.CAN_EDIT,
406+
RedashPermissionLevel.CAN_RUN,
407+
RedashPermissionLevel.CAN_MANAGE,
408+
RedashPermissionLevel.CAN_VIEW,
406409
],
407410
_simple,
408411
)

tests/unit/fixtures/test_permissions.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from databricks.sdk.service.iam import PermissionLevel
2+
from databricks.sdk.service.sql import PermissionLevel as SqlPermissionLevel
23

34
from databricks.labs.pytester.fixtures.permissions import make_cluster_permissions, make_query_permissions
45
from databricks.labs.pytester.fixtures.unwrap import call_stateful
@@ -18,7 +19,7 @@ def test_make_query_permissions_no_args():
1819
ctx, query_permissions = call_stateful(
1920
make_query_permissions,
2021
object_id="dummy",
21-
permission_level=PermissionLevel.CAN_MANAGE,
22+
permission_level=SqlPermissionLevel.CAN_MANAGE,
2223
)
2324
assert ctx is not None
2425
assert query_permissions is not None

0 commit comments

Comments
 (0)