1
1
import logging
2
- from typing import Union
2
+ from typing import TYPE_CHECKING , Optional , Union
3
3
from collections .abc import Iterable
4
4
5
+ from tableauserverclient .models .permissions_item import PermissionsRule
5
6
from tableauserverclient .server .endpoint .default_permissions_endpoint import _DefaultPermissionsEndpoint
6
7
from tableauserverclient .server .endpoint .dqw_endpoint import _DataQualityWarningEndpoint
7
8
from tableauserverclient .server .endpoint .endpoint import api , Endpoint
13
14
14
15
from tableauserverclient .helpers .logging import logger
15
16
17
+ if TYPE_CHECKING :
18
+ from tableauserverclient .models .dqw_item import DQWItem
19
+ from tableauserverclient .server .request_options import RequestOptions
20
+
16
21
17
22
class Databases (Endpoint , TaggingMixin ):
18
23
def __init__ (self , parent_srv ):
@@ -23,11 +28,29 @@ def __init__(self, parent_srv):
23
28
self ._data_quality_warnings = _DataQualityWarningEndpoint (parent_srv , Resource .Database )
24
29
25
30
@property
26
- def baseurl (self ):
31
+ def baseurl (self ) -> str :
27
32
return f"{ self .parent_srv .baseurl } /sites/{ self .parent_srv .site_id } /databases"
28
33
29
34
@api (version = "3.5" )
30
- def get (self , req_options = None ):
35
+ def get (self , req_options : Optional ["RequestOptions" ] = None ) -> tuple [list [DatabaseItem ], PaginationItem ]:
36
+ """
37
+ Get information about all databases on the site. Endpoint is paginated,
38
+ and will return a default of 100 items per page. Use the `req_options`
39
+ parameter to customize the request.
40
+
41
+ REST API: https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_databases
42
+
43
+ Parameters
44
+ ----------
45
+ req_options : RequestOptions, optional
46
+ Options to customize the request. If not provided, defaults to None.
47
+
48
+ Returns
49
+ -------
50
+ tuple[list[DatabaseItem], PaginationItem]
51
+ A tuple containing a list of DatabaseItem objects and a
52
+ PaginationItem object.
53
+ """
31
54
logger .info ("Querying all databases on site" )
32
55
url = self .baseurl
33
56
server_response = self .get_request (url , req_options )
@@ -37,7 +60,27 @@ def get(self, req_options=None):
37
60
38
61
# Get 1 database
39
62
@api (version = "3.5" )
40
- def get_by_id (self , database_id ):
63
+ def get_by_id (self , database_id : str ) -> DatabaseItem :
64
+ """
65
+ Get information about a single database asset on the site.
66
+
67
+ REST API: https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_database
68
+
69
+ Parameters
70
+ ----------
71
+ database_id : str
72
+ The ID of the database to retrieve.
73
+
74
+ Returns
75
+ -------
76
+ DatabaseItem
77
+ A DatabaseItem object representing the database.
78
+
79
+ Raises
80
+ ------
81
+ ValueError
82
+ If the database ID is undefined.
83
+ """
41
84
if not database_id :
42
85
error = "database ID undefined."
43
86
raise ValueError (error )
@@ -47,7 +90,24 @@ def get_by_id(self, database_id):
47
90
return DatabaseItem .from_response (server_response .content , self .parent_srv .namespace )[0 ]
48
91
49
92
@api (version = "3.5" )
50
- def delete (self , database_id ):
93
+ def delete (self , database_id : str ) -> None :
94
+ """
95
+ Deletes a single database asset from the server.
96
+
97
+ Parameters
98
+ ----------
99
+ database_id : str
100
+ The ID of the database to delete.
101
+
102
+ Returns
103
+ -------
104
+ None
105
+
106
+ Raises
107
+ ------
108
+ ValueError
109
+ If the database ID is undefined.
110
+ """
51
111
if not database_id :
52
112
error = "Database ID undefined."
53
113
raise ValueError (error )
@@ -56,7 +116,28 @@ def delete(self, database_id):
56
116
logger .info (f"Deleted single database (ID: { database_id } )" )
57
117
58
118
@api (version = "3.5" )
59
- def update (self , database_item ):
119
+ def update (self , database_item : DatabaseItem ) -> DatabaseItem :
120
+ """
121
+ Update the database description, certify the database, set permissions,
122
+ or assign a User as the database contact.
123
+
124
+ REST API: https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_database
125
+
126
+ Parameters
127
+ ----------
128
+ database_item : DatabaseItem
129
+ The DatabaseItem object to update.
130
+
131
+ Returns
132
+ -------
133
+ DatabaseItem
134
+ The updated DatabaseItem object.
135
+
136
+ Raises
137
+ ------
138
+ MissingRequiredFieldError
139
+ If the database item is missing an ID.
140
+ """
60
141
if not database_item .id :
61
142
error = "Database item missing ID."
62
143
raise MissingRequiredFieldError (error )
@@ -88,43 +169,45 @@ def _get_tables_for_database(self, database_item):
88
169
return tables
89
170
90
171
@api (version = "3.5" )
91
- def populate_permissions (self , item ) :
172
+ def populate_permissions (self , item : DatabaseItem ) -> None :
92
173
self ._permissions .populate (item )
93
174
94
175
@api (version = "3.5" )
95
- def update_permissions (self , item , rules ) :
176
+ def update_permissions (self , item : DatabaseItem , rules : list [ PermissionsRule ]) -> list [ PermissionsRule ] :
96
177
return self ._permissions .update (item , rules )
97
178
98
179
@api (version = "3.5" )
99
- def delete_permission (self , item , rules ) :
180
+ def delete_permission (self , item : DatabaseItem , rules : list [ PermissionsRule ]) -> None :
100
181
self ._permissions .delete (item , rules )
101
182
102
183
@api (version = "3.5" )
103
- def populate_table_default_permissions (self , item ):
184
+ def populate_table_default_permissions (self , item : DatabaseItem ):
104
185
self ._default_permissions .populate_default_permissions (item , Resource .Table )
105
186
106
187
@api (version = "3.5" )
107
- def update_table_default_permissions (self , item ):
108
- return self ._default_permissions .update_default_permissions (item , Resource .Table )
188
+ def update_table_default_permissions (
189
+ self , item : DatabaseItem , rules : list [PermissionsRule ]
190
+ ) -> list [PermissionsRule ]:
191
+ return self ._default_permissions .update_default_permissions (item , rules , Resource .Table )
109
192
110
193
@api (version = "3.5" )
111
- def delete_table_default_permissions (self , item ) :
112
- self ._default_permissions .delete_default_permission (item , Resource .Table )
194
+ def delete_table_default_permissions (self , rule : PermissionsRule , item : DatabaseItem ) -> None :
195
+ self ._default_permissions .delete_default_permission (item , rule , Resource .Table )
113
196
114
197
@api (version = "3.5" )
115
- def populate_dqw (self , item ) :
198
+ def populate_dqw (self , item : DatabaseItem ) -> None :
116
199
self ._data_quality_warnings .populate (item )
117
200
118
201
@api (version = "3.5" )
119
- def update_dqw (self , item , warning ) :
202
+ def update_dqw (self , item : DatabaseItem , warning : "DQWItem" ) -> list [ "DQWItem" ] :
120
203
return self ._data_quality_warnings .update (item , warning )
121
204
122
205
@api (version = "3.5" )
123
- def add_dqw (self , item , warning ) :
206
+ def add_dqw (self , item : DatabaseItem , warning : "DQWItem" ) -> list [ "DQWItem" ] :
124
207
return self ._data_quality_warnings .add (item , warning )
125
208
126
209
@api (version = "3.5" )
127
- def delete_dqw (self , item ) :
210
+ def delete_dqw (self , item : DatabaseItem ) -> None :
128
211
self ._data_quality_warnings .clear (item )
129
212
130
213
@api (version = "3.9" )
0 commit comments