tableauserverclient 0.36__py3-none-any.whl → 0.38__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. tableauserverclient/__init__.py +6 -0
  2. tableauserverclient/bin/_version.py +3 -3
  3. tableauserverclient/helpers/strings.py +25 -1
  4. tableauserverclient/models/__init__.py +6 -1
  5. tableauserverclient/models/connection_item.py +3 -3
  6. tableauserverclient/models/datasource_item.py +218 -23
  7. tableauserverclient/models/extract_item.py +82 -0
  8. tableauserverclient/models/flow_item.py +2 -2
  9. tableauserverclient/models/group_item.py +11 -0
  10. tableauserverclient/models/interval_item.py +40 -0
  11. tableauserverclient/models/job_item.py +1 -0
  12. tableauserverclient/models/location_item.py +53 -0
  13. tableauserverclient/models/project_item.py +138 -27
  14. tableauserverclient/models/schedule_item.py +57 -0
  15. tableauserverclient/models/site_item.py +28 -0
  16. tableauserverclient/models/table_item.py +7 -3
  17. tableauserverclient/models/tableau_types.py +13 -1
  18. tableauserverclient/models/user_item.py +101 -1
  19. tableauserverclient/models/view_item.py +79 -5
  20. tableauserverclient/models/workbook_item.py +151 -1
  21. tableauserverclient/server/__init__.py +2 -0
  22. tableauserverclient/server/endpoint/databases_endpoint.py +101 -18
  23. tableauserverclient/server/endpoint/datasources_endpoint.py +562 -7
  24. tableauserverclient/server/endpoint/dqw_endpoint.py +16 -6
  25. tableauserverclient/server/endpoint/endpoint.py +39 -0
  26. tableauserverclient/server/endpoint/exceptions.py +4 -0
  27. tableauserverclient/server/endpoint/fileuploads_endpoint.py +1 -1
  28. tableauserverclient/server/endpoint/groupsets_endpoint.py +2 -2
  29. tableauserverclient/server/endpoint/jobs_endpoint.py +1 -1
  30. tableauserverclient/server/endpoint/schedules_endpoint.py +132 -2
  31. tableauserverclient/server/endpoint/sites_endpoint.py +18 -1
  32. tableauserverclient/server/endpoint/tables_endpoint.py +140 -17
  33. tableauserverclient/server/endpoint/users_endpoint.py +22 -5
  34. tableauserverclient/server/endpoint/views_endpoint.py +5 -1
  35. tableauserverclient/server/endpoint/workbooks_endpoint.py +24 -10
  36. tableauserverclient/server/query.py +36 -0
  37. tableauserverclient/server/request_factory.py +16 -5
  38. tableauserverclient/server/request_options.py +162 -2
  39. tableauserverclient/server/server.py +42 -0
  40. {tableauserverclient-0.36.dist-info → tableauserverclient-0.38.dist-info}/METADATA +3 -2
  41. {tableauserverclient-0.36.dist-info → tableauserverclient-0.38.dist-info}/RECORD +45 -43
  42. {tableauserverclient-0.36.dist-info → tableauserverclient-0.38.dist-info}/WHEEL +1 -1
  43. {tableauserverclient-0.36.dist-info → tableauserverclient-0.38.dist-info/licenses}/LICENSE +0 -0
  44. {tableauserverclient-0.36.dist-info → tableauserverclient-0.38.dist-info/licenses}/LICENSE.versioneer +0 -0
  45. {tableauserverclient-0.36.dist-info → tableauserverclient-0.38.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,8 @@
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,6 +14,10 @@ from tableauserverclient.models import DatabaseItem, TableItem, PaginationItem,
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 @@ class Databases(Endpoint, TaggingMixin):
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 @@ class Databases(Endpoint, TaggingMixin):
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 @@ class Databases(Endpoint, TaggingMixin):
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 @@ class Databases(Endpoint, TaggingMixin):
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 @@ class Databases(Endpoint, TaggingMixin):
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")