From 831b348ed625548c47d96441d54ccd91dcb36d65 Mon Sep 17 00:00:00 2001 From: Alex Pana Date: Mon, 19 Jun 2017 17:33:40 -0700 Subject: [PATCH 1/5] Added filtering on project names in new sample script --- samples/filter_sort_projects.py | 86 +++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 samples/filter_sort_projects.py diff --git a/samples/filter_sort_projects.py b/samples/filter_sort_projects.py new file mode 100644 index 000000000..580495a56 --- /dev/null +++ b/samples/filter_sort_projects.py @@ -0,0 +1,86 @@ +#### +# This script demonstrates how to use the Tableau Server Client +# to filter and sort on the projects present on site. +# the desired project. +# +# To run the script, you must have installed Python 2.7.X or 3.3 and later. +#### + +import argparse +import getpass +import logging + +import tableauserverclient as TSC + +def create_example_project(_name='Example Project', _content_permissions='LockedToProject', + _description='Project created for testing', _server=None): + + new_project = TSC.ProjectItem(name=_name, content_permissions=_content_permissions, + description=_description) + try: + _server.projects.create(new_project) + print('Created a new project called: %s' % _name) + except TSC.ServerResponseError: + print('We have already created this resource: %s' % _name) + + +def main(): + parser = argparse.ArgumentParser(description='Get all of the refresh tasks available on a server') + parser.add_argument('--server', '-s', required=True, help='server address') + parser.add_argument('--username', '-u', required=True, help='username to sign into server') + parser.add_argument('--site', '-S', default=None) + parser.add_argument('-p', default=None) + + parser.add_argument('--logging-level', '-l', choices=['debug', 'info', 'error'], default='error', + help='desired logging level (set to error by default)') + + args = parser.parse_args() + + if args.p is None: + password = getpass.getpass("Password: ") + else: + password = args.p + + # Set logging level based on user input, or error by default + logging_level = getattr(logging, args.logging_level.upper()) + logging.basicConfig(level=logging_level) + + tableau_auth = TSC.TableauAuth(args.username, password) + server = TSC.Server(args.server) + + with server.auth.sign_in(tableau_auth): + server.version = '2.7' + + filter_project_name = 'default' + options = TSC.RequestOptions() + + options.filter.add(TSC.Filter(TSC.RequestOptions.Field.Name, + TSC.RequestOptions.Operator.Equals, + filter_project_name)) + + filter_projects_paged = server.projects.get(req_options=options) + print(filter_projects_paged[0][0].name) + + create_example_project(_name='Example 1', _server=server) + create_example_project(_name='Example 2', _server=server) + create_example_project(_name='Example 3', _server=server) + create_example_project(_name='Proiect ca Exemplu', _server=server) + + options = TSC.RequestOptions() + + # don't forget to URL encode the query names + options.filter.add(TSC.Filter(TSC.RequestOptions.Field.Name, + TSC.RequestOptions.Operator.In, + ['Example+1', 'Example+2', 'Example+3'])) + + options.sort.add(TSC.Sort(TSC.RequestOptions.Field.Name, + TSC.RequestOptions.Direction.Desc)) + + matching_projects, pagination_item = server.projects.get(req_options=options) + print('Filtered projects are:') + for project in matching_projects: + print(project.name, project.id) + + +if __name__ == '__main__': + main() \ No newline at end of file From a4effefa5044752a4b06e30f17a7197cfda9c682 Mon Sep 17 00:00:00 2001 From: Alex Pana Date: Mon, 19 Jun 2017 17:35:57 -0700 Subject: [PATCH 2/5] Minor comment change --- samples/filter_sort_projects.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/filter_sort_projects.py b/samples/filter_sort_projects.py index 580495a56..c9159de3a 100644 --- a/samples/filter_sort_projects.py +++ b/samples/filter_sort_projects.py @@ -1,7 +1,7 @@ #### # This script demonstrates how to use the Tableau Server Client -# to filter and sort on the projects present on site. -# the desired project. +# to filter and sort on the name of the projects present on site. +# # # To run the script, you must have installed Python 2.7.X or 3.3 and later. #### From 5cae065a7e4b607fe8919a6ba7f38e34ae3d0a68 Mon Sep 17 00:00:00 2001 From: Alex Pana Date: Thu, 22 Jun 2017 13:49:48 -0700 Subject: [PATCH 3/5] Clearer unpacking rest api response objects --- samples/filter_sort_projects.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/samples/filter_sort_projects.py b/samples/filter_sort_projects.py index c9159de3a..700438118 100644 --- a/samples/filter_sort_projects.py +++ b/samples/filter_sort_projects.py @@ -58,8 +58,10 @@ def main(): TSC.RequestOptions.Operator.Equals, filter_project_name)) - filter_projects_paged = server.projects.get(req_options=options) - print(filter_projects_paged[0][0].name) + filtered_projects, _ = server.projects.get(req_options=options) + # Result can either be a matching project or none + project_name = filtered_projects.pop().name if len(filtered_projects) != 0 else 'No project named \'' + str(filter_project_name) + '\' found ' + print(project_name) create_example_project(_name='Example 1', _server=server) create_example_project(_name='Example 2', _server=server) From 840e3ffa0c167f509febe5b2c2dbfaf7a287b9e6 Mon Sep 17 00:00:00 2001 From: Alex Pana Date: Thu, 22 Jun 2017 17:56:46 -0700 Subject: [PATCH 4/5] Proper printing instructions --- samples/filter_sort_projects.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/samples/filter_sort_projects.py b/samples/filter_sort_projects.py index 700438118..9a8878f42 100644 --- a/samples/filter_sort_projects.py +++ b/samples/filter_sort_projects.py @@ -59,9 +59,13 @@ def main(): filter_project_name)) filtered_projects, _ = server.projects.get(req_options=options) - # Result can either be a matching project or none - project_name = filtered_projects.pop().name if len(filtered_projects) != 0 else 'No project named \'' + str(filter_project_name) + '\' found ' - print(project_name) + # Result can either be a matching project or an empty list + if filtered_projects: + project_name = filtered_projects.pop().name + print(project_name) + else: + error = "No project named '{}' found".format(filter_project_name) + print(error) create_example_project(_name='Example 1', _server=server) create_example_project(_name='Example 2', _server=server) From e6c65b1e8ddb7ee235dd5035d7d9f066b80da013 Mon Sep 17 00:00:00 2001 From: Alex Pana Date: Fri, 23 Jun 2017 13:44:29 -0700 Subject: [PATCH 5/5] Style changes, removed_, using call to switch server version --- samples/filter_sort_projects.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/samples/filter_sort_projects.py b/samples/filter_sort_projects.py index 9a8878f42..d247c44dc 100644 --- a/samples/filter_sort_projects.py +++ b/samples/filter_sort_projects.py @@ -12,16 +12,17 @@ import tableauserverclient as TSC -def create_example_project(_name='Example Project', _content_permissions='LockedToProject', - _description='Project created for testing', _server=None): - new_project = TSC.ProjectItem(name=_name, content_permissions=_content_permissions, - description=_description) +def create_example_project(name='Example Project', content_permissions='LockedToProject', + description='Project created for testing', server=None): + + new_project = TSC.ProjectItem(name=name, content_permissions=content_permissions, + description=description) try: - _server.projects.create(new_project) - print('Created a new project called: %s' % _name) + server.projects.create(new_project) + print('Created a new project called: %s' % name) except TSC.ServerResponseError: - print('We have already created this resource: %s' % _name) + print('We have already created this resource: %s' % name) def main(): @@ -49,7 +50,8 @@ def main(): server = TSC.Server(args.server) with server.auth.sign_in(tableau_auth): - server.version = '2.7' + # Use highest Server REST API version available + server.use_server_version() filter_project_name = 'default' options = TSC.RequestOptions() @@ -67,10 +69,10 @@ def main(): error = "No project named '{}' found".format(filter_project_name) print(error) - create_example_project(_name='Example 1', _server=server) - create_example_project(_name='Example 2', _server=server) - create_example_project(_name='Example 3', _server=server) - create_example_project(_name='Proiect ca Exemplu', _server=server) + create_example_project(name='Example 1', server=server) + create_example_project(name='Example 2', server=server) + create_example_project(name='Example 3', server=server) + create_example_project(name='Proiect ca Exemplu', server=server) options = TSC.RequestOptions() @@ -89,4 +91,4 @@ def main(): if __name__ == '__main__': - main() \ No newline at end of file + main()