Skip to content

Commit 09cf36f

Browse files
authored
feat: Add new datasource permission endpoint (#90)
* feat: Update the data source permission endpoint * docs: Add the documentation
1 parent f232d48 commit 09cf36f

File tree

7 files changed

+960
-44
lines changed

7 files changed

+960
-44
lines changed

Diff for: README.md

+8
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ In general, my focus on this project is to implement and deliver old and new fea
6262
- Delete a datasource by uid
6363
- Delete a datasource by name
6464
- Query a datasource by id
65+
66+
### Datasource permissions
67+
- Get datasource permissions by uid
68+
- Update the datasource user permissions by uid
69+
- Update the datasource team permissions by uid
70+
- Update the datasource basic role permissions by uid
71+
72+
### Legacy Datasource permissions
6573
- Enabled datasource permissions
6674
- Disable datasource permissions
6775
- Get datasource permissions

Diff for: docs/content/grafana_api/datasource.md

+184-10
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,17 @@
1313
* [delete\_datasource\_by\_uid](#datasource.Datasource.delete_datasource_by_uid)
1414
* [delete\_datasource\_by\_name](#datasource.Datasource.delete_datasource_by_name)
1515
* [query\_datasource\_by\_id](#datasource.Datasource.query_datasource_by_id)
16-
* [enable\_datasource\_permissions](#datasource.Datasource.enable_datasource_permissions)
17-
* [disable\_datasource\_permissions](#datasource.Datasource.disable_datasource_permissions)
18-
* [get\_datasource\_permissions](#datasource.Datasource.get_datasource_permissions)
19-
* [add\_datasource\_permissions](#datasource.Datasource.add_datasource_permissions)
20-
* [delete\_datasource\_permissions](#datasource.Datasource.delete_datasource_permissions)
16+
* [DatasourcePermissions](#datasource.DatasourcePermissions)
17+
* [get\_datasource\_permissions\_by\_uid](#datasource.DatasourcePermissions.get_datasource_permissions_by_uid)
18+
* [update\_datasource\_user\_access\_by\_uid](#datasource.DatasourcePermissions.update_datasource_user_access_by_uid)
19+
* [update\_datasource\_team\_access\_by\_uid](#datasource.DatasourcePermissions.update_datasource_team_access_by_uid)
20+
* [update\_datasource\_basic\_role\_access\_by\_uid](#datasource.DatasourcePermissions.update_datasource_basic_role_access_by_uid)
21+
* [DatasourceLegacyPermissions](#datasource.DatasourceLegacyPermissions)
22+
* [enable\_datasource\_permissions](#datasource.DatasourceLegacyPermissions.enable_datasource_permissions)
23+
* [disable\_datasource\_permissions](#datasource.DatasourceLegacyPermissions.disable_datasource_permissions)
24+
* [get\_datasource\_permissions](#datasource.DatasourceLegacyPermissions.get_datasource_permissions)
25+
* [add\_datasource\_permissions](#datasource.DatasourceLegacyPermissions.add_datasource_permissions)
26+
* [delete\_datasource\_permissions](#datasource.DatasourceLegacyPermissions.delete_datasource_permissions)
2127
* [DatasourceQueryResourceCaching](#datasource.DatasourceQueryResourceCaching)
2228
* [get\_datasource\_cache](#datasource.DatasourceQueryResourceCaching.get_datasource_cache)
2329
* [enable\_datasource\_cache](#datasource.DatasourceQueryResourceCaching.enable_datasource_cache)
@@ -362,7 +368,175 @@ The method includes a functionality to execute a queries inside the datasource i
362368

363369
- `api_call` _dict_ - Returns the result of the specified query
364370

365-
<a id="datasource.Datasource.enable_datasource_permissions"></a>
371+
<a id="datasource.DatasourcePermissions"></a>
372+
373+
## DatasourcePermissions Objects
374+
375+
```python
376+
class DatasourcePermissions()
377+
```
378+
379+
The class includes all necessary methods to access the Grafana datasource permissions API endpoints. It's required that the API token got the corresponding datasource access rights. Please check the used methods docstring for the necessary access rights
380+
381+
HINT: Note Grafana Enterprise API need required permissions if fine-grained access control is enabled
382+
383+
**Arguments**:
384+
385+
- `grafana_api_model` _APIModel_ - Inject a Grafana API model object that includes all necessary values and information
386+
387+
388+
**Attributes**:
389+
390+
- `grafana_api_model` _APIModel_ - This is where we store the grafana_api_model
391+
392+
<a id="datasource.DatasourcePermissions.get_datasource_permissions_by_uid"></a>
393+
394+
#### get\_datasource\_permissions\_by\_uid
395+
396+
```python
397+
def get_datasource_permissions_by_uid(uid: str) -> list
398+
```
399+
400+
The method includes a functionality to get the datasource permissions specified by the datasource uid. The functionality is a Grafana ENTERPRISE feature
401+
402+
**Arguments**:
403+
404+
- `uid` _str_ - Specify the uid of the datasource
405+
406+
Required Permissions:
407+
- `Action` - datasources.permissions:read
408+
- `Scope` - [datasources:*, datasources:uid:*, datasources:uid:<id>]
409+
410+
411+
**Raises**:
412+
413+
- `ValueError` - Missed specifying a necessary value
414+
- `Exception` - Unspecified error by executing the API call
415+
416+
417+
**Returns**:
418+
419+
- `api_call` _list_ - Returns the datasource permissions
420+
421+
<a id="datasource.DatasourcePermissions.update_datasource_user_access_by_uid"></a>
422+
423+
#### update\_datasource\_user\_access\_by\_uid
424+
425+
```python
426+
def update_datasource_user_access_by_uid(
427+
uid: str, id: int, datasource_user_permission: DatasourcePermission)
428+
```
429+
430+
The method includes a functionality to update the datasource permission specified by the datasource uid and the user id. The functionality is a Grafana ENTERPRISE feature
431+
432+
**Arguments**:
433+
434+
- `uid` _str_ - Specify the uid of the datasource
435+
- `id` _int_ - Specify the id of the user
436+
- `datasource_user_permission` _DatasourcePermission_ - Specify the datasource user permission
437+
438+
Required Permissions:
439+
- `Action` - datasources.permissions:write
440+
- `Scope` - [datasources:*, datasources:uid:*, datasources:uid:<id>]
441+
442+
443+
**Raises**:
444+
445+
- `ValueError` - Missed specifying a necessary value
446+
- `Exception` - Unspecified error by executing the API call
447+
448+
449+
**Returns**:
450+
451+
None
452+
453+
<a id="datasource.DatasourcePermissions.update_datasource_team_access_by_uid"></a>
454+
455+
#### update\_datasource\_team\_access\_by\_uid
456+
457+
```python
458+
def update_datasource_team_access_by_uid(
459+
uid: str, id: int, datasource_team_permission: DatasourcePermission)
460+
```
461+
462+
The method includes a functionality to update the datasource permission specified by the datasource uid and the team id. The functionality is a Grafana ENTERPRISE feature
463+
464+
**Arguments**:
465+
466+
- `uid` _str_ - Specify the uid of the datasource
467+
- `id` _int_ - Specify the id of the team
468+
- `datasource_team_permission` _DatasourcePermission_ - Specify the datasource team permission
469+
470+
Required Permissions:
471+
- `Action` - datasources.permissions:write
472+
- `Scope` - [datasources:*, datasources:uid:*, datasources:uid:<id>]
473+
474+
475+
**Raises**:
476+
477+
- `ValueError` - Missed specifying a necessary value
478+
- `Exception` - Unspecified error by executing the API call
479+
480+
481+
**Returns**:
482+
483+
None
484+
485+
<a id="datasource.DatasourcePermissions.update_datasource_basic_role_access_by_uid"></a>
486+
487+
#### update\_datasource\_basic\_role\_access\_by\_uid
488+
489+
```python
490+
def update_datasource_basic_role_access_by_uid(
491+
uid: str, build_in_role_name: str,
492+
datasource_team_permission: DatasourcePermission)
493+
```
494+
495+
The method includes a functionality to update the datasource permission specified by the datasource uid and the build in role name. The functionality is a Grafana ENTERPRISE feature
496+
497+
**Arguments**:
498+
499+
- `uid` _str_ - Specify the uid of the datasource
500+
- `build_in_role_name` _str_ - Specify the build in role name
501+
- `datasource_team_permission` _DatasourcePermission_ - Specify the datasource team permission
502+
503+
Required Permissions:
504+
- `Action` - datasources.permissions:write
505+
- `Scope` - [datasources:*, datasources:uid:*, datasources:uid:<id>]
506+
507+
508+
**Raises**:
509+
510+
- `ValueError` - Missed specifying a necessary value
511+
- `Exception` - Unspecified error by executing the API call
512+
513+
514+
**Returns**:
515+
516+
None
517+
518+
<a id="datasource.DatasourceLegacyPermissions"></a>
519+
520+
## DatasourceLegacyPermissions Objects
521+
522+
```python
523+
class DatasourceLegacyPermissions()
524+
```
525+
526+
The class includes all necessary methods to access the Grafana legacy datasource permissions API endpoints. It's required that the API token got the corresponding datasource access rights. Please check the used methods docstring for the necessary access rights
527+
528+
HINT: Note Grafana Enterprise API need required permissions if fine-grained access control is enabled
529+
530+
**Arguments**:
531+
532+
- `grafana_api_model` _APIModel_ - Inject a Grafana API model object that includes all necessary values and information
533+
534+
535+
**Attributes**:
536+
537+
- `grafana_api_model` _APIModel_ - This is where we store the grafana_api_model
538+
539+
<a id="datasource.DatasourceLegacyPermissions.enable_datasource_permissions"></a>
366540

367541
#### enable\_datasource\_permissions
368542

@@ -391,7 +565,7 @@ The method includes a functionality to enable datasource permissions specified b
391565

392566
None
393567

394-
<a id="datasource.Datasource.disable_datasource_permissions"></a>
568+
<a id="datasource.DatasourceLegacyPermissions.disable_datasource_permissions"></a>
395569

396570
#### disable\_datasource\_permissions
397571

@@ -420,7 +594,7 @@ The method includes a functionality to disable datasource permissions specified
420594

421595
None
422596

423-
<a id="datasource.Datasource.get_datasource_permissions"></a>
597+
<a id="datasource.DatasourceLegacyPermissions.get_datasource_permissions"></a>
424598

425599
#### get\_datasource\_permissions
426600

@@ -449,7 +623,7 @@ The method includes a functionality to get the datasource permissions specified
449623

450624
- `api_call` _dict_ - Returns the datasource permissions
451625

452-
<a id="datasource.Datasource.add_datasource_permissions"></a>
626+
<a id="datasource.DatasourceLegacyPermissions.add_datasource_permissions"></a>
453627

454628
#### add\_datasource\_permissions
455629

@@ -480,7 +654,7 @@ The method includes a functionality to add datasource permission specified by th
480654

481655
None
482656

483-
<a id="datasource.Datasource.delete_datasource_permissions"></a>
657+
<a id="datasource.DatasourceLegacyPermissions.delete_datasource_permissions"></a>
484658

485659
#### delete\_datasource\_permissions
486660

Diff for: docs/content/grafana_api/model.md

+26
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* [APIModel](#model.APIModel)
77
* [DatasourceQuery](#model.DatasourceQuery)
88
* [DatasourceRuleQuery](#model.DatasourceRuleQuery)
9+
* [DatasourcePermission](#model.DatasourcePermission)
910
* [Alert](#model.Alert)
1011
* [AlertRuleQueryModelCondition](#model.AlertRuleQueryModelCondition)
1112
* [AlertRuleQueryModel](#model.AlertRuleQueryModel)
@@ -128,6 +129,31 @@ The class includes all necessary variables to specify a query for the datasource
128129
- `ref_id` _str_ - Specify a reference id of the search command
129130
- `relative_time_range` _dict_ - Specify the related time range of the search command
130131

132+
<a id="model.DatasourcePermission"></a>
133+
134+
## DatasourcePermission Objects
135+
136+
```python
137+
@dataclass
138+
class DatasourcePermission()
139+
```
140+
141+
The class includes the necessary variables to generate a datasource permission object that is necessary to communicate with the Grafana datasource permissions endpoint
142+
143+
**Arguments**:
144+
145+
- `permission` _Union[str, None]_ - Specify the datasource permission. Can be query, edit, admin or None. To remove a permission, set the permission value to None
146+
147+
148+
**Raises**:
149+
150+
- `ValueError` - Missed specifying a necessary value
151+
152+
153+
**Returns**:
154+
155+
- `permission` _str_ - Returns the datasource permission
156+
131157
<a id="model.Alert"></a>
132158

133159
## Alert Objects

0 commit comments

Comments
 (0)