Skip to content

Commit 899c421

Browse files
committed
Dashboards: Add permissions_by_uid methods
- get_permissions_by_uid - update_permissions_by_uid
1 parent 2af0bf0 commit 899c421

File tree

3 files changed

+136
-68
lines changed

3 files changed

+136
-68
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## unreleased
44

5+
* Add methods `get_permissions_by_uid` and `update_permissions_by_uid` for dashboards.
6+
Thanks, @meyerder.
7+
58

69
## 3.9.2 (2023-10-14)
710

grafana_client/elements/dashboard.py

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import warnings
2+
13
from verlib2 import Version
24

35
from .base import Base
@@ -80,22 +82,35 @@ def get_dashboards_tags(self):
8082
return r
8183

8284
def get_dashboard_permissions(self, dashboard_id):
83-
"""
84-
85-
:param dashboard_id:
86-
:return:
87-
"""
88-
get_dashboard_permissions_path = "/dashboards/id/%s/permissions" % dashboard_id
89-
r = self.client.GET(get_dashboard_permissions_path)
90-
return r
85+
warnings.warn(
86+
"get_dashboard_permissions is deprecated, " "use corresponding _by_id or _by_uid methods",
87+
DeprecationWarning,
88+
)
89+
return self.get_permissions_by_id(dashboard_id)
9190

9291
def update_dashboard_permissions(self, dashboard_id, items):
93-
"""
92+
warnings.warn(
93+
"update_dashboard_permissions is deprecated, " "use corresponding _by_id or _by_uid methods",
94+
DeprecationWarning,
95+
)
96+
return self.update_permissions_by_id(dashboard_id, items)
9497

95-
:param dashboard_id:
96-
:param items:
97-
:return:
98-
"""
99-
update_dashboard_permissions_path = "/dashboards/id/%s/permissions" % dashboard_id
100-
r = self.client.POST(update_dashboard_permissions_path, json=items)
101-
return r
98+
def get_permissions_by_id(self, dashboard_id):
99+
return self.get_permissions_generic(dashboard_id, idtype="id")
100+
101+
def update_permissions_by_id(self, dashboard_id, items):
102+
return self.update_permissions_generic(dashboard_id, items, idtype="id")
103+
104+
def get_permissions_by_uid(self, dashboard_id):
105+
return self.get_permissions_generic(dashboard_id)
106+
107+
def update_permissions_by_uid(self, dashboard_id, items):
108+
return self.update_permissions_generic(dashboard_id, items)
109+
110+
def get_permissions_generic(self, identifier, idtype="uid"):
111+
permissions_path = f"/dashboards/{idtype}/{identifier}/permissions"
112+
return self.client.GET(permissions_path)
113+
114+
def update_permissions_generic(self, identifier, items, idtype="uid"):
115+
permissions_path = f"/dashboards/{idtype}/{identifier}/permissions"
116+
return self.client.POST(permissions_path, json=items)

test/elements/test_dashboard.py

Lines changed: 102 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -194,67 +194,117 @@ def test_get_dashboards_tags(self, m):
194194
self.assertEqual(len(tags), 2)
195195
self.assertEqual(tags[0]["term"], "tag1")
196196

197-
@requests_mock.Mocker()
198-
def test_get_dashboard_permissions(self, m):
199-
m.get(
197+
def mocker_provision_permissions(self, mock):
198+
response_data = [
199+
{
200+
"id": 1,
201+
"dashboardId": 1,
202+
"created": "2017-06-20T02:00:00+02:00",
203+
"updated": "2017-06-20T02:00:00+02:00",
204+
"userId": 0,
205+
"userLogin": "",
206+
"userEmail": "",
207+
"teamId": 0,
208+
"team": "",
209+
"role": "Viewer",
210+
"permission": 1,
211+
"permissionName": "View",
212+
"uid": "foobar",
213+
"title": "",
214+
"slug": "",
215+
"isFolder": "false",
216+
"url": "",
217+
},
218+
{
219+
"id": 2,
220+
"dashboardId": 1,
221+
"created": "2017-06-20T02:00:00+02:00",
222+
"updated": "2017-06-20T02:00:00+02:00",
223+
"userId": 0,
224+
"userLogin": "",
225+
"userEmail": "",
226+
"teamId": 0,
227+
"team": "",
228+
"role": "Editor",
229+
"permission": 2,
230+
"permissionName": "Edit",
231+
"uid": "bazqux",
232+
"title": "",
233+
"slug": "",
234+
"isFolder": "false",
235+
"url": "",
236+
},
237+
]
238+
mock.get(
200239
"http://localhost/api/dashboards/id/1/permissions",
201-
json=[
202-
{
203-
"id": 1,
204-
"dashboardId": 1,
205-
"created": "2017-06-20T02:00:00+02:00",
206-
"updated": "2017-06-20T02:00:00+02:00",
207-
"userId": 0,
208-
"userLogin": "",
209-
"userEmail": "",
210-
"teamId": 0,
211-
"team": "",
212-
"role": "Viewer",
213-
"permission": 1,
214-
"permissionName": "View",
215-
"uid": "",
216-
"title": "",
217-
"slug": "",
218-
"isFolder": "false",
219-
"url": "",
220-
},
221-
{
222-
"id": 2,
223-
"dashboardId": 1,
224-
"created": "2017-06-20T02:00:00+02:00",
225-
"updated": "2017-06-20T02:00:00+02:00",
226-
"userId": 0,
227-
"userLogin": "",
228-
"userEmail": "",
229-
"teamId": 0,
230-
"team": "",
231-
"role": "Editor",
232-
"permission": 2,
233-
"permissionName": "Edit",
234-
"uid": "",
235-
"title": "",
236-
"slug": "",
237-
"isFolder": "false",
238-
"url": "",
239-
},
240-
],
240+
json=response_data,
241+
)
242+
mock.get(
243+
"http://localhost/api/dashboards/uid/foobar/permissions",
244+
json=response_data,
245+
)
246+
mock.post(
247+
"http://localhost/api/dashboards/id/1/permissions",
248+
json={"message": "Dashboard permissions updated"},
249+
)
250+
mock.post(
251+
"http://localhost/api/dashboards/uid/foobar/permissions",
252+
json={"message": "Dashboard permissions updated"},
241253
)
254+
255+
@requests_mock.Mocker()
256+
def test_get_dashboard_permissions(self, m):
257+
self.mocker_provision_permissions(m)
242258
permissions = self.grafana.dashboard.get_dashboard_permissions(1)
243259
self.assertEqual(len(permissions), 2)
244260
self.assertEqual(permissions[0]["dashboardId"], 1)
245261

262+
@requests_mock.Mocker()
263+
def test_get_dashboard_permissions_by_id(self, m):
264+
self.mocker_provision_permissions(m)
265+
permissions = self.grafana.dashboard.get_permissions_by_id(1)
266+
self.assertEqual(len(permissions), 2)
267+
self.assertEqual(permissions[0]["dashboardId"], 1)
268+
269+
@requests_mock.Mocker()
270+
def test_get_dashboard_permissions_by_uid(self, m):
271+
self.mocker_provision_permissions(m)
272+
permissions = self.grafana.dashboard.get_permissions_by_uid("foobar")
273+
self.assertEqual(len(permissions), 2)
274+
self.assertEqual(permissions[0]["uid"], "foobar")
275+
276+
permission_data = {
277+
"items": [
278+
{"role": "Viewer", "permission": 1},
279+
{"role": "Editor", "permission": 2},
280+
{"teamId": 1, "permission": 1},
281+
{"userId": 11, "permission": 4},
282+
]
283+
}
284+
246285
@requests_mock.Mocker()
247286
def test_update_dashboard_permissions(self, m):
248-
m.post("http://localhost/api/dashboards/id/1/permissions", json={"message": "Dashboard permissions updated"})
287+
self.mocker_provision_permissions(m)
249288
permissions = self.grafana.dashboard.update_dashboard_permissions(
250289
1,
251-
{
252-
"items": [
253-
{"role": "Viewer", "permission": 1},
254-
{"role": "Editor", "permission": 2},
255-
{"teamId": 1, "permission": 1},
256-
{"userId": 11, "permission": 4},
257-
]
258-
},
290+
self.permission_data,
291+
)
292+
self.assertEqual(permissions["message"], "Dashboard permissions updated")
293+
294+
@requests_mock.Mocker()
295+
def test_update_dashboard_permissions_by_id(self, m):
296+
self.mocker_provision_permissions(m)
297+
permissions = self.grafana.dashboard.update_permissions_by_id(
298+
1,
299+
self.permission_data,
300+
)
301+
self.assertEqual(permissions["message"], "Dashboard permissions updated")
302+
303+
@requests_mock.Mocker()
304+
def test_update_dashboard_permissions_by_uid(self, m):
305+
self.mocker_provision_permissions(m)
306+
permissions = self.grafana.dashboard.update_permissions_by_uid(
307+
"foobar",
308+
self.permission_data,
259309
)
260310
self.assertEqual(permissions["message"], "Dashboard permissions updated")

0 commit comments

Comments
 (0)