tableauserverclient 0.37__py3-none-any.whl → 0.39__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/bin/_version.py → _version.py +3 -3
- bin/__init__.py +3 -0
- bin/_version.py +21 -0
- {tableauserverclient/helpers → helpers}/strings.py +25 -1
- {tableauserverclient/models → models}/__init__.py +15 -1
- models/collection_item.py +52 -0
- {tableauserverclient/models → models}/connection_item.py +16 -2
- {tableauserverclient/models → models}/custom_view_item.py +8 -0
- {tableauserverclient/models → models}/data_freshness_policy_item.py +3 -3
- {tableauserverclient/models → models}/datasource_item.py +113 -3
- models/extensions_item.py +186 -0
- models/extract_item.py +82 -0
- {tableauserverclient/models → models}/favorites_item.py +21 -8
- {tableauserverclient/models → models}/flow_item.py +3 -3
- {tableauserverclient/models → models}/group_item.py +18 -1
- {tableauserverclient/models → models}/groupset_item.py +14 -0
- {tableauserverclient/models → models}/interval_item.py +42 -1
- models/location_item.py +53 -0
- models/oidc_item.py +82 -0
- {tableauserverclient/models → models}/permissions_item.py +2 -0
- {tableauserverclient/models → models}/project_item.py +141 -29
- {tableauserverclient/models → models}/property_decorators.py +2 -2
- {tableauserverclient/models → models}/reference_item.py +12 -6
- {tableauserverclient/models → models}/schedule_item.py +67 -1
- {tableauserverclient/models → models}/site_item.py +54 -0
- {tableauserverclient/models → models}/table_item.py +7 -3
- {tableauserverclient/models → models}/tableau_auth.py +13 -6
- {tableauserverclient/models → models}/tableau_types.py +13 -1
- {tableauserverclient/models → models}/user_item.py +111 -4
- {tableauserverclient/models → models}/view_item.py +79 -5
- {tableauserverclient/models → models}/workbook_item.py +153 -3
- {tableauserverclient/server → server}/endpoint/__init__.py +4 -0
- {tableauserverclient/server → server}/endpoint/databases_endpoint.py +101 -18
- {tableauserverclient/server → server}/endpoint/datasources_endpoint.py +155 -25
- {tableauserverclient/server → server}/endpoint/dqw_endpoint.py +16 -6
- {tableauserverclient/server → server}/endpoint/endpoint.py +39 -0
- server/endpoint/extensions_endpoint.py +79 -0
- {tableauserverclient/server → server}/endpoint/flow_task_endpoint.py +1 -1
- {tableauserverclient/server → server}/endpoint/flows_endpoint.py +5 -4
- server/endpoint/oidc_endpoint.py +157 -0
- {tableauserverclient/server → server}/endpoint/projects_endpoint.py +12 -0
- server/endpoint/schedules_endpoint.py +328 -0
- {tableauserverclient/server → server}/endpoint/sites_endpoint.py +18 -1
- {tableauserverclient/server → server}/endpoint/tables_endpoint.py +140 -17
- {tableauserverclient/server → server}/endpoint/users_endpoint.py +296 -10
- {tableauserverclient/server → server}/endpoint/views_endpoint.py +23 -0
- {tableauserverclient/server → server}/endpoint/workbooks_endpoint.py +124 -9
- {tableauserverclient/server → server}/query.py +36 -0
- {tableauserverclient/server → server}/request_factory.py +286 -2
- {tableauserverclient/server → server}/request_options.py +139 -3
- {tableauserverclient/server → server}/server.py +46 -0
- {tableauserverclient-0.37.dist-info → tableauserverclient-0.39.dist-info}/METADATA +5 -26
- tableauserverclient-0.39.dist-info/RECORD +107 -0
- {tableauserverclient-0.37.dist-info → tableauserverclient-0.39.dist-info}/WHEEL +1 -1
- tableauserverclient-0.39.dist-info/top_level.txt +4 -0
- tableauserverclient/__init__.py +0 -141
- tableauserverclient/config.py +0 -27
- tableauserverclient/datetime_helpers.py +0 -45
- tableauserverclient/exponential_backoff.py +0 -30
- tableauserverclient/filesys_helpers.py +0 -63
- tableauserverclient/namespace.py +0 -37
- tableauserverclient/py.typed +0 -0
- tableauserverclient/server/endpoint/schedules_endpoint.py +0 -151
- tableauserverclient-0.37.dist-info/RECORD +0 -106
- tableauserverclient-0.37.dist-info/licenses/LICENSE.versioneer +0 -7
- tableauserverclient-0.37.dist-info/top_level.txt +0 -1
- {tableauserverclient/helpers → helpers}/__init__.py +0 -0
- {tableauserverclient/helpers → helpers}/headers.py +0 -0
- {tableauserverclient/helpers → helpers}/logging.py +0 -0
- {tableauserverclient/models → models}/column_item.py +0 -0
- {tableauserverclient/models → models}/connection_credentials.py +0 -0
- {tableauserverclient/models → models}/data_acceleration_report_item.py +0 -0
- {tableauserverclient/models → models}/data_alert_item.py +0 -0
- {tableauserverclient/models → models}/database_item.py +0 -0
- {tableauserverclient/models → models}/dqw_item.py +0 -0
- {tableauserverclient/models → models}/exceptions.py +0 -0
- {tableauserverclient/models → models}/fileupload_item.py +0 -0
- {tableauserverclient/models → models}/flow_run_item.py +0 -0
- {tableauserverclient/models → models}/job_item.py +0 -0
- {tableauserverclient/models → models}/linked_tasks_item.py +0 -0
- {tableauserverclient/models → models}/metric_item.py +0 -0
- {tableauserverclient/models → models}/pagination_item.py +0 -0
- {tableauserverclient/models → models}/revision_item.py +0 -0
- {tableauserverclient/models → models}/server_info_item.py +0 -0
- {tableauserverclient/models → models}/subscription_item.py +0 -0
- {tableauserverclient/models → models}/tag_item.py +0 -0
- {tableauserverclient/models → models}/target.py +0 -0
- {tableauserverclient/models → models}/task_item.py +0 -0
- {tableauserverclient/models → models}/virtual_connection_item.py +0 -0
- {tableauserverclient/models → models}/webhook_item.py +0 -0
- {tableauserverclient/server → server}/__init__.py +0 -0
- {tableauserverclient/server → server}/endpoint/auth_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/custom_views_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/data_acceleration_report_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/data_alert_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/default_permissions_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/exceptions.py +0 -0
- {tableauserverclient/server → server}/endpoint/favorites_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/fileuploads_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/flow_runs_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/groups_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/groupsets_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/jobs_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/linked_tasks_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/metadata_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/metrics_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/permissions_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/resource_tagger.py +0 -0
- {tableauserverclient/server → server}/endpoint/server_info_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/subscriptions_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/tasks_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/virtual_connections_endpoint.py +0 -0
- {tableauserverclient/server → server}/endpoint/webhooks_endpoint.py +0 -0
- {tableauserverclient/server → server}/exceptions.py +0 -0
- {tableauserverclient/server → server}/filter.py +0 -0
- {tableauserverclient/server → server}/pager.py +0 -0
- {tableauserverclient/server → server}/sort.py +0 -0
- {tableauserverclient-0.37.dist-info → tableauserverclient-0.39.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import time
|
|
2
|
-
|
|
3
|
-
# Polling for server-side events (such as job completion) uses exponential backoff for the sleep intervals between polls
|
|
4
|
-
ASYNC_POLL_MIN_INTERVAL = 0.5
|
|
5
|
-
ASYNC_POLL_MAX_INTERVAL = 30
|
|
6
|
-
ASYNC_POLL_BACKOFF_FACTOR = 1.4
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class ExponentialBackoffTimer:
|
|
10
|
-
def __init__(self, *, timeout=None):
|
|
11
|
-
self.start_time = time.time()
|
|
12
|
-
self.timeout = timeout
|
|
13
|
-
self.current_sleep_interval = ASYNC_POLL_MIN_INTERVAL
|
|
14
|
-
|
|
15
|
-
def sleep(self):
|
|
16
|
-
max_sleep_time = ASYNC_POLL_MAX_INTERVAL
|
|
17
|
-
if self.timeout is not None:
|
|
18
|
-
elapsed = time.time() - self.start_time
|
|
19
|
-
if elapsed >= self.timeout:
|
|
20
|
-
raise TimeoutError(f"Timeout after {elapsed} seconds waiting for asynchronous event")
|
|
21
|
-
remaining_time = self.timeout - elapsed
|
|
22
|
-
# Usually, we would sleep for `ASYNC_POLL_MAX_INTERVAL`, but we don't want to sleep over the timeout
|
|
23
|
-
max_sleep_time = min(ASYNC_POLL_MAX_INTERVAL, remaining_time)
|
|
24
|
-
# We want to sleep at least for `ASYNC_POLL_MIN_INTERVAL`. This is important to ensure that, as we get
|
|
25
|
-
# closer to the timeout, we don't accidentally wake up multiple times and hit the server in rapid succession
|
|
26
|
-
# due to waking up to early from the `sleep`.
|
|
27
|
-
max_sleep_time = max(max_sleep_time, ASYNC_POLL_MIN_INTERVAL)
|
|
28
|
-
|
|
29
|
-
time.sleep(min(self.current_sleep_interval, max_sleep_time))
|
|
30
|
-
self.current_sleep_interval *= ASYNC_POLL_BACKOFF_FACTOR
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
|
|
3
|
-
ALLOWED_SPECIAL = (" ", ".", "_", "-")
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def to_filename(string_to_sanitize):
|
|
7
|
-
sanitized = (c for c in string_to_sanitize if c.isalnum() or c in ALLOWED_SPECIAL)
|
|
8
|
-
return "".join(sanitized)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def make_download_path(filepath, filename):
|
|
12
|
-
download_path = None
|
|
13
|
-
|
|
14
|
-
if filepath is None:
|
|
15
|
-
download_path = filename
|
|
16
|
-
|
|
17
|
-
elif os.path.isdir(filepath):
|
|
18
|
-
download_path = os.path.join(filepath, filename)
|
|
19
|
-
|
|
20
|
-
else:
|
|
21
|
-
download_path = filepath + os.path.splitext(filename)[1]
|
|
22
|
-
|
|
23
|
-
return download_path
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
def get_file_object_size(file):
|
|
27
|
-
# Returns the size of a file object
|
|
28
|
-
file.seek(0, os.SEEK_END)
|
|
29
|
-
file_size = file.tell()
|
|
30
|
-
file.seek(0)
|
|
31
|
-
return file_size
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def get_file_type(file):
|
|
35
|
-
# Tableau workbooks (twb) and data sources (tds) are both stored as xml files.
|
|
36
|
-
# Packaged workbooks (twbx) and data sources (tdsx) are zip files
|
|
37
|
-
# containing original files accompanied with supporting local files.
|
|
38
|
-
|
|
39
|
-
# This reference lists magic file signatures: https://www.garykessler.net/library/file_sigs.html
|
|
40
|
-
MAGIC_BYTES = {
|
|
41
|
-
"zip": bytes.fromhex("504b0304"),
|
|
42
|
-
"tde": bytes.fromhex("20020162"),
|
|
43
|
-
"xml": bytes.fromhex("3c3f786d6c20"),
|
|
44
|
-
"hyper": bytes.fromhex("487970657208000001000000"),
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
# Peek first bytes of a file
|
|
48
|
-
first_bytes = file.read(32)
|
|
49
|
-
|
|
50
|
-
file_type = None
|
|
51
|
-
for ft, signature in MAGIC_BYTES.items():
|
|
52
|
-
if first_bytes.startswith(signature):
|
|
53
|
-
file_type = ft
|
|
54
|
-
break
|
|
55
|
-
|
|
56
|
-
# Return pointer back to start
|
|
57
|
-
file.seek(0)
|
|
58
|
-
|
|
59
|
-
if file_type is None:
|
|
60
|
-
error = "Unknown file type!"
|
|
61
|
-
raise ValueError(error)
|
|
62
|
-
|
|
63
|
-
return file_type
|
tableauserverclient/namespace.py
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import re
|
|
2
|
-
|
|
3
|
-
from defusedxml.ElementTree import fromstring
|
|
4
|
-
|
|
5
|
-
OLD_NAMESPACE = "http://tableausoftware.com/api"
|
|
6
|
-
NEW_NAMESPACE = "http://tableau.com/api"
|
|
7
|
-
NAMESPACE_RE = re.compile(r"\{(.*?)\}")
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class UnknownNamespaceError(Exception):
|
|
11
|
-
pass
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class Namespace:
|
|
15
|
-
def __init__(self):
|
|
16
|
-
self._namespace = {"t": NEW_NAMESPACE}
|
|
17
|
-
self._detected = False
|
|
18
|
-
|
|
19
|
-
def __call__(self):
|
|
20
|
-
return self._namespace
|
|
21
|
-
|
|
22
|
-
def detect(self, xml):
|
|
23
|
-
if self._detected:
|
|
24
|
-
return
|
|
25
|
-
|
|
26
|
-
if not xml.startswith(b"<?xml"):
|
|
27
|
-
return # Not an xml file, don't detect anything
|
|
28
|
-
|
|
29
|
-
root = fromstring(xml)
|
|
30
|
-
matches = NAMESPACE_RE.match(root.tag)
|
|
31
|
-
if matches:
|
|
32
|
-
detected_ns = matches.group(1)
|
|
33
|
-
if detected_ns in (OLD_NAMESPACE, NEW_NAMESPACE):
|
|
34
|
-
self._namespace = {"t": detected_ns}
|
|
35
|
-
self._detected = True
|
|
36
|
-
else:
|
|
37
|
-
raise UnknownNamespaceError(detected_ns)
|
tableauserverclient/py.typed
DELETED
|
File without changes
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import copy
|
|
2
|
-
import logging
|
|
3
|
-
import warnings
|
|
4
|
-
from collections import namedtuple
|
|
5
|
-
from typing import TYPE_CHECKING, Callable, Optional, Union
|
|
6
|
-
|
|
7
|
-
from .endpoint import Endpoint, api, parameter_added_in
|
|
8
|
-
from .exceptions import MissingRequiredFieldError
|
|
9
|
-
from tableauserverclient.server import RequestFactory
|
|
10
|
-
from tableauserverclient.models import PaginationItem, ScheduleItem, TaskItem
|
|
11
|
-
|
|
12
|
-
from tableauserverclient.helpers.logging import logger
|
|
13
|
-
|
|
14
|
-
AddResponse = namedtuple("AddResponse", ("result", "error", "warnings", "task_created"))
|
|
15
|
-
OK = AddResponse(result=True, error=None, warnings=None, task_created=None)
|
|
16
|
-
|
|
17
|
-
if TYPE_CHECKING:
|
|
18
|
-
from ..request_options import RequestOptions
|
|
19
|
-
from ...models import DatasourceItem, WorkbookItem, FlowItem
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class Schedules(Endpoint):
|
|
23
|
-
@property
|
|
24
|
-
def baseurl(self) -> str:
|
|
25
|
-
return f"{self.parent_srv.baseurl}/schedules"
|
|
26
|
-
|
|
27
|
-
@property
|
|
28
|
-
def siteurl(self) -> str:
|
|
29
|
-
return f"{self.parent_srv.baseurl}/sites/{self.parent_srv.site_id}/schedules"
|
|
30
|
-
|
|
31
|
-
@api(version="2.3")
|
|
32
|
-
def get(self, req_options: Optional["RequestOptions"] = None) -> tuple[list[ScheduleItem], PaginationItem]:
|
|
33
|
-
logger.info("Querying all schedules")
|
|
34
|
-
url = self.baseurl
|
|
35
|
-
server_response = self.get_request(url, req_options)
|
|
36
|
-
pagination_item = PaginationItem.from_response(server_response.content, self.parent_srv.namespace)
|
|
37
|
-
all_schedule_items = ScheduleItem.from_response(server_response.content, self.parent_srv.namespace)
|
|
38
|
-
return all_schedule_items, pagination_item
|
|
39
|
-
|
|
40
|
-
@api(version="3.8")
|
|
41
|
-
def get_by_id(self, schedule_id):
|
|
42
|
-
if not schedule_id:
|
|
43
|
-
error = "No Schedule ID provided"
|
|
44
|
-
raise ValueError(error)
|
|
45
|
-
logger.info(f"Querying a single schedule by id ({schedule_id})")
|
|
46
|
-
url = f"{self.baseurl}/{schedule_id}"
|
|
47
|
-
server_response = self.get_request(url)
|
|
48
|
-
return ScheduleItem.from_response(server_response.content, self.parent_srv.namespace)[0]
|
|
49
|
-
|
|
50
|
-
@api(version="2.3")
|
|
51
|
-
def delete(self, schedule_id: str) -> None:
|
|
52
|
-
if not schedule_id:
|
|
53
|
-
error = "Schedule ID undefined"
|
|
54
|
-
raise ValueError(error)
|
|
55
|
-
url = f"{self.baseurl}/{schedule_id}"
|
|
56
|
-
self.delete_request(url)
|
|
57
|
-
logger.info(f"Deleted single schedule (ID: {schedule_id})")
|
|
58
|
-
|
|
59
|
-
@api(version="2.3")
|
|
60
|
-
def update(self, schedule_item: ScheduleItem) -> ScheduleItem:
|
|
61
|
-
if not schedule_item.id:
|
|
62
|
-
error = "Schedule item missing ID."
|
|
63
|
-
raise MissingRequiredFieldError(error)
|
|
64
|
-
|
|
65
|
-
url = f"{self.baseurl}/{schedule_item.id}"
|
|
66
|
-
update_req = RequestFactory.Schedule.update_req(schedule_item)
|
|
67
|
-
server_response = self.put_request(url, update_req)
|
|
68
|
-
logger.info(f"Updated schedule item (ID: {schedule_item.id})")
|
|
69
|
-
updated_schedule = copy.copy(schedule_item)
|
|
70
|
-
return updated_schedule._parse_common_tags(server_response.content, self.parent_srv.namespace)
|
|
71
|
-
|
|
72
|
-
@api(version="2.3")
|
|
73
|
-
def create(self, schedule_item: ScheduleItem) -> ScheduleItem:
|
|
74
|
-
if schedule_item.interval_item is None:
|
|
75
|
-
error = "Interval item must be defined."
|
|
76
|
-
raise MissingRequiredFieldError(error)
|
|
77
|
-
|
|
78
|
-
url = self.baseurl
|
|
79
|
-
create_req = RequestFactory.Schedule.create_req(schedule_item)
|
|
80
|
-
server_response = self.post_request(url, create_req)
|
|
81
|
-
new_schedule = ScheduleItem.from_response(server_response.content, self.parent_srv.namespace)[0]
|
|
82
|
-
logger.info(f"Created new schedule (ID: {new_schedule.id})")
|
|
83
|
-
return new_schedule
|
|
84
|
-
|
|
85
|
-
@api(version="2.8")
|
|
86
|
-
@parameter_added_in(flow="3.3")
|
|
87
|
-
def add_to_schedule(
|
|
88
|
-
self,
|
|
89
|
-
schedule_id: str,
|
|
90
|
-
workbook: Optional["WorkbookItem"] = None,
|
|
91
|
-
datasource: Optional["DatasourceItem"] = None,
|
|
92
|
-
flow: Optional["FlowItem"] = None,
|
|
93
|
-
task_type: Optional[str] = None,
|
|
94
|
-
) -> list[AddResponse]:
|
|
95
|
-
# There doesn't seem to be a good reason to allow one item of each type?
|
|
96
|
-
if workbook and datasource:
|
|
97
|
-
warnings.warn("Passing in multiple items for add_to_schedule will be deprecated", PendingDeprecationWarning)
|
|
98
|
-
items: list[
|
|
99
|
-
tuple[str, Union[WorkbookItem, FlowItem, DatasourceItem], str, Callable[[Optional[str], str], bytes], str]
|
|
100
|
-
] = []
|
|
101
|
-
|
|
102
|
-
if workbook is not None:
|
|
103
|
-
if not task_type:
|
|
104
|
-
task_type = TaskItem.Type.ExtractRefresh
|
|
105
|
-
items.append((schedule_id, workbook, "workbook", RequestFactory.Schedule.add_workbook_req, task_type))
|
|
106
|
-
if datasource is not None:
|
|
107
|
-
if not task_type:
|
|
108
|
-
task_type = TaskItem.Type.ExtractRefresh
|
|
109
|
-
items.append((schedule_id, datasource, "datasource", RequestFactory.Schedule.add_datasource_req, task_type))
|
|
110
|
-
if flow is not None and not (workbook or datasource): # Cannot pass a flow with any other type
|
|
111
|
-
if not task_type:
|
|
112
|
-
task_type = TaskItem.Type.RunFlow
|
|
113
|
-
items.append(
|
|
114
|
-
(schedule_id, flow, "flow", RequestFactory.Schedule.add_flow_req, task_type)
|
|
115
|
-
) # type:ignore[arg-type]
|
|
116
|
-
|
|
117
|
-
results = (self._add_to(*x) for x in items)
|
|
118
|
-
return [x for x in results if not x.result]
|
|
119
|
-
|
|
120
|
-
def _add_to(
|
|
121
|
-
self,
|
|
122
|
-
schedule_id,
|
|
123
|
-
resource: Union["DatasourceItem", "WorkbookItem", "FlowItem"],
|
|
124
|
-
type_: str,
|
|
125
|
-
req_factory: Callable[
|
|
126
|
-
[
|
|
127
|
-
str,
|
|
128
|
-
str,
|
|
129
|
-
],
|
|
130
|
-
bytes,
|
|
131
|
-
],
|
|
132
|
-
item_task_type,
|
|
133
|
-
) -> AddResponse:
|
|
134
|
-
id_ = resource.id
|
|
135
|
-
url = f"{self.siteurl}/{schedule_id}/{type_}s"
|
|
136
|
-
add_req = req_factory(id_, task_type=item_task_type) # type: ignore[call-arg, arg-type]
|
|
137
|
-
response = self.put_request(url, add_req)
|
|
138
|
-
|
|
139
|
-
error, warnings, task_created = ScheduleItem.parse_add_to_schedule_response(response, self.parent_srv.namespace)
|
|
140
|
-
if task_created:
|
|
141
|
-
logger.info(f"Added {type_} to {id_} to schedule {schedule_id}")
|
|
142
|
-
|
|
143
|
-
if error is not None or warnings is not None:
|
|
144
|
-
return AddResponse(
|
|
145
|
-
result=False,
|
|
146
|
-
error=error,
|
|
147
|
-
warnings=warnings,
|
|
148
|
-
task_created=task_created,
|
|
149
|
-
)
|
|
150
|
-
else:
|
|
151
|
-
return OK
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
tableauserverclient/__init__.py,sha256=ZtTKjguU2eckQI9_0jkH3UeQemmjVHzL_H_R2cOWjLs,2864
|
|
2
|
-
tableauserverclient/config.py,sha256=LcWVmZjkYMh1cKCKZm3VZItgKOoSLz1ai4PnVgbAtDA,713
|
|
3
|
-
tableauserverclient/datetime_helpers.py,sha256=_-gWz5I2_KHT5AzW_boD8meH6loTTKdK-_62h1MA6ko,884
|
|
4
|
-
tableauserverclient/exponential_backoff.py,sha256=HtAfbbVnYtiOe2_ZzKqZmsml40EDZBaC3bttif5qeG8,1474
|
|
5
|
-
tableauserverclient/filesys_helpers.py,sha256=hosTm9fpc9B9_VCDcAuyHA0A-f-MWs9_2utyRweuZ5I,1667
|
|
6
|
-
tableauserverclient/namespace.py,sha256=Zh6QtxNmqPkjRMsefHHX-ycS4r-egnrJ4-hdHvldBHw,963
|
|
7
|
-
tableauserverclient/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
-
tableauserverclient/bin/_version.py,sha256=HbFP26HrRF5QHyXZah-2Lx9AWzM1KlO7_InvfHE-jfs,496
|
|
9
|
-
tableauserverclient/helpers/__init__.py,sha256=llpqF9zV5dsP5hQt8dyop33Op5OzGmxW0BZibaSlCcM,23
|
|
10
|
-
tableauserverclient/helpers/headers.py,sha256=Pg-ZWSgV2Yp813BV1Tzo8F2Hn4P01zscla2RRM4yqNk,411
|
|
11
|
-
tableauserverclient/helpers/logging.py,sha256=5q_oR3wERHVXFXY6XDnLYML5-HdAPJTmqhH9IZg4VfY,113
|
|
12
|
-
tableauserverclient/helpers/strings.py,sha256=HRTP31HIdD3gFxDDHuBsmOl_8cLdh8fa3xLALgYsUAQ,1563
|
|
13
|
-
tableauserverclient/models/__init__.py,sha256=bU4eaOQ4I9h_JYn7IbhCZhHbMVvxdSUhMJeHg80apYA,4051
|
|
14
|
-
tableauserverclient/models/column_item.py,sha256=yUFzXNcnUPVo2imrhEBS4fMVAR5j2ZzksOk5t9XYW5s,1964
|
|
15
|
-
tableauserverclient/models/connection_credentials.py,sha256=CQ8FkkHW9MeTw8uArNhrU5mowtryWUddgEgEliqh3ys,2066
|
|
16
|
-
tableauserverclient/models/connection_item.py,sha256=LwZza3I5Zwx04BcLGWQXRcuZq5X_X86DDse6RMmrcr8,6002
|
|
17
|
-
tableauserverclient/models/custom_view_item.py,sha256=JZyq7jkt9WH-24eOV4PO2uGJxaSZ-5K05jL4UoZ8kYs,7771
|
|
18
|
-
tableauserverclient/models/data_acceleration_report_item.py,sha256=HFZROetfOWh-hMS48xBEHqYOViINHZR-EpcrP45_8AI,3386
|
|
19
|
-
tableauserverclient/models/data_alert_item.py,sha256=VZtRR-kqojq-mkrTgvay4WkPawj3-4jbSc0wBijmJhk,6444
|
|
20
|
-
tableauserverclient/models/data_freshness_policy_item.py,sha256=UdaEmwVL_q364Do_2dOnkCSX-oKnvjKfsYzGSaJIQFs,7618
|
|
21
|
-
tableauserverclient/models/database_item.py,sha256=lWxmmMpPeVxzizVAsVkc6Ps2I-j-0KJAJZto8qShrYU,8223
|
|
22
|
-
tableauserverclient/models/datasource_item.py,sha256=YjNlQcrdP26iA8g1ZWAxgUtRHS3Z9YrI1yFdaK5hg6M,15872
|
|
23
|
-
tableauserverclient/models/dqw_item.py,sha256=87oTc7icrQst_DSaTqoVR965YEckg5dk6osa51BrCAk,3710
|
|
24
|
-
tableauserverclient/models/exceptions.py,sha256=pQu5DS4jNMT9A0wEBWv2vANAQU1vgNpFatVr8sGE4zk,105
|
|
25
|
-
tableauserverclient/models/favorites_item.py,sha256=JxHfy38xdRYol2KM_8_A7Ng59cZunkhTNcpxO670k08,3294
|
|
26
|
-
tableauserverclient/models/fileupload_item.py,sha256=N5M0jtlFj_PFh3jlp2AbcYOwCwdnBCk_L64xe3Z4ves,742
|
|
27
|
-
tableauserverclient/models/flow_item.py,sha256=df4kkKXVp4dAOblBUDShEl571BxS7hB1AZKHl4P9tss,8666
|
|
28
|
-
tableauserverclient/models/flow_run_item.py,sha256=nf_b6KRwNevwZRsPoMh8dLzdONUMWY2wipWEMdY9SN4,3113
|
|
29
|
-
tableauserverclient/models/group_item.py,sha256=asj0ZlA0-OAGgcYFu9sDX0t29B5A4LDsirXi0IN6i40,4896
|
|
30
|
-
tableauserverclient/models/groupset_item.py,sha256=gxxyzviE5B8zr2sKJteIDKtYTPYKsGd-qMcrjEY2uVU,1885
|
|
31
|
-
tableauserverclient/models/interval_item.py,sha256=_ZHQtzQWxwdd_sScziqhrK54k7W_ZgrMfP2PhlIhTRQ,9101
|
|
32
|
-
tableauserverclient/models/job_item.py,sha256=Q7tTKXEiW-5VJsLmnAq6auP0jvmbbImmqw_nx1kiXtM,11512
|
|
33
|
-
tableauserverclient/models/linked_tasks_item.py,sha256=TYkNvmJfKlZ30OST8w9GUobboFAH5ftFKjXdWWAtR24,3806
|
|
34
|
-
tableauserverclient/models/metric_item.py,sha256=D3atzbr3jtQUsVsqYHfz-v3yRP3qruRN5jRsv_-yRQ0,5378
|
|
35
|
-
tableauserverclient/models/pagination_item.py,sha256=55Ap_9pJxq8plWQO1Js3Jp6KFidN3TQsL5LM2-yZGDo,1424
|
|
36
|
-
tableauserverclient/models/permissions_item.py,sha256=CWf1Q4x7U4QQWQ1VUWgDzaE7mhriHblG1MJAc6EKJHM,6149
|
|
37
|
-
tableauserverclient/models/project_item.py,sha256=bzSn9IsWt69DL7rZb5B3MubpNUTCw7XMYHw6wu4inj8,8481
|
|
38
|
-
tableauserverclient/models/property_decorators.py,sha256=v2cTqiW5iZXoOyu6RYg3X6Ly--8sozjWOcKCTLi99Nc,4645
|
|
39
|
-
tableauserverclient/models/reference_item.py,sha256=R4Tr7qfVdnGcq_ac4hr0yhAjBOkqFZEW-4NGMUYaf9w,733
|
|
40
|
-
tableauserverclient/models/revision_item.py,sha256=5ghmnwhUcCOWwZdApzgV_uM3sqdoG_gtsJwUQwfKITo,2773
|
|
41
|
-
tableauserverclient/models/schedule_item.py,sha256=40Py-mpwK3GDZbfAuD6UjDz52NyVce5i8XjuneTarp4,11332
|
|
42
|
-
tableauserverclient/models/server_info_item.py,sha256=55wTG_31o-WwqgBrbwpgMpq_by10iM6BXpmdAZ3TO90,2631
|
|
43
|
-
tableauserverclient/models/site_item.py,sha256=Y0uWYfTzk4Utfl44V1_v0wH4VJmWg4Wq5o1EPTWVs8U,44999
|
|
44
|
-
tableauserverclient/models/subscription_item.py,sha256=ujaQQIo_ln3pnm0Th2IdcGCp_cl6WxvEMPgeZbwZtFc,4724
|
|
45
|
-
tableauserverclient/models/table_item.py,sha256=C_oseSV4PnkVkzIt8V_NkiT138vLmrGxzsr3Rn37png,4575
|
|
46
|
-
tableauserverclient/models/tableau_auth.py,sha256=atmXdAsA5LrrLHEzrHJQPLYETC1iKyxFqPSwIk-vacI,8218
|
|
47
|
-
tableauserverclient/models/tableau_types.py,sha256=ybXO_O7ni-WjKUJ5zVEoEgEnatsDtfXTeT0rpiq7Jxs,1230
|
|
48
|
-
tableauserverclient/models/tag_item.py,sha256=K2EVEy1EDdr0yLr4wBvGr-p9gIAFVsOCv80b-AFPFLk,588
|
|
49
|
-
tableauserverclient/models/target.py,sha256=dVc1SHwo9ZASR8250MhAPODXX_G5UqA4BnK8hykRE6E,263
|
|
50
|
-
tableauserverclient/models/task_item.py,sha256=l4t4COw2LfdlYmJpzUSgwGven_NSZj2r3PUJZkqvCus,4555
|
|
51
|
-
tableauserverclient/models/user_item.py,sha256=otfavMznvkqUwxRlh1wW0Y_eTw3gaVNJKlWeecKy5j0,16494
|
|
52
|
-
tableauserverclient/models/view_item.py,sha256=AxHGrcUOv_kKDqqFWxvQ-kX9KoD0Df20MQygZIkF-9Y,9964
|
|
53
|
-
tableauserverclient/models/virtual_connection_item.py,sha256=TvX7MId7WSg4IZE41XAMl1l3Ibu8kTUR1xr26Cqtyeo,3357
|
|
54
|
-
tableauserverclient/models/webhook_item.py,sha256=r37fHY3_uhDhxupHfMSvB4I2aUjy3qQ2FOLQjAcNUUk,3994
|
|
55
|
-
tableauserverclient/models/workbook_item.py,sha256=s1zSSPaXASbjOirB6EqGO_O8ev-BrsSFwEJwlbdFYFQ,17468
|
|
56
|
-
tableauserverclient/server/__init__.py,sha256=77E-3LseLd9gHeRgKPnpZTNMQySgYiwst33AsReol-k,1940
|
|
57
|
-
tableauserverclient/server/exceptions.py,sha256=l-O4lcoEeXJC7fLWUanIcZM_Mf8m54uK3NQuKNj3RCg,183
|
|
58
|
-
tableauserverclient/server/filter.py,sha256=Z7O6A175bBSmcponLs0Enh5R5Gp2puVRGfOMk-V395w,1096
|
|
59
|
-
tableauserverclient/server/pager.py,sha256=IESvCba7WZO3O9VBcKlJ6ricVDgro0gKuUQyJnOCUws,3497
|
|
60
|
-
tableauserverclient/server/query.py,sha256=dxl0dOBd_Rx8BIS0ocMd-RhO5yb1KXnu2OacrQzQGPY,9461
|
|
61
|
-
tableauserverclient/server/request_factory.py,sha256=5Vf0Vbhj_72-f7QlEnk1Gc2KUfzeiihzkhx78Mx07FM,72709
|
|
62
|
-
tableauserverclient/server/request_options.py,sha256=3le-ujRiAlZVSSgnP2kF8hqavm7d7dmYFL-48MX6syo,15403
|
|
63
|
-
tableauserverclient/server/server.py,sha256=Uk63h9Y2Ub1Iu2PWhguG5D5BpWFqNydgML6ae2yesV4,11291
|
|
64
|
-
tableauserverclient/server/sort.py,sha256=wjnlt7rlmLvQjM_XpgD8N8Hlg0zVvLOV7k_dAs1DmHY,628
|
|
65
|
-
tableauserverclient/server/endpoint/__init__.py,sha256=MpttkNENWAiXS2QigwZMfWG6PnsB05QSFK4-OIR3CaQ,3101
|
|
66
|
-
tableauserverclient/server/endpoint/auth_endpoint.py,sha256=8N3_OUSwYm4KCvwDJHGmH9i2OqzH70PLP0-rT-sKYVo,7177
|
|
67
|
-
tableauserverclient/server/endpoint/custom_views_endpoint.py,sha256=se-CZ9BF8Cf_quT_3BbrO9lwK7E8hHbCoMYq-2IZMM8,14515
|
|
68
|
-
tableauserverclient/server/endpoint/data_acceleration_report_endpoint.py,sha256=he-MVqCvAQo8--icEKFoIV2KUP6Z1s_PJ2uZ8Xpj2f8,1130
|
|
69
|
-
tableauserverclient/server/endpoint/data_alert_endpoint.py,sha256=ZNotgG3hBpR7fo8eDTXx_gSppF2n25GQ3udwF3MKFLk,5203
|
|
70
|
-
tableauserverclient/server/endpoint/databases_endpoint.py,sha256=3kl7YCCJB_DY88QiJxKvtarDV7kPApGYtIcr7d7l8k0,5705
|
|
71
|
-
tableauserverclient/server/endpoint/datasources_endpoint.py,sha256=D70xk7kWkqQBDRC0yx5gZj8AhZf-lUCzdL9Ycw3nP0c,41722
|
|
72
|
-
tableauserverclient/server/endpoint/default_permissions_endpoint.py,sha256=bZlhDqu6jFyC4vbrdC3Nn1cWRJWRz0mhxco9hRUouJA,4327
|
|
73
|
-
tableauserverclient/server/endpoint/dqw_endpoint.py,sha256=hN2UsyM3hrUsIK9CudSBB-WXNa0TeUU7Zjeol0njIXI,2155
|
|
74
|
-
tableauserverclient/server/endpoint/endpoint.py,sha256=pYr-l3GLK8Fvh46U_VdaJLLerd2GBJXJk_x94RQ-ZeE,14113
|
|
75
|
-
tableauserverclient/server/endpoint/exceptions.py,sha256=ifkRatvvqG5awY73BzwALlby3dYYKr_8leUOmpeZS0Y,2919
|
|
76
|
-
tableauserverclient/server/endpoint/favorites_endpoint.py,sha256=ZMui0KQCSGRBlUrem519Y5_gBpngN7wtDWo_EvEUMEk,6340
|
|
77
|
-
tableauserverclient/server/endpoint/fileuploads_endpoint.py,sha256=e3qIw6lJJG4Y8RHG26psMjjETovpfrBzmFjeYeJll8s,2410
|
|
78
|
-
tableauserverclient/server/endpoint/flow_runs_endpoint.py,sha256=HIVuTi4pXIqog16K_3Zzu1LC96TR_pZlAjxRKoJrJ_g,4957
|
|
79
|
-
tableauserverclient/server/endpoint/flow_task_endpoint.py,sha256=4D7tEYow7lqkCuazXUrUyIH_y_PQMTehmeIi-zSIMXo,1078
|
|
80
|
-
tableauserverclient/server/endpoint/flows_endpoint.py,sha256=i0nc9JeBzJ7A-kymGMubV8khT-NU3oxlvB7SHd_bddA,23650
|
|
81
|
-
tableauserverclient/server/endpoint/groups_endpoint.py,sha256=5ZhKJeKT3GoM2olqJYJggdiVYQ9BdcEJCIqkx-tZqxo,18745
|
|
82
|
-
tableauserverclient/server/endpoint/groupsets_endpoint.py,sha256=Kcrrd0NbduwIhAtGkG-EMf38qcCM74EnCybAs24TFnM,5577
|
|
83
|
-
tableauserverclient/server/endpoint/jobs_endpoint.py,sha256=rhR8tD89U5ha-g5QhLlGXurTF77mLQREnd7k208EHxA,10387
|
|
84
|
-
tableauserverclient/server/endpoint/linked_tasks_endpoint.py,sha256=tMZqVPWPZvYawaXLJGVV9scmWPu1rdCxz-eWZv1WbPk,2262
|
|
85
|
-
tableauserverclient/server/endpoint/metadata_endpoint.py,sha256=sg0Yehj2f0wlrJMkVjzNdNxNEhSeNbZIkio3eQamOVk,5228
|
|
86
|
-
tableauserverclient/server/endpoint/metrics_endpoint.py,sha256=p9F_tbUela1sb3i9n67Tr9zsPRmsjSAigC6EqLwZHqE,3175
|
|
87
|
-
tableauserverclient/server/endpoint/permissions_endpoint.py,sha256=tXX_KSanbxUeR-L4UdI_jphko8dD_fZsXVhQayQL3JA,3719
|
|
88
|
-
tableauserverclient/server/endpoint/projects_endpoint.py,sha256=aIYW2NWZnWgK2PXHcBgHJwGxv6Ak915J-1wmPD1FiFY,30603
|
|
89
|
-
tableauserverclient/server/endpoint/resource_tagger.py,sha256=eKekflXzLjx_zDOLgYkTIusRO8vsFus1LvLIf0LOwtQ,6661
|
|
90
|
-
tableauserverclient/server/endpoint/schedules_endpoint.py,sha256=eUyNCqx7alQTPTCX-KYGk7zFd7EtAJxYatfa9D6NCc0,6242
|
|
91
|
-
tableauserverclient/server/endpoint/server_info_endpoint.py,sha256=9UcYP3td22S_Kwabu-RWc-Pn3lFrIERVlzVpl4ErP_I,2649
|
|
92
|
-
tableauserverclient/server/endpoint/sites_endpoint.py,sha256=H_bq6hU-zsGJ2sNr2jqQ5YGajQ310WvjJgpiDBREfiY,14001
|
|
93
|
-
tableauserverclient/server/endpoint/subscriptions_endpoint.py,sha256=21oZ6Q14AL8p2ZHyfREpbnPU6Vj4Xh97o1K9hmKRJ-I,3187
|
|
94
|
-
tableauserverclient/server/endpoint/tables_endpoint.py,sha256=7HCOheWJd8VAEz1TACbWnLFxfYiKcPB40XpxtT5Qbj0,5725
|
|
95
|
-
tableauserverclient/server/endpoint/tasks_endpoint.py,sha256=5VHGe2NSgr40BKPPOm9nVrdZGrG3Sf0ri_CNqsv0CpQ,6304
|
|
96
|
-
tableauserverclient/server/endpoint/users_endpoint.py,sha256=yLDzGy9K9ecY8uO8Tww1fp3hwrs_WMbMYtgMRRa7Hho,19788
|
|
97
|
-
tableauserverclient/server/endpoint/views_endpoint.py,sha256=4wTqjo1MyB6kkVB0W9QSajz8eqwO7vaZCcD2y6hN4Zo,17859
|
|
98
|
-
tableauserverclient/server/endpoint/virtual_connections_endpoint.py,sha256=K5R86aIm4hZeYw3OUOlKv-zTmsWa3np1iuV_h5iPvt0,8458
|
|
99
|
-
tableauserverclient/server/endpoint/webhooks_endpoint.py,sha256=nmEjKdbntwBg-0XAP2TluOv2v8usqxXg7sO8ogS5rDI,4923
|
|
100
|
-
tableauserverclient/server/endpoint/workbooks_endpoint.py,sha256=W6o64Rec7i3dBzyR8TYntgWzryXbxFAZ_xa37edyzqY,43910
|
|
101
|
-
tableauserverclient-0.37.dist-info/licenses/LICENSE,sha256=MMkY7MguOb4L-WCmmqrVcwg2iwSGaz-RfAMFvXRXwsQ,1074
|
|
102
|
-
tableauserverclient-0.37.dist-info/licenses/LICENSE.versioneer,sha256=OYaGozOXk7bUNSm1z577iDYpti8a40XIqqR4lyQ47D8,334
|
|
103
|
-
tableauserverclient-0.37.dist-info/METADATA,sha256=-Z0PkJLJDJ9EG1poAqRiDH_kxLrBvjTUje1vYceCLIU,4351
|
|
104
|
-
tableauserverclient-0.37.dist-info/WHEEL,sha256=L0N565qmK-3nM2eBoMNFszYJ_MTx03_tQ0CQu1bHLYo,91
|
|
105
|
-
tableauserverclient-0.37.dist-info/top_level.txt,sha256=kBnL39G2RlGqxJSsShDBWG4WZ3NFcWJkv1EGiOfZh4Q,20
|
|
106
|
-
tableauserverclient-0.37.dist-info/RECORD,,
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
## License
|
|
2
|
-
|
|
3
|
-
To make Versioneer easier to embed, all its code is dedicated to the public
|
|
4
|
-
domain. The `_version.py` that it creates is also in the public domain.
|
|
5
|
-
Specifically, both are released under the Creative Commons "Public Domain
|
|
6
|
-
Dedication" license (CC0-1.0), as described in
|
|
7
|
-
https://creativecommons.org/publicdomain/zero/1.0/ .
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
tableauserverclient
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|