Skip to content

Commit be81bee

Browse files
committed
Improve "Team preferences"
- Align with model-based conversation introduced with improvements to "Organization preferences", now using `PersonalPreferences`.
1 parent 1d852bc commit be81bee

File tree

5 files changed

+40
-13
lines changed

5 files changed

+40
-13
lines changed

grafana_client/elements/organization.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import warnings
22

3-
from ..model import UserOrganizationPreferences
3+
from ..model import PersonalPreferences
44
from .base import Base
55

66

@@ -195,7 +195,7 @@ def organization_preference_update(self, theme="", home_dashboard_id=0, timezone
195195
:return:
196196
"""
197197
warnings.warn("Deprecated, please use `organization_preferences_update`", DeprecationWarning)
198-
preferences = UserOrganizationPreferences(theme=theme, homeDashboardId=home_dashboard_id, timezone=timezone)
198+
preferences = PersonalPreferences(theme=theme, homeDashboardId=home_dashboard_id, timezone=timezone)
199199
return self.organization_preferences_update(preferences)
200200

201201
def organization_preferences_get(self):
@@ -208,7 +208,7 @@ def organization_preferences_get(self):
208208
r = self.client.GET(update_preference)
209209
return r
210210

211-
def organization_preferences_update(self, preferences: UserOrganizationPreferences):
211+
def organization_preferences_update(self, preferences: PersonalPreferences):
212212
"""
213213
Update preferences of current organization as a whole.
214214
@@ -230,7 +230,7 @@ def organization_preferences_update(self, preferences: UserOrganizationPreferenc
230230
)
231231
return r
232232

233-
def organization_preferences_patch(self, preferences: UserOrganizationPreferences):
233+
def organization_preferences_patch(self, preferences: PersonalPreferences):
234234
"""
235235
Update specific preferences of current organization.
236236

grafana_client/elements/team.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import typing as t
2+
3+
from ..model import PersonalPreferences
14
from .base import Base
25

36

@@ -142,15 +145,24 @@ def get_team_preferences(self, team_id):
142145
r = self.client.GET(get_team_preferences_path)
143146
return r
144147

145-
def update_team_preferences(self, team_id, preferences):
148+
def update_team_preferences(self, team_id, preferences: t.Union[PersonalPreferences, t.Dict]):
146149
"""
147150
148151
:param team_id:
149152
:param preferences:
150153
:return:
151154
"""
152155
update_team_preferences_path = "/teams/%s/preferences" % team_id
153-
r = self.client.PUT(update_team_preferences_path, json=preferences)
156+
if isinstance(preferences, dict):
157+
data = preferences
158+
elif isinstance(preferences, PersonalPreferences):
159+
data = preferences.asdict(filter_none=True)
160+
else:
161+
raise TypeError(
162+
f"Unable to use data type '{type(preferences)}' for updating preferences. "
163+
f"Use `PersonalPreferences` or `dict`."
164+
)
165+
r = self.client.PUT(update_team_preferences_path, json=data)
154166
return r
155167

156168
def get_team_external_group(self, team_id):

grafana_client/model.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ def asdict_compact(self):
7070

7171

7272
@dataclasses.dataclass
73-
class UserOrganizationPreferences:
73+
class PersonalPreferences:
7474
"""
75-
Request/response model for user- and organization-preferences.
75+
Request/response model for user-, team- and organization-preferences.
7676
7777
https://grafana.com/docs/grafana/latest/developers/http_api/preferences/
7878
"""

test/elements/test_organization.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import requests_mock
44

55
from grafana_client import GrafanaApi
6-
from grafana_client.model import UserOrganizationPreferences
6+
from grafana_client.model import PersonalPreferences
77

88

99
class OrganizationTestCase(unittest.TestCase):
@@ -42,15 +42,15 @@ def test_organization_preferences_get(self, m):
4242
def test_organization_preferences_update(self, m):
4343
m.put("http://localhost/api/org/preferences", json={"message": "Preferences updated"})
4444
preference = self.grafana.organizations.organization_preferences_update(
45-
UserOrganizationPreferences(theme="", homeDashboardId=999, timezone="utc")
45+
PersonalPreferences(theme="", homeDashboardId=999, timezone="utc")
4646
)
4747
self.assertEqual(preference["message"], "Preferences updated")
4848

4949
@requests_mock.Mocker()
5050
def test_organization_preferences_patch(self, m):
5151
m.patch("http://localhost/api/org/preferences", json={"message": "Preferences updated"})
5252
preference = self.grafana.organizations.organization_preferences_patch(
53-
UserOrganizationPreferences(homeDashboardUID="zgjG8dKVz")
53+
PersonalPreferences(homeDashboardUID="zgjG8dKVz")
5454
)
5555
self.assertEqual(preference["message"], "Preferences updated")
5656

test/elements/test_team.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import requests_mock
55

66
from grafana_client import GrafanaApi
7+
from grafana_client.model import PersonalPreferences
78

89

910
class TeamsTestCase(unittest.TestCase):
@@ -251,12 +252,26 @@ def test_get_team_preferences(self, m):
251252
self.assertEqual(prefs["homeDashboardId"], 0)
252253

253254
@requests_mock.Mocker()
254-
def test_update_team_preferences(self, m):
255+
def test_update_team_preferences_dict(self, m):
255256
m.put(
256257
"http://localhost/api/teams/1/preferences",
257258
json={"message": "Preferences updated"},
258259
)
259-
prefs = {"theme": "light", "homeDashboardId": 0, "timezone": ""}
260+
prefs = {"theme": "light", "homeDashboardId": 0, "timezone": "utc"}
261+
262+
updates = self.grafana.teams.update_team_preferences("1", prefs)
263+
history = m.request_history
264+
json_payload = history[0].json()
265+
self.assertEqual(json_payload["theme"], "light")
266+
self.assertEqual(updates["message"], "Preferences updated")
267+
268+
@requests_mock.Mocker()
269+
def test_update_team_preferences_model(self, m):
270+
m.put(
271+
"http://localhost/api/teams/1/preferences",
272+
json={"message": "Preferences updated"},
273+
)
274+
prefs = PersonalPreferences(theme="light", homeDashboardId=0, timezone="utc")
260275

261276
updates = self.grafana.teams.update_team_preferences("1", prefs)
262277
history = m.request_history

0 commit comments

Comments
 (0)