11import logging
2- from typing import Union
2+ from typing import TYPE_CHECKING , Optional , Union
33from collections .abc import Iterable
44
5+ from tableauserverclient .models .permissions_item import PermissionsRule
56from tableauserverclient .server .endpoint .default_permissions_endpoint import _DefaultPermissionsEndpoint
67from tableauserverclient .server .endpoint .dqw_endpoint import _DataQualityWarningEndpoint
78from tableauserverclient .server .endpoint .endpoint import api , Endpoint
1314
1415from tableauserverclient .helpers .logging import logger
1516
17+ if TYPE_CHECKING :
18+ from tableauserverclient .models .dqw_item import DQWItem
19+ from tableauserverclient .server .request_options import RequestOptions
20+
1621
1722class Databases (Endpoint , TaggingMixin ):
1823 def __init__ (self , parent_srv ):
@@ -23,11 +28,29 @@ def __init__(self, parent_srv):
2328 self ._data_quality_warnings = _DataQualityWarningEndpoint (parent_srv , Resource .Database )
2429
2530 @property
26- def baseurl (self ):
31+ def baseurl (self ) -> str :
2732 return f"{ self .parent_srv .baseurl } /sites/{ self .parent_srv .site_id } /databases"
2833
2934 @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+ """
3154 logger .info ("Querying all databases on site" )
3255 url = self .baseurl
3356 server_response = self .get_request (url , req_options )
@@ -37,7 +60,27 @@ def get(self, req_options=None):
3760
3861 # Get 1 database
3962 @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+ """
4184 if not database_id :
4285 error = "database ID undefined."
4386 raise ValueError (error )
@@ -47,7 +90,24 @@ def get_by_id(self, database_id):
4790 return DatabaseItem .from_response (server_response .content , self .parent_srv .namespace )[0 ]
4891
4992 @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+ """
51111 if not database_id :
52112 error = "Database ID undefined."
53113 raise ValueError (error )
@@ -56,7 +116,28 @@ def delete(self, database_id):
56116 logger .info (f"Deleted single database (ID: { database_id } )" )
57117
58118 @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+ """
60141 if not database_item .id :
61142 error = "Database item missing ID."
62143 raise MissingRequiredFieldError (error )
@@ -88,43 +169,45 @@ def _get_tables_for_database(self, database_item):
88169 return tables
89170
90171 @api (version = "3.5" )
91- def populate_permissions (self , item ) :
172+ def populate_permissions (self , item : DatabaseItem ) -> None :
92173 self ._permissions .populate (item )
93174
94175 @api (version = "3.5" )
95- def update_permissions (self , item , rules ) :
176+ def update_permissions (self , item : DatabaseItem , rules : list [ PermissionsRule ]) -> list [ PermissionsRule ] :
96177 return self ._permissions .update (item , rules )
97178
98179 @api (version = "3.5" )
99- def delete_permission (self , item , rules ) :
180+ def delete_permission (self , item : DatabaseItem , rules : list [ PermissionsRule ]) -> None :
100181 self ._permissions .delete (item , rules )
101182
102183 @api (version = "3.5" )
103- def populate_table_default_permissions (self , item ):
184+ def populate_table_default_permissions (self , item : DatabaseItem ):
104185 self ._default_permissions .populate_default_permissions (item , Resource .Table )
105186
106187 @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 )
109192
110193 @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 )
113196
114197 @api (version = "3.5" )
115- def populate_dqw (self , item ) :
198+ def populate_dqw (self , item : DatabaseItem ) -> None :
116199 self ._data_quality_warnings .populate (item )
117200
118201 @api (version = "3.5" )
119- def update_dqw (self , item , warning ) :
202+ def update_dqw (self , item : DatabaseItem , warning : "DQWItem" ) -> list [ "DQWItem" ] :
120203 return self ._data_quality_warnings .update (item , warning )
121204
122205 @api (version = "3.5" )
123- def add_dqw (self , item , warning ) :
206+ def add_dqw (self , item : DatabaseItem , warning : "DQWItem" ) -> list [ "DQWItem" ] :
124207 return self ._data_quality_warnings .add (item , warning )
125208
126209 @api (version = "3.5" )
127- def delete_dqw (self , item ) :
210+ def delete_dqw (self , item : DatabaseItem ) -> None :
128211 self ._data_quality_warnings .clear (item )
129212
130213 @api (version = "3.9" )
0 commit comments