Skip to content

Commit 9f950ff

Browse files
authored
Add General folder support (#3)
* Add General folder support * Add unit and integrationtests
1 parent 27ab591 commit 9f950ff

File tree

8 files changed

+232
-103
lines changed

8 files changed

+232
-103
lines changed

.coveragerc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,4 @@ exclude_lines =
1919
raise NotImplementedError
2020

2121
# Don't complain if non-runnable code isn't run:
22-
if __name__ == .__main__.:
22+
if __name__ == .__main__.:

src/grafana_api/dashboard.py

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def create_or_update_dashboard(
5656
else:
5757
logging.info("You successfully deployed the dashboard.")
5858
else:
59-
logging.info(
59+
logging.error(
6060
"There is no dashboard_path or dashboard_json or message defined."
6161
)
6262
raise ValueError
@@ -87,10 +87,10 @@ def delete_dashboard_by_name_and_path(
8787
else:
8888
logging.info("You successfully destroyed the dashboard.")
8989
else:
90-
logging.info("Nothing to delete. There is no dashboard available.")
90+
logging.error("Nothing to delete. There is no dashboard available.")
9191
raise ValueError
9292
else:
93-
logging.info("There is no dashboard_name or dashboard_path defined.")
93+
logging.error("There is no dashboard_name or dashboard_path defined.")
9494
raise ValueError
9595

9696
def get_dashboard_by_uid(self, uid: str) -> dict:
@@ -111,7 +111,7 @@ def get_dashboard_by_uid(self, uid: str) -> dict:
111111
else:
112112
return api_call
113113
else:
114-
logging.info("There is no dashboard uid defined.")
114+
logging.error("There is no dashboard uid defined.")
115115
raise ValueError
116116

117117
def get_dashboard_home(self) -> dict:
@@ -155,15 +155,32 @@ def get_dashboard_uid_and_id_by_name_and_folder(
155155
).get_folder_id_by_dashboard_path(dashboard_path)
156156

157157
search_query: str = f"{APIEndpoints.SEARCH.value}?folderIds={folder_id}&query={dashboard_name}"
158+
print(search_query)
158159
dashboard_meta: list = Utils(self.grafana_api_model).call_the_api(
159160
search_query
160161
)
161162

162-
return dict(
163-
{"uid": dashboard_meta[0]["uid"], "id": dashboard_meta[0]["id"]}
164-
)
163+
for dashboard_meta_object in dashboard_meta:
164+
if dashboard_meta_object.get("title") is not None:
165+
if dashboard_meta_object.get("title") == dashboard_name:
166+
if (
167+
dashboard_meta_object.get("uid") is not None
168+
and dashboard_meta_object.get("id") is not None
169+
):
170+
return dict(
171+
{
172+
"uid": dashboard_meta_object.get("uid"),
173+
"id": dashboard_meta_object.get("id"),
174+
}
175+
)
176+
else:
177+
logging.error("There is no uid or id defined.")
178+
raise ValueError
179+
else:
180+
logging.error("There is no title defined.")
181+
raise ValueError
165182
else:
166-
logging.info("There is no dashboard_name or dashboard_path defined.")
183+
logging.error("There is no dashboard_name or dashboard_path defined.")
167184
raise ValueError
168185

169186
def get_dashboard_permissions(self, id: int) -> list:
@@ -184,7 +201,7 @@ def get_dashboard_permissions(self, id: int) -> list:
184201
else:
185202
return api_call
186203
else:
187-
logging.info("There is no dashboard uid defined.")
204+
logging.error("There is no dashboard uid defined.")
188205
raise ValueError
189206

190207
def update_dashboard_permissions(self, id: int, permission_json: dict):
@@ -209,7 +226,7 @@ def update_dashboard_permissions(self, id: int, permission_json: dict):
209226
else:
210227
logging.info("You successfully modified the dashboard permissions.")
211228
else:
212-
logging.info("There is no dashboard uid or permission json defined.")
229+
logging.error("There is no dashboard uid or permission json defined.")
213230
raise ValueError
214231

215232
def get_dashboard_versions(self, id: int) -> list:
@@ -230,7 +247,7 @@ def get_dashboard_versions(self, id: int) -> list:
230247
else:
231248
return api_call
232249
else:
233-
logging.info("There is no dashboard uid defined.")
250+
logging.error("There is no dashboard uid defined.")
234251
raise ValueError
235252

236253
def get_dashboard_version(self, id: int, version_id: int) -> dict:
@@ -253,7 +270,7 @@ def get_dashboard_version(self, id: int, version_id: int) -> dict:
253270
else:
254271
return api_call
255272
else:
256-
logging.info("There is no dashboard uid or version_id defined.")
273+
logging.error("There is no dashboard uid or version_id defined.")
257274
raise ValueError
258275

259276
def restore_dashboard_version(self, id: int, version: dict):
@@ -325,12 +342,12 @@ def calculate_dashboard_diff(
325342
else:
326343
return api_call.text
327344
else:
328-
logging.info(
345+
logging.error(
329346
"There is no dashboard_uid_and_version_base or dashboard_uid_and_version_new defined."
330347
)
331348
raise ValueError
332349
else:
333-
logging.info(
350+
logging.error(
334351
f"The diff_type: {diff_type.lower()} is not valid. Please specify a valid value."
335352
)
336353
raise ValueError

src/grafana_api/folder.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def get_folder_by_uid(self, uid: str) -> dict:
4646
else:
4747
return api_call
4848
else:
49-
logging.info("There is no dashboard uid defined.")
49+
logging.error("There is no dashboard uid defined.")
5050
raise ValueError
5151

5252
def get_folder_by_id(self, id: int) -> dict:
@@ -67,7 +67,7 @@ def get_folder_by_id(self, id: int) -> dict:
6767
else:
6868
return api_call
6969
else:
70-
logging.info("There is no folder id defined.")
70+
logging.error("There is no folder id defined.")
7171
raise ValueError
7272

7373
def create_folder(self, title: str, uid: str = None) -> dict:
@@ -98,7 +98,7 @@ def create_folder(self, title: str, uid: str = None) -> dict:
9898
else:
9999
return api_call
100100
else:
101-
logging.info("There is no folder uid or title defined.")
101+
logging.error("There is no folder uid or title defined.")
102102
raise ValueError
103103

104104
def update_folder(
@@ -140,7 +140,7 @@ def update_folder(
140140
else:
141141
return api_call
142142
else:
143-
logging.info("There is no folder title or version defined.")
143+
logging.error("There is no folder title or version defined.")
144144
raise ValueError
145145

146146
def delete_folder(self, uid: str):
@@ -163,7 +163,7 @@ def delete_folder(self, uid: str):
163163
else:
164164
logging.info("You successfully destroyed the folder.")
165165
else:
166-
logging.info("There is no folder uid defined.")
166+
logging.error("There is no folder uid defined.")
167167
raise ValueError
168168

169169
def get_folder_permissions(self, uid: str) -> list:
@@ -186,7 +186,7 @@ def get_folder_permissions(self, uid: str) -> list:
186186
else:
187187
return api_call
188188
else:
189-
logging.info("There is no folder uid defined.")
189+
logging.error("There is no folder uid defined.")
190190
raise ValueError
191191

192192
def update_folder_permissions(self, uid: str, permission_json: dict):
@@ -211,12 +211,15 @@ def update_folder_permissions(self, uid: str, permission_json: dict):
211211
else:
212212
logging.info("You successfully modified the folder permissions.")
213213
else:
214-
logging.info("There is no folder uid or permission json defined.")
214+
logging.error("There is no folder uid or permission json defined.")
215215
raise ValueError
216216

217217
def get_folder_id_by_dashboard_path(self, dashboard_path: str) -> int:
218218
"""The method includes a functionality to extract the folder id specified inside model dashboard path"""
219219

220+
if dashboard_path.lower() == "general":
221+
return 0
222+
220223
if len(dashboard_path) != 0:
221224
folders: list = self.get_all_folder_ids_and_names()
222225
folder_id: int = 0
@@ -233,7 +236,7 @@ def get_folder_id_by_dashboard_path(self, dashboard_path: str) -> int:
233236

234237
return folder_id
235238
else:
236-
logging.info("There is no dashboard_path defined.")
239+
logging.error("There is no dashboard_path defined.")
237240
raise ValueError
238241

239242
def get_all_folder_ids_and_names(self) -> list:
Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,32 @@
11
{
2-
"id": null,
3-
"uid": "tests",
4-
"title": "Test",
5-
"tags": [],
6-
"style": "dark",
7-
"timezone": "browser",
8-
"editable": true,
9-
"hideControls": false,
10-
"graphTooltip": 1,
11-
"panels": [],
12-
"time": {
13-
"from": "now-6h",
14-
"to": "now"
15-
},
16-
"timepicker": {
17-
"time_options": [],
18-
"refresh_intervals": []
19-
},
20-
"templating": {
21-
"list": []
22-
},
23-
"annotations": {
24-
"list": []
25-
},
26-
"refresh": "5s",
27-
"schemaVersion": 17,
28-
"version": 0,
29-
"links": []
2+
"dashboard": {
3+
"id": null,
4+
"uid": "tests",
5+
"title": "Test",
6+
"tags": [],
7+
"style": "dark",
8+
"timezone": "browser",
9+
"editable": true,
10+
"hideControls": false,
11+
"graphTooltip": 1,
12+
"panels": [],
13+
"time": {
14+
"from": "now-6h",
15+
"to": "now"
16+
},
17+
"timepicker": {
18+
"time_options": [],
19+
"refresh_intervals": []
20+
},
21+
"templating": {
22+
"list": []
23+
},
24+
"annotations": {
25+
"list": []
26+
},
27+
"refresh": "5s",
28+
"schemaVersion": 17,
29+
"version": 0,
30+
"links": []
31+
}
3032
}

tests/integrationtest/resources/dashboard_expected_result.json

Lines changed: 10 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
"list": []
55
},
66
"editable": true,
7-
"graphTooltip": 1,
8-
"hideControls": false,
9-
"id": 104,
7+
"fiscalYearStartMonth": 0,
8+
"graphTooltip": 0,
9+
"id": 152,
1010
"links": [],
11+
"liveNow": false,
1112
"panels": [],
12-
"refresh": "5s",
13-
"schemaVersion": 17,
13+
"schemaVersion": 34,
1414
"style": "dark",
1515
"tags": [],
1616
"templating": {
@@ -20,36 +20,11 @@
2020
"from": "now-6h",
2121
"to": "now"
2222
},
23-
"timepicker": {
24-
"refresh_intervals": [],
25-
"time_options": []
26-
},
27-
"timezone": "browser",
23+
"timepicker": {},
24+
"timezone": "",
2825
"title": "Test 1",
29-
"uid": "tests1",
30-
"version": 1
31-
},
32-
"meta": {
33-
"canAdmin": true,
34-
"canEdit": true,
35-
"canSave": true,
36-
"canStar": true,
37-
"created": "2022-01-15T20:46:44+01:00",
38-
"createdBy": "Anonymous",
39-
"expires": "0001-01-01T00:00:00Z",
40-
"folderId": 72,
41-
"folderTitle": "Github Integrationtest",
42-
"folderUid": "6U_QdWJnz",
43-
"folderUrl": "/dashboards/f/6U_QdWJnz/github-integrationtest",
44-
"hasAcl": false,
45-
"isFolder": false,
46-
"provisioned": false,
47-
"provisionedExternalId": "",
48-
"slug": "test-1",
49-
"type": "db",
50-
"updated": "2022-01-15T20:46:44+01:00",
51-
"updatedBy": "Anonymous",
52-
"url": "/d/tests1/test-1",
53-
"version": 1
26+
"uid": "test1",
27+
"version": 3,
28+
"weekStart": ""
5429
}
5530
}

0 commit comments

Comments
 (0)