tableauserverclient 0.37__tar.gz → 0.39__tar.gz
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-0.37 → tableauserverclient-0.39}/MANIFEST.in +0 -3
- {tableauserverclient-0.37 → tableauserverclient-0.39}/PKG-INFO +5 -26
- {tableauserverclient-0.37 → tableauserverclient-0.39}/pyproject.toml +11 -6
- tableauserverclient-0.39/samples/create_user.py +73 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/extracts.py +0 -1
- tableauserverclient-0.39/samples/metadata_paginated_query.py +87 -0
- tableauserverclient-0.39/samples/update_connection_auth.py +62 -0
- tableauserverclient-0.39/samples/update_connections_auth.py +64 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/update_datasource_data.py +1 -1
- tableauserverclient-0.39/setup.py +8 -0
- tableauserverclient-0.39/tableauserverclient/bin/__init__.py +3 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/bin/_version.py +3 -3
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/helpers/strings.py +25 -1
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/__init__.py +15 -1
- tableauserverclient-0.39/tableauserverclient/models/collection_item.py +52 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/connection_item.py +16 -2
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/custom_view_item.py +8 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/data_freshness_policy_item.py +3 -3
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/datasource_item.py +113 -3
- tableauserverclient-0.39/tableauserverclient/models/extensions_item.py +186 -0
- tableauserverclient-0.39/tableauserverclient/models/extract_item.py +82 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/favorites_item.py +21 -8
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/flow_item.py +3 -3
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/group_item.py +18 -1
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/groupset_item.py +14 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/interval_item.py +42 -1
- tableauserverclient-0.39/tableauserverclient/models/location_item.py +53 -0
- tableauserverclient-0.39/tableauserverclient/models/oidc_item.py +82 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/permissions_item.py +2 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/project_item.py +141 -29
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/property_decorators.py +2 -2
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/reference_item.py +12 -6
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/schedule_item.py +67 -1
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/site_item.py +54 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/table_item.py +7 -3
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/tableau_auth.py +13 -6
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/tableau_types.py +13 -1
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/user_item.py +111 -4
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/view_item.py +79 -5
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/workbook_item.py +153 -3
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/__init__.py +4 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/databases_endpoint.py +101 -18
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/datasources_endpoint.py +155 -25
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/dqw_endpoint.py +16 -6
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/endpoint.py +39 -0
- tableauserverclient-0.39/tableauserverclient/server/endpoint/extensions_endpoint.py +79 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/flow_task_endpoint.py +1 -1
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/flows_endpoint.py +5 -4
- tableauserverclient-0.39/tableauserverclient/server/endpoint/oidc_endpoint.py +157 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/projects_endpoint.py +12 -0
- tableauserverclient-0.39/tableauserverclient/server/endpoint/schedules_endpoint.py +328 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/sites_endpoint.py +18 -1
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/tables_endpoint.py +140 -17
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/users_endpoint.py +296 -10
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/views_endpoint.py +23 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/workbooks_endpoint.py +124 -9
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/query.py +36 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/request_factory.py +286 -2
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/request_options.py +139 -3
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/server.py +46 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39/tableauserverclient}/tableauserverclient.egg-info/PKG-INFO +5 -26
- {tableauserverclient-0.37 → tableauserverclient-0.39/tableauserverclient}/tableauserverclient.egg-info/SOURCES.txt +42 -11
- {tableauserverclient-0.37 → tableauserverclient-0.39/tableauserverclient}/tableauserverclient.egg-info/requires.txt +4 -2
- tableauserverclient-0.39/tableauserverclient/tableauserverclient.egg-info/top_level.txt +4 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/_utils.py +14 -0
- tableauserverclient-0.39/test/assets/datasource_connections_update.xml +21 -0
- tableauserverclient-0.39/test/assets/datasource_get_all_fields.xml +10 -0
- tableauserverclient-0.39/test/assets/datasource_get_no_owner.xml +16 -0
- tableauserverclient-0.39/test/assets/extensions_server_settings_false.xml +6 -0
- tableauserverclient-0.39/test/assets/extensions_server_settings_true.xml +8 -0
- tableauserverclient-0.39/test/assets/extensions_site_settings.xml +16 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/favorites_add_view.xml +3 -1
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/favorites_get.xml +13 -1
- tableauserverclient-0.39/test/assets/group_get_all_fields.xml +14 -0
- tableauserverclient-0.39/test/assets/oidc_create.xml +30 -0
- tableauserverclient-0.39/test/assets/oidc_get.xml +30 -0
- tableauserverclient-0.39/test/assets/oidc_update.xml +30 -0
- tableauserverclient-0.39/test/assets/project_get_all_fields.xml +9 -0
- tableauserverclient-0.39/test/assets/schedule_batch_update_state.xml +7 -0
- tableauserverclient-0.39/test/assets/schedule_get_customized_monthly_id.xml +10 -0
- tableauserverclient-0.39/test/assets/schedule_get_extract_refresh_tasks.xml +15 -0
- tableauserverclient-0.39/test/assets/site_auth_configurations.xml +18 -0
- tableauserverclient-0.39/test/assets/user_get_all_fields.xml +11 -0
- tableauserverclient-0.39/test/assets/users_bulk_add_job.xml +4 -0
- tableauserverclient-0.39/test/assets/view_get_all_fields.xml +35 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/virtual_connection_populate_connections.xml +1 -1
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/virtual_connection_populate_connections2.xml +1 -1
- tableauserverclient-0.39/test/assets/workbook_get_all_fields.xml +46 -0
- tableauserverclient-0.39/test/assets/workbook_update_connections.xml +21 -0
- tableauserverclient-0.39/test/http/test_http_requests.py +129 -0
- tableauserverclient-0.39/test/models/__init__.py +0 -0
- tableauserverclient-0.39/test/models/_models.py +37 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/models/test_repr.py +25 -28
- tableauserverclient-0.39/test/request_factory/__init__.py +0 -0
- tableauserverclient-0.39/test/request_factory/test_datasource_requests.py +13 -0
- tableauserverclient-0.39/test/request_factory/test_task_requests.py +61 -0
- tableauserverclient-0.39/test/request_factory/test_workbook_requests.py +58 -0
- tableauserverclient-0.39/test/test_auth.py +146 -0
- tableauserverclient-0.39/test/test_connection_.py +25 -0
- tableauserverclient-0.39/test/test_custom_view.py +342 -0
- tableauserverclient-0.39/test/test_data_acceleration_report.py +45 -0
- tableauserverclient-0.39/test/test_data_freshness_policy.py +182 -0
- tableauserverclient-0.39/test/test_dataalert.py +120 -0
- tableauserverclient-0.39/test/test_database.py +112 -0
- tableauserverclient-0.39/test/test_datasource.py +907 -0
- tableauserverclient-0.39/test/test_datasource_model.py +20 -0
- tableauserverclient-0.39/test/test_dqw.py +9 -0
- tableauserverclient-0.39/test/test_endpoint.py +93 -0
- tableauserverclient-0.39/test/test_exponential_backoff.py +62 -0
- tableauserverclient-0.39/test/test_extensions.py +195 -0
- tableauserverclient-0.39/test/test_favorites.py +146 -0
- tableauserverclient-0.39/test/test_filesys_helpers.py +113 -0
- tableauserverclient-0.39/test/test_fileuploads.py +92 -0
- tableauserverclient-0.39/test/test_filter.py +16 -0
- tableauserverclient-0.39/test/test_flow.py +242 -0
- tableauserverclient-0.39/test/test_flowruns.py +121 -0
- tableauserverclient-0.39/test/test_flowtask.py +46 -0
- tableauserverclient-0.39/test/test_group.py +342 -0
- tableauserverclient-0.39/test/test_group_model.py +15 -0
- tableauserverclient-0.39/test/test_groupsets.py +146 -0
- tableauserverclient-0.39/test/test_job.py +174 -0
- tableauserverclient-0.39/test/test_linked_tasks.py +137 -0
- tableauserverclient-0.39/test/test_metadata.py +109 -0
- tableauserverclient-0.39/test/test_metrics.py +111 -0
- tableauserverclient-0.39/test/test_oidc.py +159 -0
- tableauserverclient-0.39/test/test_pager.py +138 -0
- tableauserverclient-0.39/test/test_permissionsrule.py +104 -0
- tableauserverclient-0.39/test/test_project.py +466 -0
- tableauserverclient-0.39/test/test_project_model.py +22 -0
- tableauserverclient-0.39/test/test_regression_tests.py +84 -0
- tableauserverclient-0.39/test/test_request_option.py +443 -0
- tableauserverclient-0.39/test/test_requests.py +69 -0
- tableauserverclient-0.39/test/test_schedule.py +494 -0
- tableauserverclient-0.39/test/test_server_info.py +81 -0
- tableauserverclient-0.39/test/test_site.py +339 -0
- tableauserverclient-0.39/test/test_site_model.py +73 -0
- tableauserverclient-0.39/test/test_sort.py +107 -0
- tableauserverclient-0.39/test/test_ssl_config.py +68 -0
- tableauserverclient-0.39/test/test_subscription.py +102 -0
- tableauserverclient-0.39/test/test_table.py +65 -0
- tableauserverclient-0.39/test/test_tableauauth_model.py +8 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/test_tagging.py +15 -1
- tableauserverclient-0.39/test/test_task.py +199 -0
- tableauserverclient-0.39/test/test_user.py +573 -0
- tableauserverclient-0.39/test/test_user_model.py +138 -0
- tableauserverclient-0.39/test/test_view.py +539 -0
- tableauserverclient-0.39/test/test_view_acceleration.py +120 -0
- tableauserverclient-0.39/test/test_virtual_connection.py +269 -0
- tableauserverclient-0.39/test/test_webhook.py +89 -0
- tableauserverclient-0.39/test/test_workbook.py +1135 -0
- tableauserverclient-0.39/test/test_workbook_model.py +12 -0
- tableauserverclient-0.37/setup.py +0 -15
- tableauserverclient-0.37/tableauserverclient/__init__.py +0 -141
- tableauserverclient-0.37/tableauserverclient/config.py +0 -27
- tableauserverclient-0.37/tableauserverclient/datetime_helpers.py +0 -45
- tableauserverclient-0.37/tableauserverclient/exponential_backoff.py +0 -30
- tableauserverclient-0.37/tableauserverclient/filesys_helpers.py +0 -63
- tableauserverclient-0.37/tableauserverclient/namespace.py +0 -37
- tableauserverclient-0.37/tableauserverclient/server/endpoint/schedules_endpoint.py +0 -151
- tableauserverclient-0.37/tableauserverclient.egg-info/top_level.txt +0 -1
- tableauserverclient-0.37/test/http/test_http_requests.py +0 -117
- tableauserverclient-0.37/test/models/_models.py +0 -58
- tableauserverclient-0.37/test/request_factory/test_datasource_requests.py +0 -15
- tableauserverclient-0.37/test/request_factory/test_task_requests.py +0 -48
- tableauserverclient-0.37/test/request_factory/test_workbook_requests.py +0 -55
- tableauserverclient-0.37/test/test_auth.py +0 -133
- tableauserverclient-0.37/test/test_connection_.py +0 -34
- tableauserverclient-0.37/test/test_custom_view.py +0 -320
- tableauserverclient-0.37/test/test_data_acceleration_report.py +0 -42
- tableauserverclient-0.37/test/test_data_freshness_policy.py +0 -189
- tableauserverclient-0.37/test/test_dataalert.py +0 -112
- tableauserverclient-0.37/test/test_database.py +0 -113
- tableauserverclient-0.37/test/test_datasource.py +0 -735
- tableauserverclient-0.37/test/test_datasource_model.py +0 -18
- tableauserverclient-0.37/test/test_dqw.py +0 -11
- tableauserverclient-0.37/test/test_endpoint.py +0 -83
- tableauserverclient-0.37/test/test_exponential_backoff.py +0 -60
- tableauserverclient-0.37/test/test_favorites.py +0 -119
- tableauserverclient-0.37/test/test_filesys_helpers.py +0 -99
- tableauserverclient-0.37/test/test_fileuploads.py +0 -89
- tableauserverclient-0.37/test/test_filter.py +0 -22
- tableauserverclient-0.37/test/test_flow.py +0 -225
- tableauserverclient-0.37/test/test_flowruns.py +0 -111
- tableauserverclient-0.37/test/test_flowtask.py +0 -47
- tableauserverclient-0.37/test/test_group.py +0 -312
- tableauserverclient-0.37/test/test_group_model.py +0 -15
- tableauserverclient-0.37/test/test_groupsets.py +0 -139
- tableauserverclient-0.37/test/test_job.py +0 -158
- tableauserverclient-0.37/test/test_linked_tasks.py +0 -129
- tableauserverclient-0.37/test/test_metadata.py +0 -102
- tableauserverclient-0.37/test/test_metrics.py +0 -105
- tableauserverclient-0.37/test/test_pager.py +0 -136
- tableauserverclient-0.37/test/test_permissionsrule.py +0 -104
- tableauserverclient-0.37/test/test_project.py +0 -412
- tableauserverclient-0.37/test/test_project_model.py +0 -21
- tableauserverclient-0.37/test/test_regression_tests.py +0 -83
- tableauserverclient-0.37/test/test_request_option.py +0 -370
- tableauserverclient-0.37/test/test_requests.py +0 -61
- tableauserverclient-0.37/test/test_schedule.py +0 -407
- tableauserverclient-0.37/test/test_server_info.py +0 -75
- tableauserverclient-0.37/test/test_site.py +0 -262
- tableauserverclient-0.37/test/test_site_model.py +0 -65
- tableauserverclient-0.37/test/test_sort.py +0 -103
- tableauserverclient-0.37/test/test_subscription.py +0 -100
- tableauserverclient-0.37/test/test_table.py +0 -59
- tableauserverclient-0.37/test/test_tableauauth_model.py +0 -12
- tableauserverclient-0.37/test/test_task.py +0 -189
- tableauserverclient-0.37/test/test_user.py +0 -235
- tableauserverclient-0.37/test/test_user_model.py +0 -127
- tableauserverclient-0.37/test/test_view.py +0 -404
- tableauserverclient-0.37/test/test_view_acceleration.py +0 -119
- tableauserverclient-0.37/test/test_virtual_connection.py +0 -248
- tableauserverclient-0.37/test/test_webhook.py +0 -84
- tableauserverclient-0.37/test/test_workbook.py +0 -980
- tableauserverclient-0.37/test/test_workbook_model.py +0 -13
- {tableauserverclient-0.37 → tableauserverclient-0.39}/CHANGELOG.md +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/CONTRIBUTORS.md +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/LICENSE +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/LICENSE.versioneer +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/README.md +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/contributing.md +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/docs/README.md +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/add_default_permission.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/create_extract_task.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/create_group.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/create_project.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/create_schedules.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/explore_datasource.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/explore_favorites.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/explore_site.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/explore_webhooks.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/explore_workbook.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/export.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/filter_sort_groups.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/filter_sort_projects.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/getting_started/1_hello_server.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/getting_started/2_hello_site.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/getting_started/3_hello_universe.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/initialize_server.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/kill_all_jobs.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/list.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/login.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/metadata_query.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/move_workbook_projects.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/move_workbook_sites.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/name.txt +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/pagination_sample.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/publish_datasource.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/publish_workbook.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/query_permissions.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/refresh.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/refresh_tasks.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/set_refresh_schedule.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/smoke_test.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/update_connection.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/samples/update_workbook_data_freshness_policy.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/setup.cfg +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/helpers/__init__.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/helpers/headers.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/helpers/logging.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/column_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/connection_credentials.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/data_acceleration_report_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/data_alert_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/database_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/dqw_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/exceptions.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/fileupload_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/flow_run_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/job_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/linked_tasks_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/metric_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/pagination_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/revision_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/server_info_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/subscription_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/tag_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/target.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/task_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/virtual_connection_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/webhook_item.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/py.typed +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/__init__.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/auth_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/custom_views_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/data_acceleration_report_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/data_alert_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/default_permissions_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/exceptions.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/favorites_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/fileuploads_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/flow_runs_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/groups_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/groupsets_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/jobs_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/linked_tasks_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/metadata_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/metrics_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/permissions_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/resource_tagger.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/server_info_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/subscriptions_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/tasks_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/virtual_connections_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/endpoint/webhooks_endpoint.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/exceptions.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/filter.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/pager.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/server/sort.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39/tableauserverclient}/tableauserverclient.egg-info/dependency_links.txt +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/__init__.py +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/Data/Tableau Samples/World Indicators.tde +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/Data/user_details.csv +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/Data/usernames.csv +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/RESTAPISample Image.png +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/Sample View Image.png +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/World Indicators.hyper +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/auth_sign_in.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/auth_sign_in_error.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/auth_sign_in_impersonate.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/custom_view_download.json +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/custom_view_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/custom_view_get_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/custom_view_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/data_acceleration_report.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/data_alerts_add_user.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/data_alerts_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/data_alerts_get_by_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/data_alerts_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/database_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/database_populate_permissions.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/database_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/datasource_add_tags.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/datasource_connection_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/datasource_data_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/datasource_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/datasource_get_by_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/datasource_get_empty.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/datasource_populate_connections.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/datasource_populate_permissions.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/datasource_publish.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/datasource_publish_async.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/datasource_refresh.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/datasource_revision.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/datasource_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/dqw_by_content_type.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/favorites_add_datasource.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/favorites_add_project.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/favorites_add_workbook.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/fileupload_append.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/fileupload_initialize.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/flow_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/flow_get_by_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/flow_populate_connections.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/flow_populate_permissions.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/flow_publish.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/flow_refresh.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/flow_runs_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/flow_runs_get_by_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/flow_runs_get_by_id_failed.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/flow_runs_get_by_id_inprogress.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/flow_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/group_add_user.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/group_add_users.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/group_create.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/group_create_ad.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/group_create_async.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/group_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/group_populate_users.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/group_populate_users_empty.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/group_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/group_update_async.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/group_users_added.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/groupsets_create.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/groupsets_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/groupsets_get_by_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/groupsets_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/job_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/job_get_by_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/job_get_by_id_completed.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/job_get_by_id_failed.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/job_get_by_id_failed_workbook.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/job_get_by_id_inprogress.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/linked_tasks_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/linked_tasks_run_now.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/metadata_paged_1.json +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/metadata_paged_2.json +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/metadata_paged_3.json +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/metadata_query_error.json +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/metadata_query_expected_dict.dict +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/metadata_query_success.json +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/metrics_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/metrics_get_by_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/metrics_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/odata_connection.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/populate_csv.csv +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/populate_pdf.pdf +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/project_content_permission.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/project_create.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/project_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/project_populate_permissions.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/project_populate_virtualconnection_default_permissions.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/project_populate_workbook_default_permissions.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/project_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/project_update_datasource_default_permissions.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/project_update_virtualconnection_default_permissions.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/queryset_slicing_page_1.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/queryset_slicing_page_2.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/request_option_filter_equals.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/request_option_filter_name_in.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/request_option_filter_tags_in.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/request_option_page_number.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/request_option_page_size.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/request_option_pagination.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/request_option_slicing_queryset.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_add_datasource.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_add_flow.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_add_workbook.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_add_workbook_with_warnings.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_create_daily.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_create_hourly.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_create_monthly.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_create_weekly.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_get_by_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_get_daily_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_get_empty.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_get_hourly_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_get_monthly_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_get_monthly_id_2.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/schedule_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/server_info_25.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/server_info_404.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/server_info_auth_info.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/server_info_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/site_create.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/site_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/site_get_by_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/site_get_by_name.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/site_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/subscription_create.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/subscription_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/subscription_get_by_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/table_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/table_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/tasks_create_extract_task.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/tasks_create_flow_task.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/tasks_no_workbook_or_datasource.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/tasks_run_now_response.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/tasks_with_dataacceleration_task.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/tasks_with_datasource.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/tasks_with_interval.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/tasks_with_workbook.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/tasks_with_workbook_and_datasource.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/tasks_without_schedule.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/user_add.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/user_add_favorite.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/user_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/user_get_by_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/user_get_empty.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/user_populate_groups.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/user_populate_workbooks.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/user_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/view_add_tags.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/view_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/view_get_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/view_get_id_usage.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/view_get_usage.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/view_populate_permissions.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/view_update_permissions.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/virtual_connection_add_permissions.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/virtual_connection_database_connection_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/virtual_connections_download.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/virtual_connections_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/virtual_connections_publish.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/virtual_connections_revisions.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/virtual_connections_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/webhook_create.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/webhook_create_request.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/webhook_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_add_tags.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_get.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_get_by_id.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_get_by_id_acceleration_status.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_get_by_id_personal.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_get_empty.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_get_invalid_date.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_get_page_1.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_get_page_2.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_get_page_3.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_populate_connections.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_populate_permissions.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_populate_views.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_populate_views_usage.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_publish.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_publish_async.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_refresh.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_revision.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_update.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_update_acceleration_status.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_update_data_freshness_policy.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_update_data_freshness_policy2.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_update_data_freshness_policy3.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_update_data_freshness_policy4.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_update_data_freshness_policy5.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_update_data_freshness_policy6.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_update_permissions.xml +0 -0
- {tableauserverclient-0.37 → tableauserverclient-0.39}/test/assets/workbook_update_views_acceleration_status.xml +0 -0
- {tableauserverclient-0.37/test/request_factory → tableauserverclient-0.39/test/http}/__init__.py +0 -0
|
@@ -4,8 +4,6 @@ include CONTRIBUTORS.md
|
|
|
4
4
|
include LICENSE
|
|
5
5
|
include LICENSE.versioneer
|
|
6
6
|
include README.md
|
|
7
|
-
include tableauserverclient/_version.py
|
|
8
|
-
include versioneer.py
|
|
9
7
|
recursive-include docs *.md
|
|
10
8
|
recursive-include samples *.py
|
|
11
9
|
recursive-include samples *.txt
|
|
@@ -18,5 +16,4 @@ recursive-include test *.png
|
|
|
18
16
|
recursive-include test *.py
|
|
19
17
|
recursive-include test *.xml
|
|
20
18
|
recursive-include test *.tde
|
|
21
|
-
global-include *.pyi
|
|
22
19
|
global-include *.typed
|
|
@@ -1,30 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tableauserverclient
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.39
|
|
4
4
|
Summary: A Python module for working with the Tableau Server REST API.
|
|
5
5
|
Author-email: Tableau <github@tableau.com>
|
|
6
|
-
License: The MIT License (MIT)
|
|
7
|
-
|
|
8
|
-
Copyright (c) 2022 Tableau
|
|
9
|
-
|
|
10
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
-
in the Software without restriction, including without limitation the rights
|
|
13
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
-
furnished to do so, subject to the following conditions:
|
|
16
|
-
|
|
17
|
-
The above copyright notice and this permission notice shall be included in all
|
|
18
|
-
copies or substantial portions of the Software.
|
|
19
|
-
|
|
20
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
-
SOFTWARE.
|
|
27
|
-
|
|
28
6
|
Project-URL: repository, https://github.com/tableau/server-client-python
|
|
29
7
|
Classifier: Programming Language :: Python
|
|
30
8
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -36,20 +14,21 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
36
14
|
Requires-Python: >=3.9
|
|
37
15
|
Description-Content-Type: text/markdown
|
|
38
16
|
License-File: LICENSE
|
|
39
|
-
License-File: LICENSE.versioneer
|
|
40
17
|
Requires-Dist: defusedxml>=0.7.1
|
|
41
18
|
Requires-Dist: packaging>=23.1
|
|
42
19
|
Requires-Dist: requests>=2.32
|
|
43
|
-
Requires-Dist: urllib3<3,>=2.
|
|
20
|
+
Requires-Dist: urllib3<3,>=2.6.0
|
|
44
21
|
Requires-Dist: typing_extensions>=4.0
|
|
45
22
|
Provides-Extra: test
|
|
46
|
-
Requires-Dist: black==24.
|
|
23
|
+
Requires-Dist: black==24.10; extra == "test"
|
|
47
24
|
Requires-Dist: build; extra == "test"
|
|
48
25
|
Requires-Dist: mypy==1.4; extra == "test"
|
|
49
26
|
Requires-Dist: pytest>=7.0; extra == "test"
|
|
50
27
|
Requires-Dist: pytest-cov; extra == "test"
|
|
51
28
|
Requires-Dist: pytest-subtests; extra == "test"
|
|
29
|
+
Requires-Dist: pytest-xdist; extra == "test"
|
|
52
30
|
Requires-Dist: requests-mock<2.0,>=1.0; extra == "test"
|
|
31
|
+
Requires-Dist: types-requests>=2.32.4.20250913; extra == "test"
|
|
53
32
|
Dynamic: license-file
|
|
54
33
|
|
|
55
34
|
# Tableau Server Client (Python)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["setuptools>=
|
|
2
|
+
requires = ["setuptools>=77.0", "versioneer[toml]==0.29", "wheel"]
|
|
3
3
|
build-backend = "setuptools.build_meta"
|
|
4
4
|
|
|
5
5
|
[project]
|
|
@@ -8,14 +8,14 @@ name="tableauserverclient"
|
|
|
8
8
|
dynamic = ["version"]
|
|
9
9
|
description='A Python module for working with the Tableau Server REST API.'
|
|
10
10
|
authors = [{name="Tableau", email="github@tableau.com"}]
|
|
11
|
-
license =
|
|
11
|
+
license-files = ["LICENSE"]
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
|
|
14
14
|
dependencies = [
|
|
15
15
|
'defusedxml>=0.7.1', # latest as at 7/31/23
|
|
16
16
|
'packaging>=23.1', # latest as at 7/31/23
|
|
17
17
|
'requests>=2.32', # latest as at 7/31/23
|
|
18
|
-
'urllib3>=2.
|
|
18
|
+
'urllib3>=2.6.0,<3',
|
|
19
19
|
'typing_extensions>=4.0',
|
|
20
20
|
]
|
|
21
21
|
requires-python = ">=3.9"
|
|
@@ -32,8 +32,13 @@ classifiers = [
|
|
|
32
32
|
repository = "https://github.com/tableau/server-client-python"
|
|
33
33
|
|
|
34
34
|
[project.optional-dependencies]
|
|
35
|
-
test = ["black==24.
|
|
36
|
-
"requests-mock>=1.0,<2.0"]
|
|
35
|
+
test = ["black==24.10", "build", "mypy==1.4", "pytest>=7.0", "pytest-cov", "pytest-subtests",
|
|
36
|
+
"pytest-xdist", "requests-mock>=1.0,<2.0", "types-requests>=2.32.4.20250913"]
|
|
37
|
+
|
|
38
|
+
[tool.setuptools.packages.find]
|
|
39
|
+
where = ["tableauserverclient"]
|
|
40
|
+
[tool.setuptools.dynamic]
|
|
41
|
+
version = {attr = "versioneer.get_version"}
|
|
37
42
|
|
|
38
43
|
[tool.black]
|
|
39
44
|
line-length = 120
|
|
@@ -61,5 +66,5 @@ addopts = "--junitxml=./test.junit.xml"
|
|
|
61
66
|
VCS = "git"
|
|
62
67
|
style = "pep440-pre"
|
|
63
68
|
versionfile_source = "tableauserverclient/bin/_version.py"
|
|
64
|
-
versionfile_build = "
|
|
69
|
+
versionfile_build = "_version.py"
|
|
65
70
|
tag_prefix = "v"
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
####
|
|
2
|
+
# This script demonstrates how to create a user using the Tableau
|
|
3
|
+
# Server Client.
|
|
4
|
+
#
|
|
5
|
+
# To run the script, you must have installed Python 3.7 or later.
|
|
6
|
+
####
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
import argparse
|
|
10
|
+
import logging
|
|
11
|
+
import os
|
|
12
|
+
import sys
|
|
13
|
+
from typing import Sequence
|
|
14
|
+
|
|
15
|
+
import tableauserverclient as TSC
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def parse_args(args: Sequence[str] | None) -> argparse.Namespace:
|
|
19
|
+
"""
|
|
20
|
+
Parse command line parameters
|
|
21
|
+
"""
|
|
22
|
+
if args is None:
|
|
23
|
+
args = sys.argv[1:]
|
|
24
|
+
parser = argparse.ArgumentParser(description="Creates a sample user group.")
|
|
25
|
+
# Common options; please keep those in sync across all samples
|
|
26
|
+
parser.add_argument("--server", "-s", help="server address")
|
|
27
|
+
parser.add_argument("--site", "-S", help="site name")
|
|
28
|
+
parser.add_argument("--token-name", "-p", help="name of the personal access token used to sign into the server")
|
|
29
|
+
parser.add_argument("--token-value", "-v", help="value of the personal access token used to sign into the server")
|
|
30
|
+
parser.add_argument(
|
|
31
|
+
"--logging-level",
|
|
32
|
+
"-l",
|
|
33
|
+
choices=["debug", "info", "error"],
|
|
34
|
+
default="error",
|
|
35
|
+
help="desired logging level (set to error by default)",
|
|
36
|
+
)
|
|
37
|
+
# Options specific to this sample
|
|
38
|
+
# This sample has no additional options, yet. If you add some, please add them here
|
|
39
|
+
parser.add_argument("--role", "-r", help="Site Role for the new user", default="Unlicensed")
|
|
40
|
+
parser.add_argument(
|
|
41
|
+
"--user",
|
|
42
|
+
"-u",
|
|
43
|
+
help="Username for the new user. If using active directory, it should be in the format of SAMAccountName@FullyQualifiedDomainName",
|
|
44
|
+
)
|
|
45
|
+
parser.add_argument(
|
|
46
|
+
"--email", "-e", help="Email address of the new user. If using active directory, this field is optional."
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
return parser.parse_args(args)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def main():
|
|
53
|
+
args = parse_args(None)
|
|
54
|
+
|
|
55
|
+
# Set logging level based on user input, or error by default
|
|
56
|
+
logging_level = getattr(logging, args.logging_level.upper())
|
|
57
|
+
logging.basicConfig(level=logging_level)
|
|
58
|
+
|
|
59
|
+
tableau_auth = TSC.PersonalAccessTokenAuth(args.token_name, args.token_value, site_id=args.site)
|
|
60
|
+
server = TSC.Server(args.server, use_server_version=True, http_options={"verify": False})
|
|
61
|
+
with server.auth.sign_in(tableau_auth):
|
|
62
|
+
# this code shows 2 different error codes for common mistakes
|
|
63
|
+
# 400013: Invalid site role
|
|
64
|
+
# 409000: user already exists on site
|
|
65
|
+
|
|
66
|
+
user = TSC.UserItem(args.user, args.role)
|
|
67
|
+
if args.email:
|
|
68
|
+
user.email = args.email
|
|
69
|
+
user = server.users.add(user)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
if __name__ == "__main__":
|
|
73
|
+
main()
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
####
|
|
2
|
+
# This script demonstrates how to use the metadata API to query information on a published data source
|
|
3
|
+
#
|
|
4
|
+
# To run the script, you must have installed Python 3.7 or later.
|
|
5
|
+
####
|
|
6
|
+
|
|
7
|
+
import argparse
|
|
8
|
+
import logging
|
|
9
|
+
from pprint import pprint
|
|
10
|
+
|
|
11
|
+
import tableauserverclient as TSC
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def main():
|
|
15
|
+
parser = argparse.ArgumentParser(description="Use the metadata API to get information on a published data source.")
|
|
16
|
+
# Common options; please keep those in sync across all samples
|
|
17
|
+
parser.add_argument("--server", "-s", help="server address")
|
|
18
|
+
parser.add_argument("--site", "-S", help="site name")
|
|
19
|
+
parser.add_argument("--token-name", "-n", help="name of the personal access token used to sign into the server")
|
|
20
|
+
parser.add_argument("--token-value", "-v", help="value of the personal access token used to sign into the server")
|
|
21
|
+
parser.add_argument(
|
|
22
|
+
"--logging-level",
|
|
23
|
+
"-l",
|
|
24
|
+
choices=["debug", "info", "error"],
|
|
25
|
+
default="error",
|
|
26
|
+
help="desired logging level (set to error by default)",
|
|
27
|
+
)
|
|
28
|
+
# Options specific to this sample
|
|
29
|
+
parser.add_argument(
|
|
30
|
+
"datasource_name",
|
|
31
|
+
nargs="?",
|
|
32
|
+
help="The name of the published datasource. If not present, we query all data sources.",
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
args = parser.parse_args()
|
|
36
|
+
|
|
37
|
+
# Set logging level based on user input, or error by default
|
|
38
|
+
logging_level = getattr(logging, args.logging_level.upper())
|
|
39
|
+
logging.basicConfig(level=logging_level)
|
|
40
|
+
|
|
41
|
+
# Sign in to server
|
|
42
|
+
tableau_auth = TSC.PersonalAccessTokenAuth(args.token_name, args.token_value, site_id=args.site)
|
|
43
|
+
server = TSC.Server(args.server, use_server_version=True)
|
|
44
|
+
with server.auth.sign_in(tableau_auth):
|
|
45
|
+
# Execute the query
|
|
46
|
+
result = server.metadata.query(
|
|
47
|
+
"""
|
|
48
|
+
# Query must declare that it accepts first and afterToken variables
|
|
49
|
+
query paged($first:Int, $afterToken:String) {
|
|
50
|
+
workbooksConnection(first: $first, after:$afterToken) {
|
|
51
|
+
nodes {
|
|
52
|
+
luid
|
|
53
|
+
name
|
|
54
|
+
projectName
|
|
55
|
+
description
|
|
56
|
+
}
|
|
57
|
+
totalCount
|
|
58
|
+
pageInfo {
|
|
59
|
+
endCursor
|
|
60
|
+
hasNextPage
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
""",
|
|
65
|
+
# "first" adjusts the page size. Here we set it to 5 to demonstrate pagination.
|
|
66
|
+
# Set it to a higher number to reduce the number of pages. Including
|
|
67
|
+
# first and afterToken is optional, and if not included, TSC will
|
|
68
|
+
# use its default page size of 100.
|
|
69
|
+
variables={"first": 5, "afterToken": None},
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
# Multiple pages are captured in result["pages"]. Each page contains
|
|
73
|
+
# the result of one execution of the query above.
|
|
74
|
+
for page in result["pages"]:
|
|
75
|
+
# Display warnings/errors (if any)
|
|
76
|
+
if page.get("errors"):
|
|
77
|
+
print("### Errors/Warnings:")
|
|
78
|
+
pprint(result["errors"])
|
|
79
|
+
|
|
80
|
+
# Print the results
|
|
81
|
+
if result.get("data"):
|
|
82
|
+
print("### Results:")
|
|
83
|
+
pprint(result["data"]["workbooksConnection"]["nodes"])
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
if __name__ == "__main__":
|
|
87
|
+
main()
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import logging
|
|
3
|
+
import tableauserverclient as TSC
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def main():
|
|
7
|
+
parser = argparse.ArgumentParser(
|
|
8
|
+
description="Update a single connection on a datasource or workbook to embed credentials"
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
# Common options
|
|
12
|
+
parser.add_argument("--server", "-s", help="Server address", required=True)
|
|
13
|
+
parser.add_argument("--site", "-S", help="Site name", required=True)
|
|
14
|
+
parser.add_argument("--token-name", "-p", help="Personal access token name", required=True)
|
|
15
|
+
parser.add_argument("--token-value", "-v", help="Personal access token value", required=True)
|
|
16
|
+
parser.add_argument(
|
|
17
|
+
"--logging-level",
|
|
18
|
+
"-l",
|
|
19
|
+
choices=["debug", "info", "error"],
|
|
20
|
+
default="error",
|
|
21
|
+
help="Logging level (default: error)",
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
# Resource and connection details
|
|
25
|
+
parser.add_argument("resource_type", choices=["workbook", "datasource"])
|
|
26
|
+
parser.add_argument("resource_id", help="Workbook or datasource ID")
|
|
27
|
+
parser.add_argument("connection_id", help="Connection ID to update")
|
|
28
|
+
parser.add_argument("datasource_username", help="Username to set for the connection")
|
|
29
|
+
parser.add_argument("datasource_password", help="Password to set for the connection")
|
|
30
|
+
parser.add_argument("authentication_type", help="Authentication type")
|
|
31
|
+
|
|
32
|
+
args = parser.parse_args()
|
|
33
|
+
|
|
34
|
+
# Logging setup
|
|
35
|
+
logging_level = getattr(logging, args.logging_level.upper())
|
|
36
|
+
logging.basicConfig(level=logging_level)
|
|
37
|
+
|
|
38
|
+
tableau_auth = TSC.PersonalAccessTokenAuth(args.token_name, args.token_value, site_id=args.site)
|
|
39
|
+
server = TSC.Server(args.server, use_server_version=True)
|
|
40
|
+
|
|
41
|
+
with server.auth.sign_in(tableau_auth):
|
|
42
|
+
endpoint = {"workbook": server.workbooks, "datasource": server.datasources}.get(args.resource_type)
|
|
43
|
+
|
|
44
|
+
update_function = endpoint.update_connection
|
|
45
|
+
resource = endpoint.get_by_id(args.resource_id)
|
|
46
|
+
endpoint.populate_connections(resource)
|
|
47
|
+
|
|
48
|
+
connections = [conn for conn in resource.connections if conn.id == args.connection_id]
|
|
49
|
+
assert len(connections) == 1, f"Connection ID '{args.connection_id}' not found."
|
|
50
|
+
|
|
51
|
+
connection = connections[0]
|
|
52
|
+
connection.username = args.datasource_username
|
|
53
|
+
connection.password = args.datasource_password
|
|
54
|
+
connection.auth_type = args.authentication_type
|
|
55
|
+
connection.embed_password = True
|
|
56
|
+
|
|
57
|
+
updated_connection = update_function(resource, connection)
|
|
58
|
+
print(f"Updated connection: {updated_connection.__dict__}")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
if __name__ == "__main__":
|
|
62
|
+
main()
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import logging
|
|
3
|
+
import tableauserverclient as TSC
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def main():
|
|
7
|
+
parser = argparse.ArgumentParser(description="Bulk update all workbook or datasource connections")
|
|
8
|
+
|
|
9
|
+
# Common options
|
|
10
|
+
parser.add_argument("--server", "-s", help="Server address", required=True)
|
|
11
|
+
parser.add_argument("--site", "-S", help="Site name", required=True)
|
|
12
|
+
parser.add_argument("--token-name", "-p", help="Personal access token name", required=True)
|
|
13
|
+
parser.add_argument("--token-value", "-v", help="Personal access token value", required=True)
|
|
14
|
+
parser.add_argument(
|
|
15
|
+
"--logging-level",
|
|
16
|
+
"-l",
|
|
17
|
+
choices=["debug", "info", "error"],
|
|
18
|
+
default="error",
|
|
19
|
+
help="Logging level (default: error)",
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
# Resource-specific
|
|
23
|
+
parser.add_argument("resource_type", choices=["workbook", "datasource"])
|
|
24
|
+
parser.add_argument("resource_id")
|
|
25
|
+
parser.add_argument("datasource_username")
|
|
26
|
+
parser.add_argument("authentication_type")
|
|
27
|
+
parser.add_argument("--datasource_password", default=None, help="Datasource password (optional)")
|
|
28
|
+
parser.add_argument(
|
|
29
|
+
"--embed_password", default="true", choices=["true", "false"], help="Embed password (default: true)"
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
args = parser.parse_args()
|
|
33
|
+
|
|
34
|
+
# Set logging level
|
|
35
|
+
logging_level = getattr(logging, args.logging_level.upper())
|
|
36
|
+
logging.basicConfig(level=logging_level)
|
|
37
|
+
|
|
38
|
+
tableau_auth = TSC.PersonalAccessTokenAuth(args.token_name, args.token_value, site_id=args.site)
|
|
39
|
+
server = TSC.Server(args.server, use_server_version=True)
|
|
40
|
+
|
|
41
|
+
with server.auth.sign_in(tableau_auth):
|
|
42
|
+
endpoint = {"workbook": server.workbooks, "datasource": server.datasources}.get(args.resource_type)
|
|
43
|
+
|
|
44
|
+
resource = endpoint.get_by_id(args.resource_id)
|
|
45
|
+
endpoint.populate_connections(resource)
|
|
46
|
+
|
|
47
|
+
connection_luids = [conn.id for conn in resource.connections]
|
|
48
|
+
embed_password = args.embed_password.lower() == "true"
|
|
49
|
+
|
|
50
|
+
# Call unified update_connections method
|
|
51
|
+
connection_items = endpoint.update_connections(
|
|
52
|
+
resource,
|
|
53
|
+
connection_luids=connection_luids,
|
|
54
|
+
authentication_type=args.authentication_type,
|
|
55
|
+
username=args.datasource_username,
|
|
56
|
+
password=args.datasource_password,
|
|
57
|
+
embed_password=embed_password,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
print(f"Updated connections on {args.resource_type} {args.resource_id}: {connection_items}")
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
if __name__ == "__main__":
|
|
64
|
+
main()
|
|
@@ -76,7 +76,7 @@ def main():
|
|
|
76
76
|
print("Waiting for job...")
|
|
77
77
|
# `wait_for_job` will throw if the job isn't executed successfully
|
|
78
78
|
job = server.jobs.wait_for_job(job)
|
|
79
|
-
print("Job finished
|
|
79
|
+
print("Job finished successfully")
|
|
80
80
|
|
|
81
81
|
|
|
82
82
|
if __name__ == "__main__":
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "
|
|
11
|
+
"date": "2026-02-02T11:01:51-0800",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "0.
|
|
14
|
+
"full-revisionid": "34ac954b8edd87e367e4e1f54b4179aee54e2816",
|
|
15
|
+
"version": "0.39"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
{tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/helpers/strings.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from defusedxml.ElementTree import fromstring, tostring
|
|
2
2
|
from functools import singledispatch
|
|
3
|
-
from typing import TypeVar
|
|
3
|
+
from typing import TypeVar, overload
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
# the redact method can handle either strings or bytes, but it can't mix them.
|
|
@@ -41,3 +41,27 @@ def _(xml: str) -> str:
|
|
|
41
41
|
@redact_xml.register # type: ignore[no-redef]
|
|
42
42
|
def _(xml: bytes) -> bytes:
|
|
43
43
|
return _redact_any_type(bytearray(xml), b"password", b"..[redacted]")
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@overload
|
|
47
|
+
def nullable_str_to_int(value: None) -> None: ...
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
@overload
|
|
51
|
+
def nullable_str_to_int(value: str) -> int: ...
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def nullable_str_to_int(value):
|
|
55
|
+
return int(value) if value is not None else None
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@overload
|
|
59
|
+
def nullable_str_to_bool(value: None) -> None: ...
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@overload
|
|
63
|
+
def nullable_str_to_bool(value: str) -> bool: ...
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def nullable_str_to_bool(value):
|
|
67
|
+
return str(value).lower() == "true" if value is not None else None
|
{tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/__init__.py
RENAMED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from tableauserverclient.models.collection_item import CollectionItem
|
|
1
2
|
from tableauserverclient.models.column_item import ColumnItem
|
|
2
3
|
from tableauserverclient.models.connection_credentials import ConnectionCredentials
|
|
3
4
|
from tableauserverclient.models.connection_item import ConnectionItem
|
|
@@ -9,6 +10,7 @@ from tableauserverclient.models.data_freshness_policy_item import DataFreshnessP
|
|
|
9
10
|
from tableauserverclient.models.datasource_item import DatasourceItem
|
|
10
11
|
from tableauserverclient.models.dqw_item import DQWItem
|
|
11
12
|
from tableauserverclient.models.exceptions import UnpopulatedPropertyError
|
|
13
|
+
from tableauserverclient.models.extensions_item import ExtensionsServer, ExtensionsSiteSettings, SafeExtension
|
|
12
14
|
from tableauserverclient.models.favorites_item import FavoriteItem
|
|
13
15
|
from tableauserverclient.models.fileupload_item import FileuploadItem
|
|
14
16
|
from tableauserverclient.models.flow_item import FlowItem
|
|
@@ -28,14 +30,16 @@ from tableauserverclient.models.linked_tasks_item import (
|
|
|
28
30
|
LinkedTaskStepItem,
|
|
29
31
|
LinkedTaskFlowRunItem,
|
|
30
32
|
)
|
|
33
|
+
from tableauserverclient.models.location_item import LocationItem
|
|
31
34
|
from tableauserverclient.models.metric_item import MetricItem
|
|
35
|
+
from tableauserverclient.models.oidc_item import SiteOIDCConfiguration
|
|
32
36
|
from tableauserverclient.models.pagination_item import PaginationItem
|
|
33
37
|
from tableauserverclient.models.permissions_item import PermissionsRule, Permission
|
|
34
38
|
from tableauserverclient.models.project_item import ProjectItem
|
|
35
39
|
from tableauserverclient.models.revision_item import RevisionItem
|
|
36
40
|
from tableauserverclient.models.schedule_item import ScheduleItem
|
|
37
41
|
from tableauserverclient.models.server_info_item import ServerInfoItem
|
|
38
|
-
from tableauserverclient.models.site_item import SiteItem
|
|
42
|
+
from tableauserverclient.models.site_item import SiteItem, SiteAuthConfiguration
|
|
39
43
|
from tableauserverclient.models.subscription_item import SubscriptionItem
|
|
40
44
|
from tableauserverclient.models.table_item import TableItem
|
|
41
45
|
from tableauserverclient.models.tableau_auth import Credentials, TableauAuth, PersonalAccessTokenAuth, JWTAuth
|
|
@@ -48,8 +52,10 @@ from tableauserverclient.models.view_item import ViewItem
|
|
|
48
52
|
from tableauserverclient.models.virtual_connection_item import VirtualConnectionItem
|
|
49
53
|
from tableauserverclient.models.webhook_item import WebhookItem
|
|
50
54
|
from tableauserverclient.models.workbook_item import WorkbookItem
|
|
55
|
+
from tableauserverclient.models.extract_item import ExtractItem
|
|
51
56
|
|
|
52
57
|
__all__ = [
|
|
58
|
+
"CollectionItem",
|
|
53
59
|
"ColumnItem",
|
|
54
60
|
"ConnectionCredentials",
|
|
55
61
|
"ConnectionItem",
|
|
@@ -75,7 +81,9 @@ __all__ = [
|
|
|
75
81
|
"MonthlyInterval",
|
|
76
82
|
"HourlyInterval",
|
|
77
83
|
"BackgroundJobItem",
|
|
84
|
+
"LocationItem",
|
|
78
85
|
"MetricItem",
|
|
86
|
+
"SiteOIDCConfiguration",
|
|
79
87
|
"PaginationItem",
|
|
80
88
|
"Permission",
|
|
81
89
|
"PermissionsRule",
|
|
@@ -83,7 +91,9 @@ __all__ = [
|
|
|
83
91
|
"RevisionItem",
|
|
84
92
|
"ScheduleItem",
|
|
85
93
|
"ServerInfoItem",
|
|
94
|
+
"SiteAuthConfiguration",
|
|
86
95
|
"SiteItem",
|
|
96
|
+
"SiteOIDCConfiguration",
|
|
87
97
|
"SubscriptionItem",
|
|
88
98
|
"TableItem",
|
|
89
99
|
"TableauAuth",
|
|
@@ -103,4 +113,8 @@ __all__ = [
|
|
|
103
113
|
"LinkedTaskItem",
|
|
104
114
|
"LinkedTaskStepItem",
|
|
105
115
|
"LinkedTaskFlowRunItem",
|
|
116
|
+
"ExtractItem",
|
|
117
|
+
"ExtensionsServer",
|
|
118
|
+
"ExtensionsSiteSettings",
|
|
119
|
+
"SafeExtension",
|
|
106
120
|
]
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
from typing import Optional
|
|
3
|
+
from xml.etree.ElementTree import Element
|
|
4
|
+
|
|
5
|
+
from defusedxml.ElementTree import fromstring
|
|
6
|
+
from typing_extensions import Self
|
|
7
|
+
|
|
8
|
+
from tableauserverclient.datetime_helpers import parse_datetime
|
|
9
|
+
from tableauserverclient.models.user_item import UserItem
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class CollectionItem:
|
|
13
|
+
def __init__(self) -> None:
|
|
14
|
+
self.id: Optional[str] = None
|
|
15
|
+
self.name: Optional[str] = None
|
|
16
|
+
self.description: Optional[str] = None
|
|
17
|
+
self.created_at: Optional[datetime] = None
|
|
18
|
+
self.updated_at: Optional[datetime] = None
|
|
19
|
+
self.owner: Optional[UserItem] = None
|
|
20
|
+
self.total_item_count: Optional[int] = None
|
|
21
|
+
self.permissioned_item_count: Optional[int] = None
|
|
22
|
+
self.visibility: Optional[str] = None # Assuming visibility is a string, adjust as necessary
|
|
23
|
+
|
|
24
|
+
@classmethod
|
|
25
|
+
def from_response(cls, response: bytes, ns) -> list[Self]:
|
|
26
|
+
parsed_response = fromstring(response)
|
|
27
|
+
|
|
28
|
+
collection_elements = parsed_response.findall(".//t:collection", namespaces=ns)
|
|
29
|
+
if not collection_elements:
|
|
30
|
+
raise ValueError("No collection element found in the response")
|
|
31
|
+
|
|
32
|
+
collections = [cls.from_xml(c, ns) for c in collection_elements]
|
|
33
|
+
return collections
|
|
34
|
+
|
|
35
|
+
@classmethod
|
|
36
|
+
def from_xml(cls, xml: Element, ns) -> Self:
|
|
37
|
+
collection_item = cls()
|
|
38
|
+
collection_item.id = xml.get("id")
|
|
39
|
+
collection_item.name = xml.get("name")
|
|
40
|
+
collection_item.description = xml.get("description")
|
|
41
|
+
collection_item.created_at = parse_datetime(xml.get("createdAt"))
|
|
42
|
+
collection_item.updated_at = parse_datetime(xml.get("updatedAt"))
|
|
43
|
+
owner_element = xml.find(".//t:owner", namespaces=ns)
|
|
44
|
+
if owner_element is not None:
|
|
45
|
+
collection_item.owner = UserItem.from_xml(owner_element, ns)
|
|
46
|
+
else:
|
|
47
|
+
collection_item.owner = None
|
|
48
|
+
collection_item.total_item_count = int(xml.get("totalItemCount", 0))
|
|
49
|
+
collection_item.permissioned_item_count = int(xml.get("permissionedItemCount", 0))
|
|
50
|
+
collection_item.visibility = xml.get("visibility")
|
|
51
|
+
|
|
52
|
+
return collection_item
|
{tableauserverclient-0.37 → tableauserverclient-0.39}/tableauserverclient/models/connection_item.py
RENAMED
|
@@ -41,6 +41,9 @@ class ConnectionItem:
|
|
|
41
41
|
server_port: str
|
|
42
42
|
The port used for the connection.
|
|
43
43
|
|
|
44
|
+
auth_type: str
|
|
45
|
+
Specifies the type of authentication used by the connection.
|
|
46
|
+
|
|
44
47
|
connection_credentials: ConnectionCredentials
|
|
45
48
|
The Connection Credentials object containing authentication details for
|
|
46
49
|
the connection. Replaces username/password/embed_password when
|
|
@@ -59,6 +62,7 @@ class ConnectionItem:
|
|
|
59
62
|
self.username: Optional[str] = None
|
|
60
63
|
self.connection_credentials: Optional[ConnectionCredentials] = None
|
|
61
64
|
self._query_tagging: Optional[bool] = None
|
|
65
|
+
self._auth_type: Optional[str] = None
|
|
62
66
|
|
|
63
67
|
@property
|
|
64
68
|
def datasource_id(self) -> Optional[str]:
|
|
@@ -91,8 +95,16 @@ class ConnectionItem:
|
|
|
91
95
|
return
|
|
92
96
|
self._query_tagging = value
|
|
93
97
|
|
|
98
|
+
@property
|
|
99
|
+
def auth_type(self) -> Optional[str]:
|
|
100
|
+
return self._auth_type
|
|
101
|
+
|
|
102
|
+
@auth_type.setter
|
|
103
|
+
def auth_type(self, value: Optional[str]):
|
|
104
|
+
self._auth_type = value
|
|
105
|
+
|
|
94
106
|
def __repr__(self):
|
|
95
|
-
return "<ConnectionItem#{_id} embed={embed_password} type={_connection_type} username={username}>".format(
|
|
107
|
+
return "<ConnectionItem#{_id} embed={embed_password} type={_connection_type} auth={_auth_type} username={username}>".format(
|
|
96
108
|
**self.__dict__
|
|
97
109
|
)
|
|
98
110
|
|
|
@@ -108,10 +120,11 @@ class ConnectionItem:
|
|
|
108
120
|
connection_item.embed_password = string_to_bool(connection_xml.get("embedPassword", ""))
|
|
109
121
|
connection_item.server_address = connection_xml.get("serverAddress", connection_xml.get("server", None))
|
|
110
122
|
connection_item.server_port = connection_xml.get("serverPort", connection_xml.get("port", None))
|
|
111
|
-
connection_item.username = connection_xml.get("userName", None)
|
|
123
|
+
connection_item.username = connection_xml.get("userName", connection_xml.get("username", None))
|
|
112
124
|
connection_item._query_tagging = (
|
|
113
125
|
string_to_bool(s) if (s := connection_xml.get("queryTagging", None)) else None
|
|
114
126
|
)
|
|
127
|
+
connection_item._auth_type = connection_xml.get("authenticationType", None)
|
|
115
128
|
datasource_elem = connection_xml.find(".//t:datasource", namespaces=ns)
|
|
116
129
|
if datasource_elem is not None:
|
|
117
130
|
connection_item._datasource_id = datasource_elem.get("id", None)
|
|
@@ -139,6 +152,7 @@ class ConnectionItem:
|
|
|
139
152
|
|
|
140
153
|
connection_item.server_address = connection_xml.get("serverAddress", None)
|
|
141
154
|
connection_item.server_port = connection_xml.get("serverPort", None)
|
|
155
|
+
connection_item._auth_type = connection_xml.get("authenticationType", None)
|
|
142
156
|
|
|
143
157
|
connection_credentials = connection_xml.find(".//t:connectionCredentials", namespaces=ns)
|
|
144
158
|
|