|
| 1 | +#### |
| 2 | +# This script demonstrates how to add default permissions using TSC |
| 3 | +# To run the script, you must have installed Python 3.5 and later. |
| 4 | +# |
| 5 | +# In order to demonstrate adding a new default permission, this sample will create |
| 6 | +# a new project and add a new capability to the new project, for the default "All users" group. |
| 7 | +# |
| 8 | +# Example usage: 'python add_default_permission.py -s |
| 9 | +# https://10ax.online.tableau.com --site devSite123 -u tabby@tableau.com' |
| 10 | +#### |
| 11 | + |
| 12 | +import argparse |
| 13 | +import getpass |
| 14 | +import logging |
| 15 | + |
| 16 | +import tableauserverclient as TSC |
| 17 | + |
| 18 | + |
| 19 | +def main(): |
| 20 | + parser = argparse.ArgumentParser(description='Add workbook default permission for a given project') |
| 21 | + parser.add_argument('--server', '-s', required=True, help='Server address') |
| 22 | + parser.add_argument('--username', '-u', required=True, help='Username to sign into server') |
| 23 | + parser.add_argument('--site', '-S', default=None, help='Site to sign into - default site if not provided') |
| 24 | + parser.add_argument('-p', default=None, help='Password to sign into server') |
| 25 | + |
| 26 | + parser.add_argument('--logging-level', '-l', choices=['debug', 'info', 'error'], default='error', |
| 27 | + help='desired logging level (set to error by default)') |
| 28 | + |
| 29 | + args = parser.parse_args() |
| 30 | + |
| 31 | + if args.p is None: |
| 32 | + password = getpass.getpass("Password: ") |
| 33 | + else: |
| 34 | + password = args.p |
| 35 | + |
| 36 | + # Set logging level based on user input, or error by default |
| 37 | + logging_level = getattr(logging, args.logging_level.upper()) |
| 38 | + logging.basicConfig(level=logging_level) |
| 39 | + |
| 40 | + # Sign in |
| 41 | + tableau_auth = TSC.TableauAuth(args.username, password, args.site) |
| 42 | + server = TSC.Server(args.server, use_server_version=True) |
| 43 | + with server.auth.sign_in(tableau_auth): |
| 44 | + |
| 45 | + # Create a sample project |
| 46 | + project = TSC.ProjectItem("sample_project") |
| 47 | + project = server.projects.create(project) |
| 48 | + |
| 49 | + # Query for existing workbook default-permissions |
| 50 | + server.projects.populate_workbook_default_permissions(project) |
| 51 | + default_permissions = project.default_workbook_permissions[0] # new projects have 1 grantee group |
| 52 | + |
| 53 | + # Add "ExportXml (Allow)" workbook capability to "All Users" default group if it does not already exist |
| 54 | + if TSC.Permission.Capability.ExportXml not in default_permissions.capabilities: |
| 55 | + new_capabilities = {TSC.Permission.Capability.ExportXml: TSC.Permission.Mode.Allow} |
| 56 | + |
| 57 | + # Each PermissionRule in the list contains a grantee and a dict of capabilities |
| 58 | + new_rules = [TSC.PermissionsRule( |
| 59 | + grantee=default_permissions.grantee, |
| 60 | + capabilities=new_capabilities |
| 61 | + )] |
| 62 | + |
| 63 | + new_default_permissions = server.projects.update_workbook_default_permissions(project, new_rules) |
| 64 | + |
| 65 | + # Print result from adding a new default permission |
| 66 | + for permission in new_default_permissions: |
| 67 | + grantee = permission.grantee |
| 68 | + capabilities = permission.capabilities |
| 69 | + print("\nCapabilities for {0} {1}:".format(grantee.tag_name, grantee.id)) |
| 70 | + |
| 71 | + for capability in capabilities: |
| 72 | + print("\t{0} - {1}".format(capability, capabilities[capability])) |
| 73 | + |
| 74 | + # Uncomment lines below to DELETE the new capability and the new project |
| 75 | + # rules_to_delete = TSC.PermissionsRule( |
| 76 | + # grantee=default_permissions.grantee, |
| 77 | + # capabilities=new_capabilities |
| 78 | + # ) |
| 79 | + # server.projects.delete_workbook_default_permissions(project, rules_to_delete) |
| 80 | + # server.projects.delete(project.id) |
| 81 | + |
| 82 | + |
| 83 | +if __name__ == '__main__': |
| 84 | + main() |
0 commit comments