forked from tableau/server-client-python
-
Notifications
You must be signed in to change notification settings - Fork 0
/
move_workbook_projects.py
68 lines (57 loc) · 2.64 KB
/
move_workbook_projects.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
####
# This script demonstrates how to use the Tableau Server Client
# to move a workbook from one project to another. It will find
# a workbook that matches a given name and update it to be in
# the desired project.
#
# To run the script, you must have installed Python 3.7 or later.
####
import argparse
import logging
import urllib.parse
import tableauserverclient as TSC
def main():
parser = argparse.ArgumentParser(description="Move one workbook from the default project to another.")
# Common options; please keep those in sync across all samples
parser.add_argument("--server", "-s", required=True, help="server address")
parser.add_argument("--site", "-S", help="site name")
parser.add_argument(
"--token-name", "-p", required=True, help="name of the personal access token used to sign into the server"
)
parser.add_argument(
"--token-value", "-v", required=True, help="value of the personal access token used to sign into the server"
)
parser.add_argument(
"--logging-level",
"-l",
choices=["debug", "info", "error"],
default="error",
help="desired logging level (set to error by default)",
)
# Options specific to this sample
parser.add_argument("--workbook-name", "-w", required=True, help="name of workbook to move")
parser.add_argument("--destination-project", "-d", required=True, help="name of project to move workbook into")
args = parser.parse_args()
# Set logging level based on user input, or error by default
logging_level = getattr(logging, args.logging_level.upper())
logging.basicConfig(level=logging_level)
# Step 1: Sign in to server
tableau_auth = TSC.PersonalAccessTokenAuth(args.token_name, args.token_value, site_id=args.site)
server = TSC.Server(args.server, use_server_version=True)
with server.auth.sign_in(tableau_auth):
# Step 2: Find destination project
try:
dest_project = server.projects.filter(name=urllib.parse.quote_plus(args.destination_project))[0]
except IndexError:
raise LookupError(f"No project named {args.destination_project} found.")
# Step 3: Query workbook to move
try:
workbook = server.workbooks.filter(name=urllib.parse.quote_plus(args.workbook_name))[0]
except IndexError:
raise LookupError(f"No workbook named {args.workbook_name} found")
# Step 4: Update workbook with new project id
workbook.project_id = dest_project.id
target_workbook = server.workbooks.update(workbook)
print(f"New project: {target_workbook.project_name}")
if __name__ == "__main__":
main()