tableauserverclient 0.33__py3-none-any.whl → 0.35__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.
- tableauserverclient/__init__.py +33 -23
- tableauserverclient/{_version.py → bin/_version.py} +3 -3
- tableauserverclient/config.py +5 -3
- tableauserverclient/models/column_item.py +1 -1
- tableauserverclient/models/connection_credentials.py +18 -2
- tableauserverclient/models/connection_item.py +44 -6
- tableauserverclient/models/custom_view_item.py +78 -11
- tableauserverclient/models/data_acceleration_report_item.py +2 -2
- tableauserverclient/models/data_alert_item.py +5 -5
- tableauserverclient/models/data_freshness_policy_item.py +6 -6
- tableauserverclient/models/database_item.py +3 -3
- tableauserverclient/models/datasource_item.py +10 -10
- tableauserverclient/models/dqw_item.py +1 -1
- tableauserverclient/models/favorites_item.py +5 -6
- tableauserverclient/models/fileupload_item.py +1 -1
- tableauserverclient/models/flow_item.py +54 -9
- tableauserverclient/models/flow_run_item.py +3 -3
- tableauserverclient/models/group_item.py +44 -4
- tableauserverclient/models/groupset_item.py +4 -4
- tableauserverclient/models/interval_item.py +9 -9
- tableauserverclient/models/job_item.py +73 -8
- tableauserverclient/models/linked_tasks_item.py +5 -5
- tableauserverclient/models/metric_item.py +5 -5
- tableauserverclient/models/pagination_item.py +1 -1
- tableauserverclient/models/permissions_item.py +12 -10
- tableauserverclient/models/project_item.py +73 -19
- tableauserverclient/models/property_decorators.py +12 -11
- tableauserverclient/models/reference_item.py +2 -2
- tableauserverclient/models/revision_item.py +3 -3
- tableauserverclient/models/schedule_item.py +2 -2
- tableauserverclient/models/server_info_item.py +26 -6
- tableauserverclient/models/site_item.py +69 -3
- tableauserverclient/models/subscription_item.py +3 -3
- tableauserverclient/models/table_item.py +1 -1
- tableauserverclient/models/tableau_auth.py +115 -5
- tableauserverclient/models/tableau_types.py +2 -2
- tableauserverclient/models/tag_item.py +3 -4
- tableauserverclient/models/task_item.py +34 -4
- tableauserverclient/models/user_item.py +47 -17
- tableauserverclient/models/view_item.py +66 -13
- tableauserverclient/models/virtual_connection_item.py +6 -5
- tableauserverclient/models/webhook_item.py +39 -6
- tableauserverclient/models/workbook_item.py +116 -13
- tableauserverclient/namespace.py +1 -1
- tableauserverclient/server/__init__.py +2 -1
- tableauserverclient/server/endpoint/auth_endpoint.py +69 -10
- tableauserverclient/server/endpoint/custom_views_endpoint.py +258 -29
- tableauserverclient/server/endpoint/data_acceleration_report_endpoint.py +2 -2
- tableauserverclient/server/endpoint/data_alert_endpoint.py +14 -14
- tableauserverclient/server/endpoint/databases_endpoint.py +13 -12
- tableauserverclient/server/endpoint/datasources_endpoint.py +61 -62
- tableauserverclient/server/endpoint/default_permissions_endpoint.py +19 -18
- tableauserverclient/server/endpoint/dqw_endpoint.py +9 -9
- tableauserverclient/server/endpoint/endpoint.py +19 -21
- tableauserverclient/server/endpoint/exceptions.py +23 -7
- tableauserverclient/server/endpoint/favorites_endpoint.py +31 -31
- tableauserverclient/server/endpoint/fileuploads_endpoint.py +9 -11
- tableauserverclient/server/endpoint/flow_runs_endpoint.py +15 -13
- tableauserverclient/server/endpoint/flow_task_endpoint.py +2 -2
- tableauserverclient/server/endpoint/flows_endpoint.py +344 -29
- tableauserverclient/server/endpoint/groups_endpoint.py +342 -27
- tableauserverclient/server/endpoint/groupsets_endpoint.py +2 -2
- tableauserverclient/server/endpoint/jobs_endpoint.py +116 -7
- tableauserverclient/server/endpoint/linked_tasks_endpoint.py +2 -2
- tableauserverclient/server/endpoint/metadata_endpoint.py +2 -2
- tableauserverclient/server/endpoint/metrics_endpoint.py +10 -10
- tableauserverclient/server/endpoint/permissions_endpoint.py +13 -15
- tableauserverclient/server/endpoint/projects_endpoint.py +681 -30
- tableauserverclient/server/endpoint/resource_tagger.py +14 -13
- tableauserverclient/server/endpoint/schedules_endpoint.py +17 -18
- tableauserverclient/server/endpoint/server_info_endpoint.py +40 -5
- tableauserverclient/server/endpoint/sites_endpoint.py +282 -17
- tableauserverclient/server/endpoint/subscriptions_endpoint.py +10 -10
- tableauserverclient/server/endpoint/tables_endpoint.py +15 -14
- tableauserverclient/server/endpoint/tasks_endpoint.py +86 -8
- tableauserverclient/server/endpoint/users_endpoint.py +366 -19
- tableauserverclient/server/endpoint/views_endpoint.py +262 -20
- tableauserverclient/server/endpoint/virtual_connections_endpoint.py +6 -5
- tableauserverclient/server/endpoint/webhooks_endpoint.py +88 -11
- tableauserverclient/server/endpoint/workbooks_endpoint.py +653 -65
- tableauserverclient/server/filter.py +2 -2
- tableauserverclient/server/pager.py +29 -6
- tableauserverclient/server/query.py +68 -19
- tableauserverclient/server/request_factory.py +57 -37
- tableauserverclient/server/request_options.py +243 -141
- tableauserverclient/server/server.py +76 -10
- tableauserverclient/server/sort.py +16 -2
- {tableauserverclient-0.33.dist-info → tableauserverclient-0.35.dist-info}/METADATA +7 -7
- tableauserverclient-0.35.dist-info/RECORD +106 -0
- {tableauserverclient-0.33.dist-info → tableauserverclient-0.35.dist-info}/WHEEL +1 -1
- tableauserverclient-0.33.dist-info/RECORD +0 -106
- {tableauserverclient-0.33.dist-info → tableauserverclient-0.35.dist-info}/LICENSE +0 -0
- {tableauserverclient-0.33.dist-info → tableauserverclient-0.35.dist-info}/LICENSE.versioneer +0 -0
- {tableauserverclient-0.33.dist-info → tableauserverclient-0.35.dist-info}/top_level.txt +0 -0
|
@@ -50,11 +50,11 @@ def get_page_info(result):
|
|
|
50
50
|
class Metadata(Endpoint):
|
|
51
51
|
@property
|
|
52
52
|
def baseurl(self):
|
|
53
|
-
return "{
|
|
53
|
+
return f"{self.parent_srv.server_address}/api/metadata/graphql"
|
|
54
54
|
|
|
55
55
|
@property
|
|
56
56
|
def control_baseurl(self):
|
|
57
|
-
return "{
|
|
57
|
+
return f"{self.parent_srv.server_address}/api/metadata/v1/control"
|
|
58
58
|
|
|
59
59
|
@api("3.5")
|
|
60
60
|
def query(self, query, variables=None, abort_on_error=False, parameters=None):
|
|
@@ -8,7 +8,7 @@ from tableauserverclient.models import MetricItem, PaginationItem
|
|
|
8
8
|
|
|
9
9
|
import logging
|
|
10
10
|
|
|
11
|
-
from typing import
|
|
11
|
+
from typing import Optional, TYPE_CHECKING
|
|
12
12
|
|
|
13
13
|
if TYPE_CHECKING:
|
|
14
14
|
from ..request_options import RequestOptions
|
|
@@ -20,18 +20,18 @@ from tableauserverclient.helpers.logging import logger
|
|
|
20
20
|
|
|
21
21
|
class Metrics(QuerysetEndpoint[MetricItem]):
|
|
22
22
|
def __init__(self, parent_srv: "Server") -> None:
|
|
23
|
-
super(
|
|
23
|
+
super().__init__(parent_srv)
|
|
24
24
|
self._resource_tagger = _ResourceTagger(parent_srv)
|
|
25
25
|
self._permissions = _PermissionsEndpoint(parent_srv, lambda: self.baseurl)
|
|
26
26
|
self._data_quality_warnings = _DataQualityWarningEndpoint(self.parent_srv, "metric")
|
|
27
27
|
|
|
28
28
|
@property
|
|
29
29
|
def baseurl(self) -> str:
|
|
30
|
-
return "{
|
|
30
|
+
return f"{self.parent_srv.baseurl}/sites/{self.parent_srv.site_id}/metrics"
|
|
31
31
|
|
|
32
32
|
# Get all metrics
|
|
33
33
|
@api(version="3.9")
|
|
34
|
-
def get(self, req_options: Optional["RequestOptions"] = None) ->
|
|
34
|
+
def get(self, req_options: Optional["RequestOptions"] = None) -> tuple[list[MetricItem], PaginationItem]:
|
|
35
35
|
logger.info("Querying all metrics on site")
|
|
36
36
|
url = self.baseurl
|
|
37
37
|
server_response = self.get_request(url, req_options)
|
|
@@ -45,8 +45,8 @@ class Metrics(QuerysetEndpoint[MetricItem]):
|
|
|
45
45
|
if not metric_id:
|
|
46
46
|
error = "Metric ID undefined."
|
|
47
47
|
raise ValueError(error)
|
|
48
|
-
logger.info("Querying single metric (ID: {
|
|
49
|
-
url = "{
|
|
48
|
+
logger.info(f"Querying single metric (ID: {metric_id})")
|
|
49
|
+
url = f"{self.baseurl}/{metric_id}"
|
|
50
50
|
server_response = self.get_request(url)
|
|
51
51
|
return MetricItem.from_response(server_response.content, self.parent_srv.namespace)[0]
|
|
52
52
|
|
|
@@ -56,9 +56,9 @@ class Metrics(QuerysetEndpoint[MetricItem]):
|
|
|
56
56
|
if not metric_id:
|
|
57
57
|
error = "Metric ID undefined."
|
|
58
58
|
raise ValueError(error)
|
|
59
|
-
url = "{
|
|
59
|
+
url = f"{self.baseurl}/{metric_id}"
|
|
60
60
|
self.delete_request(url)
|
|
61
|
-
logger.info("Deleted single metric (ID: {
|
|
61
|
+
logger.info(f"Deleted single metric (ID: {metric_id})")
|
|
62
62
|
|
|
63
63
|
# Update metric
|
|
64
64
|
@api(version="3.9")
|
|
@@ -70,8 +70,8 @@ class Metrics(QuerysetEndpoint[MetricItem]):
|
|
|
70
70
|
self._resource_tagger.update_tags(self.baseurl, metric_item)
|
|
71
71
|
|
|
72
72
|
# Update the metric itself
|
|
73
|
-
url = "{
|
|
73
|
+
url = f"{self.baseurl}/{metric_item.id}"
|
|
74
74
|
update_req = RequestFactory.Metric.update_req(metric_item)
|
|
75
75
|
server_response = self.put_request(url, update_req)
|
|
76
|
-
logger.info("Updated metric item (ID: {
|
|
76
|
+
logger.info(f"Updated metric item (ID: {metric_item.id})")
|
|
77
77
|
return MetricItem.from_response(server_response.content, self.parent_srv.namespace)[0]
|
|
@@ -6,7 +6,7 @@ from tableauserverclient.models import TableauItem, PermissionsRule
|
|
|
6
6
|
from .endpoint import Endpoint
|
|
7
7
|
from .exceptions import MissingRequiredFieldError
|
|
8
8
|
|
|
9
|
-
from typing import Callable, TYPE_CHECKING,
|
|
9
|
+
from typing import Callable, TYPE_CHECKING, Optional, Union
|
|
10
10
|
|
|
11
11
|
from tableauserverclient.helpers.logging import logger
|
|
12
12
|
|
|
@@ -25,7 +25,7 @@ class _PermissionsEndpoint(Endpoint):
|
|
|
25
25
|
"""
|
|
26
26
|
|
|
27
27
|
def __init__(self, parent_srv: "Server", owner_baseurl: Callable[[], str]) -> None:
|
|
28
|
-
super(
|
|
28
|
+
super().__init__(parent_srv)
|
|
29
29
|
|
|
30
30
|
# owner_baseurl is the baseurl of the parent. The MUST be a lambda
|
|
31
31
|
# since we don't know the full site URL until we sign in. If
|
|
@@ -33,18 +33,18 @@ class _PermissionsEndpoint(Endpoint):
|
|
|
33
33
|
self.owner_baseurl = owner_baseurl
|
|
34
34
|
|
|
35
35
|
def __str__(self):
|
|
36
|
-
return "<PermissionsEndpoint baseurl={}>"
|
|
36
|
+
return f"<PermissionsEndpoint baseurl={self.owner_baseurl}>"
|
|
37
37
|
|
|
38
|
-
def update(self, resource: TableauItem, permissions:
|
|
39
|
-
url = "{
|
|
38
|
+
def update(self, resource: TableauItem, permissions: list[PermissionsRule]) -> list[PermissionsRule]:
|
|
39
|
+
url = f"{self.owner_baseurl()}/{resource.id}/permissions"
|
|
40
40
|
update_req = RequestFactory.Permission.add_req(permissions)
|
|
41
41
|
response = self.put_request(url, update_req)
|
|
42
42
|
permissions = PermissionsRule.from_response(response.content, self.parent_srv.namespace)
|
|
43
|
-
logger.info("Updated permissions for resource {
|
|
43
|
+
logger.info(f"Updated permissions for resource {resource.id}: {permissions}")
|
|
44
44
|
|
|
45
45
|
return permissions
|
|
46
46
|
|
|
47
|
-
def delete(self, resource: TableauItem, rules: Union[PermissionsRule,
|
|
47
|
+
def delete(self, resource: TableauItem, rules: Union[PermissionsRule, list[PermissionsRule]]):
|
|
48
48
|
# Delete is the only endpoint that doesn't take a list of rules
|
|
49
49
|
# so let's fake it to keep it consistent
|
|
50
50
|
# TODO that means we need error handling around the call
|
|
@@ -54,7 +54,7 @@ class _PermissionsEndpoint(Endpoint):
|
|
|
54
54
|
for rule in rules:
|
|
55
55
|
for capability, mode in rule.capabilities.items():
|
|
56
56
|
"/permissions/groups/group-id/capability-name/capability-mode"
|
|
57
|
-
url = "{
|
|
57
|
+
url = "{}/{}/permissions/{}/{}/{}/{}".format(
|
|
58
58
|
self.owner_baseurl(),
|
|
59
59
|
resource.id,
|
|
60
60
|
rule.grantee.tag_name + "s",
|
|
@@ -63,13 +63,11 @@ class _PermissionsEndpoint(Endpoint):
|
|
|
63
63
|
mode,
|
|
64
64
|
)
|
|
65
65
|
|
|
66
|
-
logger.debug("Removing {
|
|
66
|
+
logger.debug(f"Removing {mode} permission for capability {capability}")
|
|
67
67
|
|
|
68
68
|
self.delete_request(url)
|
|
69
69
|
|
|
70
|
-
logger.info(
|
|
71
|
-
"Deleted permission for {0} {1} item {2}".format(rule.grantee.tag_name, rule.grantee.id, resource.id)
|
|
72
|
-
)
|
|
70
|
+
logger.info(f"Deleted permission for {rule.grantee.tag_name} {rule.grantee.id} item {resource.id}")
|
|
73
71
|
|
|
74
72
|
def populate(self, item: TableauItem):
|
|
75
73
|
if not item.id:
|
|
@@ -80,12 +78,12 @@ class _PermissionsEndpoint(Endpoint):
|
|
|
80
78
|
return self._get_permissions(item)
|
|
81
79
|
|
|
82
80
|
item._set_permissions(permission_fetcher)
|
|
83
|
-
logger.info("Populated permissions for item (ID: {
|
|
81
|
+
logger.info(f"Populated permissions for item (ID: {item.id})")
|
|
84
82
|
|
|
85
83
|
def _get_permissions(self, item: TableauItem, req_options: Optional["RequestOptions"] = None):
|
|
86
|
-
url = "{
|
|
84
|
+
url = f"{self.owner_baseurl()}/{item.id}/permissions"
|
|
87
85
|
server_response = self.get_request(url, req_options)
|
|
88
86
|
permissions = PermissionsRule.from_response(server_response.content, self.parent_srv.namespace)
|
|
89
|
-
logger.info("Permissions for resource {
|
|
87
|
+
logger.info(f"Permissions for resource {item.id}: {permissions}")
|
|
90
88
|
|
|
91
89
|
return permissions
|