tableauserverclient 0.32__tar.gz → 0.33__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.33/CONTRIBUTORS.md +82 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/PKG-INFO +3 -3
- {tableauserverclient-0.32 → tableauserverclient-0.33}/README.md +2 -2
- tableauserverclient-0.33/contributing.md +25 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/__init__.py +10 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/_version.py +3 -3
- tableauserverclient-0.33/tableauserverclient/config.py +25 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/__init__.py +12 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/connection_item.py +4 -2
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/database_item.py +6 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/flow_item.py +6 -6
- tableauserverclient-0.33/tableauserverclient/models/groupset_item.py +53 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/interval_item.py +27 -14
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/job_item.py +18 -2
- tableauserverclient-0.33/tableauserverclient/models/linked_tasks_item.py +102 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/permissions_item.py +7 -4
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/tableau_types.py +9 -7
- tableauserverclient-0.33/tableauserverclient/models/virtual_connection_item.py +77 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/__init__.py +8 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/auth_endpoint.py +3 -3
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/custom_views_endpoint.py +65 -4
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/databases_endpoint.py +21 -7
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/datasources_endpoint.py +105 -9
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/endpoint.py +32 -14
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/fileuploads_endpoint.py +2 -2
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/flow_runs_endpoint.py +44 -4
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/flows_endpoint.py +43 -6
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/groups_endpoint.py +82 -14
- tableauserverclient-0.33/tableauserverclient/server/endpoint/groupsets_endpoint.py +127 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/jobs_endpoint.py +74 -7
- tableauserverclient-0.33/tableauserverclient/server/endpoint/linked_tasks_endpoint.py +45 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/projects_endpoint.py +43 -0
- tableauserverclient-0.33/tableauserverclient/server/endpoint/resource_tagger.py +183 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/tables_endpoint.py +19 -6
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/users_endpoint.py +39 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/views_endpoint.py +94 -9
- tableauserverclient-0.33/tableauserverclient/server/endpoint/virtual_connections_endpoint.py +173 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/workbooks_endpoint.py +91 -10
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/pager.py +6 -7
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/query.py +2 -1
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/request_factory.py +178 -7
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/request_options.py +4 -2
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/server.py +8 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient.egg-info/PKG-INFO +3 -3
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient.egg-info/SOURCES.txt +27 -0
- tableauserverclient-0.33/test/assets/custom_view_download.json +47 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/flow_populate_permissions.xml +8 -1
- tableauserverclient-0.33/test/assets/group_add_users.xml +8 -0
- tableauserverclient-0.33/test/assets/groupsets_create.xml +4 -0
- tableauserverclient-0.33/test/assets/groupsets_get.xml +15 -0
- tableauserverclient-0.33/test/assets/groupsets_get_by_id.xml +9 -0
- tableauserverclient-0.33/test/assets/groupsets_update.xml +9 -0
- tableauserverclient-0.33/test/assets/linked_tasks_get.xml +33 -0
- tableauserverclient-0.33/test/assets/linked_tasks_run_now.xml +7 -0
- tableauserverclient-0.33/test/assets/schedule_get_monthly_id_2.xml +12 -0
- tableauserverclient-0.33/test/assets/virtual_connection_add_permissions.xml +21 -0
- tableauserverclient-0.33/test/assets/virtual_connection_database_connection_update.xml +6 -0
- tableauserverclient-0.33/test/assets/virtual_connection_populate_connections.xml +6 -0
- tableauserverclient-0.33/test/assets/virtual_connections_download.xml +7 -0
- tableauserverclient-0.33/test/assets/virtual_connections_get.xml +14 -0
- tableauserverclient-0.33/test/assets/virtual_connections_publish.xml +7 -0
- tableauserverclient-0.33/test/assets/virtual_connections_revisions.xml +14 -0
- tableauserverclient-0.33/test/assets/virtual_connections_update.xml +8 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_custom_view.py +116 -2
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_fileuploads.py +25 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_flow.py +10 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_group.py +49 -0
- tableauserverclient-0.33/test/test_groupsets.py +139 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_job.py +24 -0
- tableauserverclient-0.33/test/test_linked_tasks.py +129 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_pager.py +36 -2
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_schedule.py +16 -0
- tableauserverclient-0.33/test/test_tagging.py +230 -0
- tableauserverclient-0.33/test/test_virtual_connection.py +242 -0
- tableauserverclient-0.32/CONTRIBUTORS.md +0 -62
- tableauserverclient-0.32/contributing.md +0 -86
- tableauserverclient-0.32/tableauserverclient/config.py +0 -13
- tableauserverclient-0.32/tableauserverclient/server/endpoint/resource_tagger.py +0 -51
- {tableauserverclient-0.32 → tableauserverclient-0.33}/CHANGELOG.md +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/LICENSE +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/LICENSE.versioneer +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/MANIFEST.in +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/docs/README.md +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/pyproject.toml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/add_default_permission.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/create_extract_task.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/create_group.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/create_project.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/create_schedules.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/explore_datasource.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/explore_favorites.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/explore_site.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/explore_webhooks.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/explore_workbook.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/export.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/extracts.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/filter_sort_groups.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/filter_sort_projects.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/getting_started/1_hello_server.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/getting_started/2_hello_site.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/getting_started/3_hello_universe.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/initialize_server.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/kill_all_jobs.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/list.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/login.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/metadata_query.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/move_workbook_projects.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/move_workbook_sites.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/name.txt +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/pagination_sample.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/publish_datasource.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/publish_workbook.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/query_permissions.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/refresh.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/refresh_tasks.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/set_refresh_schedule.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/smoke_test.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/update_connection.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/update_datasource_data.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/update_workbook_data_acceleration.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/samples/update_workbook_data_freshness_policy.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/setup.cfg +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/setup.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/datetime_helpers.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/exponential_backoff.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/filesys_helpers.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/helpers/__init__.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/helpers/headers.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/helpers/logging.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/helpers/strings.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/column_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/connection_credentials.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/custom_view_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/data_acceleration_report_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/data_alert_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/data_freshness_policy_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/datasource_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/dqw_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/exceptions.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/favorites_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/fileupload_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/flow_run_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/group_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/metric_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/pagination_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/project_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/property_decorators.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/reference_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/revision_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/schedule_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/server_info_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/site_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/subscription_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/table_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/tableau_auth.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/tag_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/target.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/task_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/user_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/view_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/webhook_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/workbook_item.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/namespace.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/py.typed +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/__init__.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/data_acceleration_report_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/data_alert_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/default_permissions_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/dqw_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/exceptions.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/favorites_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/flow_task_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/metadata_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/metrics_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/permissions_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/schedules_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/server_info_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/sites_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/subscriptions_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/tasks_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/endpoint/webhooks_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/exceptions.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/filter.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/server/sort.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient.egg-info/dependency_links.txt +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient.egg-info/requires.txt +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient.egg-info/top_level.txt +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/__init__.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/_utils.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/Data/Tableau Samples/World Indicators.tde +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/Data/user_details.csv +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/Data/usernames.csv +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/RESTAPISample Image.png +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/Sample View Image.png +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/World Indicators.hyper +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/auth_sign_in.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/auth_sign_in_error.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/auth_sign_in_impersonate.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/custom_view_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/custom_view_get_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/custom_view_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/data_acceleration_report.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/data_alerts_add_user.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/data_alerts_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/data_alerts_get_by_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/data_alerts_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/database_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/database_populate_permissions.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/database_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/datasource_add_tags.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/datasource_connection_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/datasource_data_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/datasource_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/datasource_get_by_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/datasource_get_empty.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/datasource_populate_connections.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/datasource_populate_permissions.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/datasource_publish.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/datasource_publish_async.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/datasource_refresh.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/datasource_revision.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/datasource_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/dqw_by_content_type.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/favorites_add_datasource.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/favorites_add_project.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/favorites_add_view.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/favorites_add_workbook.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/favorites_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/fileupload_append.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/fileupload_initialize.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/flow_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/flow_get_by_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/flow_populate_connections.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/flow_publish.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/flow_refresh.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/flow_runs_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/flow_runs_get_by_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/flow_runs_get_by_id_failed.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/flow_runs_get_by_id_inprogress.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/flow_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/group_add_user.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/group_create.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/group_create_ad.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/group_create_async.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/group_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/group_populate_users.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/group_populate_users_empty.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/group_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/group_update_async.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/group_users_added.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/job_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/job_get_by_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/job_get_by_id_failed.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/job_get_by_id_failed_workbook.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/job_get_by_id_inprogress.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/metadata_paged_1.json +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/metadata_paged_2.json +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/metadata_paged_3.json +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/metadata_query_error.json +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/metadata_query_expected_dict.dict +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/metadata_query_success.json +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/metrics_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/metrics_get_by_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/metrics_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/odata_connection.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/populate_csv.csv +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/populate_pdf.pdf +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/project_content_permission.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/project_create.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/project_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/project_populate_permissions.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/project_populate_workbook_default_permissions.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/project_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/project_update_datasource_default_permissions.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/queryset_slicing_page_1.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/queryset_slicing_page_2.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/request_option_filter_equals.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/request_option_filter_name_in.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/request_option_filter_tags_in.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/request_option_page_number.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/request_option_page_size.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/request_option_pagination.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/request_option_slicing_queryset.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_add_datasource.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_add_flow.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_add_workbook.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_add_workbook_with_warnings.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_create_daily.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_create_hourly.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_create_monthly.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_create_weekly.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_get_by_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_get_daily_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_get_empty.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_get_hourly_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_get_monthly_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/schedule_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/server_info_25.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/server_info_404.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/server_info_auth_info.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/server_info_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/site_create.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/site_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/site_get_by_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/site_get_by_name.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/site_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/subscription_create.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/subscription_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/subscription_get_by_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/table_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/table_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/tasks_create_extract_task.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/tasks_create_flow_task.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/tasks_no_workbook_or_datasource.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/tasks_run_now_response.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/tasks_with_dataacceleration_task.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/tasks_with_datasource.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/tasks_with_interval.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/tasks_with_workbook.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/tasks_with_workbook_and_datasource.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/tasks_without_schedule.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/user_add.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/user_add_favorite.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/user_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/user_get_by_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/user_get_empty.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/user_populate_groups.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/user_populate_workbooks.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/user_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/view_add_tags.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/view_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/view_get_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/view_get_id_usage.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/view_get_usage.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/view_populate_permissions.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/view_update_permissions.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/webhook_create.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/webhook_create_request.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/webhook_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_add_tags.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_get.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_get_by_id.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_get_by_id_acceleration_status.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_get_by_id_personal.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_get_empty.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_get_invalid_date.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_get_page_1.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_get_page_2.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_get_page_3.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_populate_connections.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_populate_permissions.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_populate_views.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_populate_views_usage.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_publish.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_publish_async.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_refresh.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_revision.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_update.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_update_acceleration_status.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_update_data_freshness_policy.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_update_data_freshness_policy2.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_update_data_freshness_policy3.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_update_data_freshness_policy4.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_update_data_freshness_policy5.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_update_data_freshness_policy6.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_update_permissions.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/assets/workbook_update_views_acceleration_status.xml +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/http/test_http_requests.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/models/_models.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/models/test_repr.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/request_factory/__init__.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/request_factory/test_datasource_requests.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/request_factory/test_workbook_requests.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_auth.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_connection_.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_data_acceleration_report.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_data_freshness_policy.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_dataalert.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_database.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_datasource.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_datasource_model.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_dqw.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_endpoint.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_exponential_backoff.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_favorites.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_filesys_helpers.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_filter.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_flowruns.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_flowtask.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_group_model.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_metadata.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_metrics.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_permissionsrule.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_project.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_project_model.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_regression_tests.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_request_option.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_requests.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_server_info.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_site.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_site_model.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_sort.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_subscription.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_table.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_tableauauth_model.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_task.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_user.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_user_model.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_view.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_view_acceleration.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_webhook.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_workbook.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/test/test_workbook_model.py +0 -0
- {tableauserverclient-0.32 → tableauserverclient-0.33}/versioneer.py +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
This project wouldn't be possible without our amazing contributors.
|
|
2
|
+
|
|
3
|
+
The following people have contributed to this project to make it possible, and we thank them for their contributions!
|
|
4
|
+
|
|
5
|
+
## Contributors
|
|
6
|
+
|
|
7
|
+
* [jacalata](https://github.com/jacalata)
|
|
8
|
+
* [jorwoods](https://github.com/jorwoods)
|
|
9
|
+
* [t8y8](https://github.com/t8y8)
|
|
10
|
+
* [bcantoni](https://github.com/bcantoni)
|
|
11
|
+
* [shinchris](https://github.com/shinchris)
|
|
12
|
+
* [vogelsgesang](https://github.com/vogelsgesang)
|
|
13
|
+
* [lbrendanl](https://github.com/lbrendanl)
|
|
14
|
+
* [LGraber](https://github.com/LGraber)
|
|
15
|
+
* [gaoang2148](https://github.com/gaoang2148)
|
|
16
|
+
* [benlower](https://github.com/benlower)
|
|
17
|
+
* [liu-rebecca](https://github.com/liu-rebecca)
|
|
18
|
+
* [guodah](https://github.com/guodah)
|
|
19
|
+
* [jdomingu](https://github.com/jdomingu)
|
|
20
|
+
* [kykrueger](https://github.com/kykrueger)
|
|
21
|
+
* [jz-huang](https://github.com/jz-huang)
|
|
22
|
+
* [opus-42](https://github.com/opus-42)
|
|
23
|
+
* [markm-io](https://github.com/markm-io)
|
|
24
|
+
* [graysonarts](https://github.com/graysonarts)
|
|
25
|
+
* [d45](https://github.com/d45)
|
|
26
|
+
* [preguraman](https://github.com/preguraman)
|
|
27
|
+
* [sotnich](https://github.com/sotnich)
|
|
28
|
+
* [mmuttreja-tableau](https://github.com/mmuttreja-tableau)
|
|
29
|
+
* [dependabot[bot]](https://github.com/apps/dependabot)
|
|
30
|
+
* [scuml](https://github.com/scuml)
|
|
31
|
+
* [ovinis](https://github.com/ovinis)
|
|
32
|
+
* [FFMMM](https://github.com/FFMMM)
|
|
33
|
+
* [martinbpeters](https://github.com/martinbpeters)
|
|
34
|
+
* [talvalin](https://github.com/talvalin)
|
|
35
|
+
* [dzucker-tab](https://github.com/dzucker-tab)
|
|
36
|
+
* [a-torres-2](https://github.com/a-torres-2)
|
|
37
|
+
* [nnevalainen](https://github.com/nnevalainen)
|
|
38
|
+
* [mbren](https://github.com/mbren)
|
|
39
|
+
* [wolkiewiczk](https://github.com/wolkiewiczk)
|
|
40
|
+
* [jacobj10](https://github.com/jacobj10)
|
|
41
|
+
* [hugoboos](https://github.com/hugoboos)
|
|
42
|
+
* [grbritz](https://github.com/grbritz)
|
|
43
|
+
* [fpagliar](https://github.com/fpagliar)
|
|
44
|
+
* [bskim45](https://github.com/bskim45)
|
|
45
|
+
* [baixin137](https://github.com/baixin137)
|
|
46
|
+
* [jessicachen79](https://github.com/jessicachen79)
|
|
47
|
+
* [gconklin](https://github.com/gconklin)
|
|
48
|
+
* [geordielad](https://github.com/geordielad)
|
|
49
|
+
* [fossabot](https://github.com/fossabot)
|
|
50
|
+
* [daniel1608](https://github.com/daniel1608)
|
|
51
|
+
* [annematronic](https://github.com/annematronic)
|
|
52
|
+
* [rshide](https://github.com/rshide)
|
|
53
|
+
* [VathsalaAchar](https://github.com/VathsalaAchar)
|
|
54
|
+
* [TrimPeachu](https://github.com/TrimPeachu)
|
|
55
|
+
* [ajbosco](https://github.com/ajbosco)
|
|
56
|
+
* [jimbodriven](https://github.com/jimbodriven)
|
|
57
|
+
* [ltiffanydev](https://github.com/ltiffanydev)
|
|
58
|
+
* [martydertz](https://github.com/martydertz)
|
|
59
|
+
* [r-richmond](https://github.com/r-richmond)
|
|
60
|
+
* [sfarr15](https://github.com/sfarr15)
|
|
61
|
+
* [tagyoureit](https://github.com/tagyoureit)
|
|
62
|
+
* [tjones-commits](https://github.com/tjones-commits)
|
|
63
|
+
* [yoshichan5](https://github.com/yoshichan5)
|
|
64
|
+
* [wlodi83](https://github.com/wlodi83)
|
|
65
|
+
* [anipmehta](https://github.com/anipmehta)
|
|
66
|
+
* [cmtoomey](https://github.com/cmtoomey)
|
|
67
|
+
* [pes-magic](https://github.com/pes-magic)
|
|
68
|
+
* [illonage](https://github.com/illonage)
|
|
69
|
+
* [jayvdb](https://github.com/jayvdb)
|
|
70
|
+
* [jorgeFons](https://github.com/jorgeFons)
|
|
71
|
+
* [Kovner](https://github.com/Kovner)
|
|
72
|
+
* [LarsBreddemann](https://github.com/LarsBreddemann)
|
|
73
|
+
* [lboynton](https://github.com/lboynton)
|
|
74
|
+
* [maddy-at-leisure](https://github.com/maddy-at-leisure)
|
|
75
|
+
* [narcolino-tableau](https://github.com/narcolino-tableau)
|
|
76
|
+
* [PatrickfBraz](https://github.com/PatrickfBraz)
|
|
77
|
+
* [paulvic](https://github.com/paulvic)
|
|
78
|
+
* [shrmnk](https://github.com/shrmnk)
|
|
79
|
+
* [TableauKyle](https://github.com/TableauKyle)
|
|
80
|
+
* [bossenti](https://github.com/bossenti)
|
|
81
|
+
* [ma7tcsp](https://github.com/ma7tcsp)
|
|
82
|
+
* [toomyem](https://github.com/toomyem)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: tableauserverclient
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.33
|
|
4
4
|
Summary: A Python module for working with the Tableau Server REST API.
|
|
5
5
|
Author-email: Tableau <github@tableau.com>
|
|
6
6
|
License: The MIT License (MIT)
|
|
@@ -62,14 +62,14 @@ Use the Tableau Server Client (TSC) library to increase your productivity as you
|
|
|
62
62
|
* Create users and groups.
|
|
63
63
|
* Query projects, sites, and more.
|
|
64
64
|
|
|
65
|
-
This repository contains Python source code for the library and sample files showing how to use it. As of
|
|
65
|
+
This repository contains Python source code for the library and sample files showing how to use it. As of September 2024, support for Python 3.7 and 3.8 will be dropped - support for older versions of Python aims to match https://devguide.python.org/versions/
|
|
66
66
|
|
|
67
67
|
To see sample code that works directly with the REST API (in Java, Python, or Postman), visit the [REST API Samples](https://github.com/tableau/rest-api-samples) repo.
|
|
68
68
|
|
|
69
69
|
For more information on installing and using TSC, see the documentation:
|
|
70
70
|
<https://tableau.github.io/server-client-python/docs/>
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
To contribute, see our [Developer Guide](https://tableau.github.io/server-client-python/docs/dev-guide). A list of all our contributors to date is in [CONTRIBUTORS.md].
|
|
73
73
|
|
|
74
74
|
## License
|
|
75
75
|
[](https://app.fossa.com/projects/git%2Bgithub.com%2Ftableau%2Fserver-client-python?ref=badge_large)
|
|
@@ -9,14 +9,14 @@ Use the Tableau Server Client (TSC) library to increase your productivity as you
|
|
|
9
9
|
* Create users and groups.
|
|
10
10
|
* Query projects, sites, and more.
|
|
11
11
|
|
|
12
|
-
This repository contains Python source code for the library and sample files showing how to use it. As of
|
|
12
|
+
This repository contains Python source code for the library and sample files showing how to use it. As of September 2024, support for Python 3.7 and 3.8 will be dropped - support for older versions of Python aims to match https://devguide.python.org/versions/
|
|
13
13
|
|
|
14
14
|
To see sample code that works directly with the REST API (in Java, Python, or Postman), visit the [REST API Samples](https://github.com/tableau/rest-api-samples) repo.
|
|
15
15
|
|
|
16
16
|
For more information on installing and using TSC, see the documentation:
|
|
17
17
|
<https://tableau.github.io/server-client-python/docs/>
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
To contribute, see our [Developer Guide](https://tableau.github.io/server-client-python/docs/dev-guide). A list of all our contributors to date is in [CONTRIBUTORS.md].
|
|
20
20
|
|
|
21
21
|
## License
|
|
22
22
|
[](https://app.fossa.com/projects/git%2Bgithub.com%2Ftableau%2Fserver-client-python?ref=badge_large)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
We welcome contributions to this project!
|
|
4
|
+
|
|
5
|
+
Contribution can include, but are not limited to, any of the following:
|
|
6
|
+
|
|
7
|
+
* File an Issue
|
|
8
|
+
* Request a Feature
|
|
9
|
+
* Implement a Requested Feature
|
|
10
|
+
* Fix an Issue/Bug
|
|
11
|
+
* Add/Fix documentation
|
|
12
|
+
|
|
13
|
+
## Issues and Feature Requests
|
|
14
|
+
|
|
15
|
+
To submit an issue/bug report, or to request a feature, please submit a [GitHub issue](https://github.com/tableau/server-client-python/issues) to the repo.
|
|
16
|
+
|
|
17
|
+
If you are submitting a bug report, please provide as much information as you can, including clear and concise repro steps, attaching any necessary
|
|
18
|
+
files to assist in the repro. **Be sure to scrub the files of any potentially sensitive information. Issues are public.**
|
|
19
|
+
|
|
20
|
+
For a feature request, please try to describe the scenario you are trying to accomplish that requires the feature. This will help us understand
|
|
21
|
+
the limitations that you are running into, and provide us with a use case to know if we've satisfied your request.
|
|
22
|
+
|
|
23
|
+
### Making Contributions
|
|
24
|
+
|
|
25
|
+
Refer to the [Developer Guide](https://tableau.github.io/server-client-python/docs/dev-guide) which explains how to make contributions to the TSC project.
|
|
@@ -17,10 +17,14 @@ from tableauserverclient.models import (
|
|
|
17
17
|
FlowRunItem,
|
|
18
18
|
FileuploadItem,
|
|
19
19
|
GroupItem,
|
|
20
|
+
GroupSetItem,
|
|
20
21
|
HourlyInterval,
|
|
21
22
|
IntervalItem,
|
|
22
23
|
JobItem,
|
|
23
24
|
JWTAuth,
|
|
25
|
+
LinkedTaskItem,
|
|
26
|
+
LinkedTaskStepItem,
|
|
27
|
+
LinkedTaskFlowRunItem,
|
|
24
28
|
MetricItem,
|
|
25
29
|
MonthlyInterval,
|
|
26
30
|
PaginationItem,
|
|
@@ -39,6 +43,7 @@ from tableauserverclient.models import (
|
|
|
39
43
|
TaskItem,
|
|
40
44
|
UserItem,
|
|
41
45
|
ViewItem,
|
|
46
|
+
VirtualConnectionItem,
|
|
42
47
|
WebhookItem,
|
|
43
48
|
WeeklyInterval,
|
|
44
49
|
WorkbookItem,
|
|
@@ -79,6 +84,7 @@ __all__ = [
|
|
|
79
84
|
"FlowRunItem",
|
|
80
85
|
"FileuploadItem",
|
|
81
86
|
"GroupItem",
|
|
87
|
+
"GroupSetItem",
|
|
82
88
|
"HourlyInterval",
|
|
83
89
|
"IntervalItem",
|
|
84
90
|
"JobItem",
|
|
@@ -116,4 +122,8 @@ __all__ = [
|
|
|
116
122
|
"Pager",
|
|
117
123
|
"Server",
|
|
118
124
|
"Sort",
|
|
125
|
+
"LinkedTaskItem",
|
|
126
|
+
"LinkedTaskStepItem",
|
|
127
|
+
"LinkedTaskFlowRunItem",
|
|
128
|
+
"VirtualConnectionItem",
|
|
119
129
|
]
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2024-
|
|
11
|
+
"date": "2024-09-17T16:51:07-0700",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "0.
|
|
14
|
+
"full-revisionid": "4259316ef2e2656531b0c65c71d043708b37b4a9",
|
|
15
|
+
"version": "0.33"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
ALLOWED_FILE_EXTENSIONS = ["tds", "tdsx", "tde", "hyper", "parquet"]
|
|
4
|
+
|
|
5
|
+
BYTES_PER_MB = 1024 * 1024
|
|
6
|
+
|
|
7
|
+
DELAY_SLEEP_SECONDS = 0.1
|
|
8
|
+
|
|
9
|
+
# The maximum size of a file that can be published in a single request is 64MB
|
|
10
|
+
FILESIZE_LIMIT_MB = 64
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Config:
|
|
14
|
+
# For when a datasource is over 64MB, break it into 5MB(standard chunk size) chunks
|
|
15
|
+
@property
|
|
16
|
+
def CHUNK_SIZE_MB(self):
|
|
17
|
+
return int(os.getenv("TSC_CHUNK_SIZE_MB", 5 * 10)) # 5MB felt too slow, upped it to 50
|
|
18
|
+
|
|
19
|
+
# Default page size
|
|
20
|
+
@property
|
|
21
|
+
def PAGE_SIZE(self):
|
|
22
|
+
return int(os.getenv("TSC_PAGE_SIZE", 100))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
config = Config()
|
{tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/__init__.py
RENAMED
|
@@ -14,6 +14,7 @@ from tableauserverclient.models.fileupload_item import FileuploadItem
|
|
|
14
14
|
from tableauserverclient.models.flow_item import FlowItem
|
|
15
15
|
from tableauserverclient.models.flow_run_item import FlowRunItem
|
|
16
16
|
from tableauserverclient.models.group_item import GroupItem
|
|
17
|
+
from tableauserverclient.models.groupset_item import GroupSetItem
|
|
17
18
|
from tableauserverclient.models.interval_item import (
|
|
18
19
|
IntervalItem,
|
|
19
20
|
DailyInterval,
|
|
@@ -22,6 +23,11 @@ from tableauserverclient.models.interval_item import (
|
|
|
22
23
|
HourlyInterval,
|
|
23
24
|
)
|
|
24
25
|
from tableauserverclient.models.job_item import JobItem, BackgroundJobItem
|
|
26
|
+
from tableauserverclient.models.linked_tasks_item import (
|
|
27
|
+
LinkedTaskItem,
|
|
28
|
+
LinkedTaskStepItem,
|
|
29
|
+
LinkedTaskFlowRunItem,
|
|
30
|
+
)
|
|
25
31
|
from tableauserverclient.models.metric_item import MetricItem
|
|
26
32
|
from tableauserverclient.models.pagination_item import PaginationItem
|
|
27
33
|
from tableauserverclient.models.permissions_item import PermissionsRule, Permission
|
|
@@ -39,6 +45,7 @@ from tableauserverclient.models.target import Target
|
|
|
39
45
|
from tableauserverclient.models.task_item import TaskItem
|
|
40
46
|
from tableauserverclient.models.user_item import UserItem
|
|
41
47
|
from tableauserverclient.models.view_item import ViewItem
|
|
48
|
+
from tableauserverclient.models.virtual_connection_item import VirtualConnectionItem
|
|
42
49
|
from tableauserverclient.models.webhook_item import WebhookItem
|
|
43
50
|
from tableauserverclient.models.workbook_item import WorkbookItem
|
|
44
51
|
|
|
@@ -60,6 +67,7 @@ __all__ = [
|
|
|
60
67
|
"FlowItem",
|
|
61
68
|
"FlowRunItem",
|
|
62
69
|
"GroupItem",
|
|
70
|
+
"GroupSetItem",
|
|
63
71
|
"IntervalItem",
|
|
64
72
|
"JobItem",
|
|
65
73
|
"DailyInterval",
|
|
@@ -89,6 +97,10 @@ __all__ = [
|
|
|
89
97
|
"TaskItem",
|
|
90
98
|
"UserItem",
|
|
91
99
|
"ViewItem",
|
|
100
|
+
"VirtualConnectionItem",
|
|
92
101
|
"WebhookItem",
|
|
93
102
|
"WorkbookItem",
|
|
103
|
+
"LinkedTaskItem",
|
|
104
|
+
"LinkedTaskStepItem",
|
|
105
|
+
"LinkedTaskFlowRunItem",
|
|
94
106
|
]
|
{tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/connection_item.py
RENAMED
|
@@ -66,12 +66,14 @@ class ConnectionItem(object):
|
|
|
66
66
|
for connection_xml in all_connection_xml:
|
|
67
67
|
connection_item = cls()
|
|
68
68
|
connection_item._id = connection_xml.get("id", None)
|
|
69
|
-
connection_item._connection_type = connection_xml.get("type", None)
|
|
69
|
+
connection_item._connection_type = connection_xml.get("type", connection_xml.get("dbClass", None))
|
|
70
70
|
connection_item.embed_password = string_to_bool(connection_xml.get("embedPassword", ""))
|
|
71
71
|
connection_item.server_address = connection_xml.get("serverAddress", None)
|
|
72
72
|
connection_item.server_port = connection_xml.get("serverPort", None)
|
|
73
73
|
connection_item.username = connection_xml.get("userName", None)
|
|
74
|
-
connection_item._query_tagging =
|
|
74
|
+
connection_item._query_tagging = (
|
|
75
|
+
string_to_bool(s) if (s := connection_xml.get("queryTagging", None)) else None
|
|
76
|
+
)
|
|
75
77
|
datasource_elem = connection_xml.find(".//t:datasource", namespaces=ns)
|
|
76
78
|
if datasource_elem is not None:
|
|
77
79
|
connection_item._datasource_id = datasource_elem.get("id", None)
|
{tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/database_item.py
RENAMED
|
@@ -44,6 +44,12 @@ class DatabaseItem(object):
|
|
|
44
44
|
|
|
45
45
|
self._tables = None # Not implemented yet
|
|
46
46
|
|
|
47
|
+
def __str__(self):
|
|
48
|
+
return "<Database {0} '{1}'>".format(self._id, self.name)
|
|
49
|
+
|
|
50
|
+
def __repr__(self):
|
|
51
|
+
return self.__str__() + " { " + ", ".join(" % s: % s" % item for item in vars(self).items()) + "}"
|
|
52
|
+
|
|
47
53
|
@property
|
|
48
54
|
def dqws(self):
|
|
49
55
|
if self._data_quality_warnings is None:
|
{tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/flow_item.py
RENAMED
|
@@ -6,12 +6,12 @@ from typing import List, Optional, Set
|
|
|
6
6
|
from defusedxml.ElementTree import fromstring
|
|
7
7
|
|
|
8
8
|
from tableauserverclient.datetime_helpers import parse_datetime
|
|
9
|
-
from .connection_item import ConnectionItem
|
|
10
|
-
from .dqw_item import DQWItem
|
|
11
|
-
from .exceptions import UnpopulatedPropertyError
|
|
12
|
-
from .permissions_item import Permission
|
|
13
|
-
from .property_decorators import property_not_nullable
|
|
14
|
-
from .tag_item import TagItem
|
|
9
|
+
from tableauserverclient.models.connection_item import ConnectionItem
|
|
10
|
+
from tableauserverclient.models.dqw_item import DQWItem
|
|
11
|
+
from tableauserverclient.models.exceptions import UnpopulatedPropertyError
|
|
12
|
+
from tableauserverclient.models.permissions_item import Permission
|
|
13
|
+
from tableauserverclient.models.property_decorators import property_not_nullable
|
|
14
|
+
from tableauserverclient.models.tag_item import TagItem
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class FlowItem(object):
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
from typing import Dict, List, Optional
|
|
2
|
+
import xml.etree.ElementTree as ET
|
|
3
|
+
|
|
4
|
+
from defusedxml.ElementTree import fromstring
|
|
5
|
+
|
|
6
|
+
from tableauserverclient.models.group_item import GroupItem
|
|
7
|
+
from tableauserverclient.models.reference_item import ResourceReference
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class GroupSetItem:
|
|
11
|
+
tag_name: str = "groupSet"
|
|
12
|
+
|
|
13
|
+
def __init__(self, name: Optional[str] = None) -> None:
|
|
14
|
+
self.name = name
|
|
15
|
+
self.id: Optional[str] = None
|
|
16
|
+
self.groups: List["GroupItem"] = []
|
|
17
|
+
self.group_count: int = 0
|
|
18
|
+
|
|
19
|
+
def __str__(self) -> str:
|
|
20
|
+
name = self.name
|
|
21
|
+
id = self.id
|
|
22
|
+
return f"<{self.__class__.__qualname__}({name=}, {id=})>"
|
|
23
|
+
|
|
24
|
+
def __repr__(self) -> str:
|
|
25
|
+
return self.__str__()
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
def from_response(cls, response: bytes, ns: Dict[str, str]) -> List["GroupSetItem"]:
|
|
29
|
+
parsed_response = fromstring(response)
|
|
30
|
+
all_groupset_xml = parsed_response.findall(".//t:groupSet", namespaces=ns)
|
|
31
|
+
return [cls.from_xml(xml, ns) for xml in all_groupset_xml]
|
|
32
|
+
|
|
33
|
+
@classmethod
|
|
34
|
+
def from_xml(cls, groupset_xml: ET.Element, ns: Dict[str, str]) -> "GroupSetItem":
|
|
35
|
+
def get_group(group_xml: ET.Element) -> GroupItem:
|
|
36
|
+
group_item = GroupItem()
|
|
37
|
+
group_item._id = group_xml.get("id")
|
|
38
|
+
group_item.name = group_xml.get("name")
|
|
39
|
+
return group_item
|
|
40
|
+
|
|
41
|
+
group_set_item = cls()
|
|
42
|
+
group_set_item.name = groupset_xml.get("name")
|
|
43
|
+
group_set_item.id = groupset_xml.get("id")
|
|
44
|
+
group_set_item.group_count = int(count) if (count := groupset_xml.get("groupCount")) else 0
|
|
45
|
+
group_set_item.groups = [
|
|
46
|
+
get_group(group_xml) for group_xml in groupset_xml.findall(".//t:group", namespaces=ns)
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
return group_set_item
|
|
50
|
+
|
|
51
|
+
@staticmethod
|
|
52
|
+
def as_reference(id_: str) -> ResourceReference:
|
|
53
|
+
return ResourceReference(id_, GroupSetItem.tag_name)
|
{tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/interval_item.py
RENAMED
|
@@ -246,21 +246,34 @@ class MonthlyInterval(object):
|
|
|
246
246
|
|
|
247
247
|
@interval.setter
|
|
248
248
|
def interval(self, interval_values):
|
|
249
|
-
#
|
|
250
|
-
#
|
|
251
|
-
#
|
|
252
|
-
#
|
|
253
|
-
|
|
249
|
+
# Valid monthly intervals strings can contain any of the following
|
|
250
|
+
# day numbers (1-31) (integer or string)
|
|
251
|
+
# relative day within the month (First, Second, ... Last)
|
|
252
|
+
# week days (Sunday, Monday, ... LastDay)
|
|
253
|
+
VALID_INTERVALS = [
|
|
254
|
+
"Sunday",
|
|
255
|
+
"Monday",
|
|
256
|
+
"Tuesday",
|
|
257
|
+
"Wednesday",
|
|
258
|
+
"Thursday",
|
|
259
|
+
"Friday",
|
|
260
|
+
"Saturday",
|
|
261
|
+
"LastDay",
|
|
262
|
+
"First",
|
|
263
|
+
"Second",
|
|
264
|
+
"Third",
|
|
265
|
+
"Fourth",
|
|
266
|
+
"Fifth",
|
|
267
|
+
"Last",
|
|
268
|
+
]
|
|
269
|
+
for value in range(1, 32):
|
|
270
|
+
VALID_INTERVALS.append(str(value))
|
|
271
|
+
VALID_INTERVALS.append(value)
|
|
272
|
+
|
|
254
273
|
for interval_value in interval_values:
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
try:
|
|
259
|
-
if not (1 <= int(interval_value) <= 31):
|
|
260
|
-
raise ValueError(error)
|
|
261
|
-
except ValueError:
|
|
262
|
-
if interval_value != "LastDay":
|
|
263
|
-
raise ValueError(error)
|
|
274
|
+
if interval_value not in VALID_INTERVALS:
|
|
275
|
+
error = f"Invalid monthly interval: {interval_value}"
|
|
276
|
+
raise ValueError(error)
|
|
264
277
|
|
|
265
278
|
self._interval = interval_values
|
|
266
279
|
|
{tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/job_item.py
RENAMED
|
@@ -4,7 +4,7 @@ from typing import List, Optional
|
|
|
4
4
|
from defusedxml.ElementTree import fromstring
|
|
5
5
|
|
|
6
6
|
from tableauserverclient.datetime_helpers import parse_datetime
|
|
7
|
-
from .flow_run_item import FlowRunItem
|
|
7
|
+
from tableauserverclient.models.flow_run_item import FlowRunItem
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class JobItem(object):
|
|
@@ -33,6 +33,8 @@ class JobItem(object):
|
|
|
33
33
|
datasource_id: Optional[str] = None,
|
|
34
34
|
flow_run: Optional[FlowRunItem] = None,
|
|
35
35
|
updated_at: Optional[datetime.datetime] = None,
|
|
36
|
+
workbook_name: Optional[str] = None,
|
|
37
|
+
datasource_name: Optional[str] = None,
|
|
36
38
|
):
|
|
37
39
|
self._id = id_
|
|
38
40
|
self._type = job_type
|
|
@@ -47,6 +49,8 @@ class JobItem(object):
|
|
|
47
49
|
self._datasource_id = datasource_id
|
|
48
50
|
self._flow_run = flow_run
|
|
49
51
|
self._updated_at = updated_at
|
|
52
|
+
self._workbook_name = workbook_name
|
|
53
|
+
self._datasource_name = datasource_name
|
|
50
54
|
|
|
51
55
|
@property
|
|
52
56
|
def id(self) -> str:
|
|
@@ -117,6 +121,14 @@ class JobItem(object):
|
|
|
117
121
|
def updated_at(self) -> Optional[datetime.datetime]:
|
|
118
122
|
return self._updated_at
|
|
119
123
|
|
|
124
|
+
@property
|
|
125
|
+
def workbook_name(self) -> Optional[str]:
|
|
126
|
+
return self._workbook_name
|
|
127
|
+
|
|
128
|
+
@property
|
|
129
|
+
def datasource_name(self) -> Optional[str]:
|
|
130
|
+
return self._datasource_name
|
|
131
|
+
|
|
120
132
|
def __str__(self):
|
|
121
133
|
return (
|
|
122
134
|
"<Job#{_id} {_type} created_at({_created_at}) started_at({_started_at}) updated_at({_updated_at}) completed_at({_completed_at})"
|
|
@@ -148,8 +160,10 @@ class JobItem(object):
|
|
|
148
160
|
mode = element.get("mode", None)
|
|
149
161
|
workbook = element.find(".//t:workbook[@id]", namespaces=ns)
|
|
150
162
|
workbook_id = workbook.get("id") if workbook is not None else None
|
|
163
|
+
workbook_name = workbook.get("name") if workbook is not None else None
|
|
151
164
|
datasource = element.find(".//t:datasource[@id]", namespaces=ns)
|
|
152
165
|
datasource_id = datasource.get("id") if datasource is not None else None
|
|
166
|
+
datasource_name = datasource.get("name") if datasource is not None else None
|
|
153
167
|
flow_run = None
|
|
154
168
|
updated_at = parse_datetime(element.get("updatedAt", None))
|
|
155
169
|
for flow_job in element.findall(".//t:runFlowJobType", namespaces=ns):
|
|
@@ -172,6 +186,8 @@ class JobItem(object):
|
|
|
172
186
|
datasource_id,
|
|
173
187
|
flow_run,
|
|
174
188
|
updated_at,
|
|
189
|
+
workbook_name,
|
|
190
|
+
datasource_name,
|
|
175
191
|
)
|
|
176
192
|
|
|
177
193
|
|
|
@@ -206,7 +222,7 @@ class BackgroundJobItem(object):
|
|
|
206
222
|
self._subtitle = subtitle
|
|
207
223
|
|
|
208
224
|
def __str__(self):
|
|
209
|
-
return f"<{self.__class__.
|
|
225
|
+
return f"<{self.__class__.__qualname__} {self._id} {self._type}>"
|
|
210
226
|
|
|
211
227
|
def __repr__(self):
|
|
212
228
|
return self.__str__() + " { " + ", ".join(" % s: % s" % item for item in vars(self).items()) + "}"
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import datetime as dt
|
|
2
|
+
from typing import List, Optional
|
|
3
|
+
|
|
4
|
+
from defusedxml.ElementTree import fromstring
|
|
5
|
+
|
|
6
|
+
from tableauserverclient.datetime_helpers import parse_datetime
|
|
7
|
+
from tableauserverclient.models.schedule_item import ScheduleItem
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class LinkedTaskItem:
|
|
11
|
+
def __init__(self) -> None:
|
|
12
|
+
self.id: Optional[str] = None
|
|
13
|
+
self.num_steps: Optional[int] = None
|
|
14
|
+
self.schedule: Optional[ScheduleItem] = None
|
|
15
|
+
|
|
16
|
+
@classmethod
|
|
17
|
+
def from_response(cls, resp: bytes, namespace) -> List["LinkedTaskItem"]:
|
|
18
|
+
parsed_response = fromstring(resp)
|
|
19
|
+
return [
|
|
20
|
+
cls._parse_element(x, namespace)
|
|
21
|
+
for x in parsed_response.findall(".//t:linkedTasks[@id]", namespaces=namespace)
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
@classmethod
|
|
25
|
+
def _parse_element(cls, xml, namespace) -> "LinkedTaskItem":
|
|
26
|
+
task = cls()
|
|
27
|
+
task.id = xml.get("id")
|
|
28
|
+
task.num_steps = int(xml.get("numSteps"))
|
|
29
|
+
task.schedule = ScheduleItem.from_element(xml, namespace)[0]
|
|
30
|
+
return task
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class LinkedTaskStepItem:
|
|
34
|
+
def __init__(self) -> None:
|
|
35
|
+
self.id: Optional[str] = None
|
|
36
|
+
self.step_number: Optional[int] = None
|
|
37
|
+
self.stop_downstream_on_failure: Optional[bool] = None
|
|
38
|
+
self.task_details: List[LinkedTaskFlowRunItem] = []
|
|
39
|
+
|
|
40
|
+
@classmethod
|
|
41
|
+
def from_task_xml(cls, xml, namespace) -> List["LinkedTaskStepItem"]:
|
|
42
|
+
return [cls._parse_element(x, namespace) for x in xml.findall(".//t:linkedTaskSteps[@id]", namespace)]
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
def _parse_element(cls, xml, namespace) -> "LinkedTaskStepItem":
|
|
46
|
+
step = cls()
|
|
47
|
+
step.id = xml.get("id")
|
|
48
|
+
step.step_number = int(xml.get("stepNumber"))
|
|
49
|
+
step.stop_downstream_on_failure = string_to_bool(xml.get("stopDownstreamTasksOnFailure"))
|
|
50
|
+
step.task_details = LinkedTaskFlowRunItem._parse_element(xml, namespace)
|
|
51
|
+
return step
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class LinkedTaskFlowRunItem:
|
|
55
|
+
def __init__(self) -> None:
|
|
56
|
+
self.flow_run_id: Optional[str] = None
|
|
57
|
+
self.flow_run_priority: Optional[int] = None
|
|
58
|
+
self.flow_run_consecutive_failed_count: Optional[int] = None
|
|
59
|
+
self.flow_run_task_type: Optional[str] = None
|
|
60
|
+
self.flow_id: Optional[str] = None
|
|
61
|
+
self.flow_name: Optional[str] = None
|
|
62
|
+
|
|
63
|
+
@classmethod
|
|
64
|
+
def _parse_element(cls, xml, namespace) -> List["LinkedTaskFlowRunItem"]:
|
|
65
|
+
all_tasks = []
|
|
66
|
+
for flow_run in xml.findall(".//t:flowRun[@id]", namespace):
|
|
67
|
+
task = cls()
|
|
68
|
+
task.flow_run_id = flow_run.get("id")
|
|
69
|
+
task.flow_run_priority = int(flow_run.get("priority"))
|
|
70
|
+
task.flow_run_consecutive_failed_count = int(flow_run.get("consecutiveFailedCount"))
|
|
71
|
+
task.flow_run_task_type = flow_run.get("type")
|
|
72
|
+
flow = flow_run.find(".//t:flow[@id]", namespace)
|
|
73
|
+
task.flow_id = flow.get("id")
|
|
74
|
+
task.flow_name = flow.get("name")
|
|
75
|
+
all_tasks.append(task)
|
|
76
|
+
|
|
77
|
+
return all_tasks
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class LinkedTaskJobItem:
|
|
81
|
+
def __init__(self) -> None:
|
|
82
|
+
self.id: Optional[str] = None
|
|
83
|
+
self.linked_task_id: Optional[str] = None
|
|
84
|
+
self.status: Optional[str] = None
|
|
85
|
+
self.created_at: Optional[dt.datetime] = None
|
|
86
|
+
|
|
87
|
+
@classmethod
|
|
88
|
+
def from_response(cls, resp: bytes, namespace) -> "LinkedTaskJobItem":
|
|
89
|
+
parsed_response = fromstring(resp)
|
|
90
|
+
job = cls()
|
|
91
|
+
job_xml = parsed_response.find(".//t:linkedTaskJob[@id]", namespaces=namespace)
|
|
92
|
+
if job_xml is None:
|
|
93
|
+
raise ValueError("No linked task job found in response")
|
|
94
|
+
job.id = job_xml.get("id")
|
|
95
|
+
job.linked_task_id = job_xml.get("linkedTaskId")
|
|
96
|
+
job.status = job_xml.get("status")
|
|
97
|
+
job.created_at = parse_datetime(job_xml.get("createdAt"))
|
|
98
|
+
return job
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def string_to_bool(s: str) -> bool:
|
|
102
|
+
return s.lower() == "true"
|
{tableauserverclient-0.32 → tableauserverclient-0.33}/tableauserverclient/models/permissions_item.py
RENAMED
|
@@ -3,10 +3,11 @@ from typing import Dict, List, Optional
|
|
|
3
3
|
|
|
4
4
|
from defusedxml.ElementTree import fromstring
|
|
5
5
|
|
|
6
|
-
from .exceptions import UnknownGranteeTypeError, UnpopulatedPropertyError
|
|
7
|
-
from .group_item import GroupItem
|
|
8
|
-
from .
|
|
9
|
-
from .
|
|
6
|
+
from tableauserverclient.models.exceptions import UnknownGranteeTypeError, UnpopulatedPropertyError
|
|
7
|
+
from tableauserverclient.models.group_item import GroupItem
|
|
8
|
+
from tableauserverclient.models.groupset_item import GroupSetItem
|
|
9
|
+
from tableauserverclient.models.reference_item import ResourceReference
|
|
10
|
+
from tableauserverclient.models.user_item import UserItem
|
|
10
11
|
|
|
11
12
|
from tableauserverclient.helpers.logging import logger
|
|
12
13
|
|
|
@@ -142,6 +143,8 @@ class PermissionsRule:
|
|
|
142
143
|
grantee = UserItem.as_reference(grantee_id)
|
|
143
144
|
elif grantee_type == "group":
|
|
144
145
|
grantee = GroupItem.as_reference(grantee_id)
|
|
146
|
+
elif grantee_type == "groupSet":
|
|
147
|
+
grantee = GroupSetItem.as_reference(grantee_id)
|
|
145
148
|
else:
|
|
146
149
|
raise UnknownGranteeTypeError("No support for grantee type of {}".format(grantee_type))
|
|
147
150
|
|