tableauserverclient 0.30__tar.gz → 0.30.post0.dev1__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.30 → tableauserverclient-0.30.post0.dev1}/PKG-INFO +2 -1
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/pyproject.toml +1 -0
- tableauserverclient-0.30.post0.dev1/samples/update_workbook_data_acceleration.py +109 -0
- tableauserverclient-0.30.post0.dev1/samples/update_workbook_data_freshness_policy.py +218 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/__init__.py +1 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/_version.py +3 -3
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/__init__.py +1 -0
- tableauserverclient-0.30.post0.dev1/tableauserverclient/models/data_freshness_policy_item.py +210 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/interval_item.py +1 -1
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/property_decorators.py +6 -11
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/schedule_item.py +1 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/task_item.py +1 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/view_item.py +34 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/workbook_item.py +34 -4
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/__init__.py +1 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/datasources_endpoint.py +5 -3
- tableauserverclient-0.30.post0.dev1/tableauserverclient/server/endpoint/flow_task_endpoint.py +29 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/flows_endpoint.py +5 -3
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/workbooks_endpoint.py +14 -4
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/pager.py +5 -1
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/request_factory.py +92 -4
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/request_options.py +47 -3
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/server.py +2 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient.egg-info/PKG-INFO +2 -1
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient.egg-info/SOURCES.txt +18 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient.egg-info/requires.txt +1 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_get.xml +1 -0
- tableauserverclient-0.30.post0.dev1/test/assets/tasks_create_flow_task.xml +28 -0
- tableauserverclient-0.30.post0.dev1/test/assets/tasks_with_interval.xml +20 -0
- tableauserverclient-0.30.post0.dev1/test/assets/workbook_get_by_id_acceleration_status.xml +19 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_publish.xml +2 -2
- tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_acceleration_status.xml +16 -0
- tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_data_freshness_policy.xml +9 -0
- tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_data_freshness_policy2.xml +9 -0
- tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_data_freshness_policy3.xml +11 -0
- tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_data_freshness_policy4.xml +12 -0
- tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_data_freshness_policy5.xml +16 -0
- tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_data_freshness_policy6.xml +15 -0
- tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_views_acceleration_status.xml +19 -0
- tableauserverclient-0.30.post0.dev1/test/test_data_freshness_policy.py +189 -0
- tableauserverclient-0.30.post0.dev1/test/test_flowtask.py +47 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_request_option.py +20 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_schedule.py +10 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_task.py +10 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_view.py +29 -0
- tableauserverclient-0.30.post0.dev1/test/test_view_acceleration.py +119 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_workbook.py +3 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/CHANGELOG.md +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/CONTRIBUTORS.md +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/LICENSE +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/LICENSE.versioneer +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/MANIFEST.in +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/README.md +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/contributing.md +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/docs/README.md +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/add_default_permission.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/create_extract_task.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/create_group.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/create_project.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/create_schedules.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/explore_datasource.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/explore_favorites.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/explore_site.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/explore_webhooks.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/explore_workbook.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/export.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/extracts.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/filter_sort_groups.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/filter_sort_projects.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/getting_started/1_hello_server.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/getting_started/2_hello_site.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/getting_started/3_hello_universe.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/initialize_server.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/kill_all_jobs.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/list.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/login.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/metadata_query.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/move_workbook_projects.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/move_workbook_sites.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/name.txt +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/pagination_sample.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/publish_datasource.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/publish_workbook.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/query_permissions.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/refresh.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/refresh_tasks.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/set_refresh_schedule.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/smoke_test.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/update_connection.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/update_datasource_data.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/setup.cfg +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/setup.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/config.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/datetime_helpers.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/exponential_backoff.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/filesys_helpers.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/helpers/__init__.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/helpers/headers.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/helpers/logging.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/helpers/strings.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/column_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/connection_credentials.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/connection_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/custom_view_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/data_acceleration_report_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/data_alert_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/database_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/datasource_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/dqw_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/exceptions.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/favorites_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/fileupload_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/flow_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/flow_run_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/group_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/job_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/metric_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/pagination_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/permissions_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/project_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/reference_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/revision_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/server_info_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/site_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/subscription_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/table_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/tableau_auth.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/tableau_types.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/tag_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/target.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/user_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/webhook_item.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/namespace.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/py.typed +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/__init__.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/auth_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/custom_views_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/data_acceleration_report_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/data_alert_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/databases_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/default_permissions_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/dqw_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/exceptions.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/favorites_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/fileuploads_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/flow_runs_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/groups_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/jobs_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/metadata_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/metrics_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/permissions_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/projects_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/resource_tagger.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/schedules_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/server_info_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/sites_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/subscriptions_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/tables_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/tasks_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/users_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/views_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/webhooks_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/exceptions.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/filter.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/query.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/sort.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient.egg-info/dependency_links.txt +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient.egg-info/top_level.txt +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/__init__.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/_utils.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/Data/Tableau Samples/World Indicators.tde +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/Data/user_details.csv +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/Data/usernames.csv +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/RESTAPISample Image.png +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/Sample View Image.png +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/World Indicators.hyper +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/auth_sign_in.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/auth_sign_in_error.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/auth_sign_in_impersonate.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/custom_view_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/custom_view_get_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/custom_view_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/data_acceleration_report.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/data_alerts_add_user.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/data_alerts_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/data_alerts_get_by_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/data_alerts_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/database_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/database_populate_permissions.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/database_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_add_tags.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_connection_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_data_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_get_by_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_get_empty.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_populate_connections.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_populate_permissions.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_publish.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_publish_async.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_refresh.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_revision.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/dqw_by_content_type.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/favorites_add_datasource.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/favorites_add_project.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/favorites_add_view.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/favorites_add_workbook.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/favorites_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/fileupload_append.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/fileupload_initialize.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_get_by_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_populate_connections.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_populate_permissions.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_publish.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_refresh.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_runs_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_runs_get_by_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_runs_get_by_id_failed.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_runs_get_by_id_inprogress.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_add_user.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_create.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_create_ad.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_create_async.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_populate_users.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_populate_users_empty.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_update_async.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_users_added.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/job_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/job_get_by_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/job_get_by_id_failed.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/job_get_by_id_failed_workbook.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/job_get_by_id_inprogress.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metadata_paged_1.json +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metadata_paged_2.json +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metadata_paged_3.json +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metadata_query_error.json +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metadata_query_expected_dict.dict +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metadata_query_success.json +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metrics_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metrics_get_by_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metrics_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/populate_csv.csv +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/populate_pdf.pdf +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/project_content_permission.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/project_create.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/project_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/project_populate_permissions.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/project_populate_workbook_default_permissions.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/project_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/project_update_datasource_default_permissions.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/queryset_slicing_page_1.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/queryset_slicing_page_2.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/request_option_filter_equals.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/request_option_filter_name_in.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/request_option_filter_tags_in.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/request_option_page_number.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/request_option_page_size.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/request_option_pagination.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/request_option_slicing_queryset.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_add_datasource.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_add_flow.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_add_workbook.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_add_workbook_with_warnings.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_create_daily.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_create_hourly.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_create_monthly.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_create_weekly.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_get_by_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_get_daily_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_get_empty.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_get_hourly_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_get_monthly_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/server_info_25.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/server_info_404.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/server_info_auth_info.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/server_info_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/site_create.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/site_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/site_get_by_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/site_get_by_name.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/site_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/subscription_create.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/subscription_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/subscription_get_by_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/table_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/table_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_create_extract_task.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_no_workbook_or_datasource.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_run_now_response.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_with_dataacceleration_task.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_with_datasource.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_with_workbook.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_with_workbook_and_datasource.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_without_schedule.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_add.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_add_favorite.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_get_by_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_get_empty.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_populate_groups.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_populate_workbooks.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/view_add_tags.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/view_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/view_get_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/view_get_usage.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/view_populate_permissions.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/view_update_permissions.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/webhook_create.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/webhook_create_request.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/webhook_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_add_tags.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get_by_id.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get_by_id_personal.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get_empty.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get_invalid_date.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get_page_1.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get_page_2.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get_page_3.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_populate_connections.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_populate_permissions.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_populate_views.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_populate_views_usage.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_publish_async.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_refresh.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_revision.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_update.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_update_permissions.xml +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/http/test_http_requests.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/models/_models.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/models/test_repr.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/request_factory/__init__.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/request_factory/test_datasource_requests.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/request_factory/test_workbook_requests.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_auth.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_connection_.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_custom_view.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_data_acceleration_report.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_dataalert.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_database.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_datasource.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_datasource_model.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_dqw.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_endpoint.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_exponential_backoff.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_favorites.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_filesys_helpers.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_fileuploads.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_filter.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_flow.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_flowruns.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_group.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_group_model.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_job.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_metadata.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_metrics.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_pager.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_project.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_project_model.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_regression_tests.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_requests.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_server_info.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_site.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_site_model.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_sort.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_subscription.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_table.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_tableauauth_model.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_user.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_user_model.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_webhook.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_workbook_model.py +0 -0
- {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/versioneer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: tableauserverclient
|
|
3
|
-
Version: 0.30
|
|
3
|
+
Version: 0.30.post0.dev1
|
|
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)
|
|
@@ -41,6 +41,7 @@ Requires-Dist: defusedxml>=0.7.1
|
|
|
41
41
|
Requires-Dist: packaging>=23.1
|
|
42
42
|
Requires-Dist: requests>=2.31
|
|
43
43
|
Requires-Dist: urllib3==2.0.7
|
|
44
|
+
Requires-Dist: typing_extensions>=4.0.1
|
|
44
45
|
Provides-Extra: test
|
|
45
46
|
Requires-Dist: argparse; extra == "test"
|
|
46
47
|
Requires-Dist: black==23.7; extra == "test"
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
####
|
|
2
|
+
# This script demonstrates how to update workbook data acceleration 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
|
+
|
|
12
|
+
import tableauserverclient as TSC
|
|
13
|
+
from tableauserverclient import IntervalItem
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def main():
|
|
17
|
+
parser = argparse.ArgumentParser(description="Creates sample schedules for each type of frequency.")
|
|
18
|
+
# Common options; please keep those in sync across all samples
|
|
19
|
+
parser.add_argument("--server", "-s", help="server address")
|
|
20
|
+
parser.add_argument("--site", "-S", help="site name")
|
|
21
|
+
parser.add_argument("--token-name", "-p", help="name of the personal access token used to sign into the server")
|
|
22
|
+
parser.add_argument("--token-value", "-v", help="value of the personal access token used to sign into the server")
|
|
23
|
+
parser.add_argument(
|
|
24
|
+
"--logging-level",
|
|
25
|
+
"-l",
|
|
26
|
+
choices=["debug", "info", "error"],
|
|
27
|
+
default="error",
|
|
28
|
+
help="desired logging level (set to error by default)",
|
|
29
|
+
)
|
|
30
|
+
# Options specific to this sample:
|
|
31
|
+
# This sample has no additional options, yet. If you add some, please add them here
|
|
32
|
+
|
|
33
|
+
args = parser.parse_args()
|
|
34
|
+
|
|
35
|
+
# Set logging level based on user input, or error by default
|
|
36
|
+
logging_level = getattr(logging, args.logging_level.upper())
|
|
37
|
+
logging.basicConfig(level=logging_level)
|
|
38
|
+
|
|
39
|
+
tableau_auth = TSC.PersonalAccessTokenAuth(args.token_name, args.token_value, site_id=args.site)
|
|
40
|
+
server = TSC.Server(args.server, use_server_version=False)
|
|
41
|
+
server.add_http_options({"verify": False})
|
|
42
|
+
server.use_server_version()
|
|
43
|
+
with server.auth.sign_in(tableau_auth):
|
|
44
|
+
# Get workbook
|
|
45
|
+
all_workbooks, pagination_item = server.workbooks.get()
|
|
46
|
+
print("\nThere are {} workbooks on site: ".format(pagination_item.total_available))
|
|
47
|
+
print([workbook.name for workbook in all_workbooks])
|
|
48
|
+
|
|
49
|
+
if all_workbooks:
|
|
50
|
+
# Pick 1 workbook to try data acceleration.
|
|
51
|
+
# Note that data acceleration has a couple of requirements, please check the Tableau help page
|
|
52
|
+
# to verify your workbook/view is eligible for data acceleration.
|
|
53
|
+
|
|
54
|
+
# Assuming 1st workbook is eligible for sample purposes
|
|
55
|
+
sample_workbook = all_workbooks[2]
|
|
56
|
+
|
|
57
|
+
# Enable acceleration for all the views in the workbook
|
|
58
|
+
enable_config = dict()
|
|
59
|
+
enable_config["acceleration_enabled"] = True
|
|
60
|
+
enable_config["accelerate_now"] = True
|
|
61
|
+
|
|
62
|
+
sample_workbook.data_acceleration_config = enable_config
|
|
63
|
+
updated: TSC.WorkbookItem = server.workbooks.update(sample_workbook)
|
|
64
|
+
# Since we did not set any specific view, we will enable all views in the workbook
|
|
65
|
+
print("Enable acceleration for all the views in the workbook " + updated.name + ".")
|
|
66
|
+
|
|
67
|
+
# Disable acceleration on one of the view in the workbook
|
|
68
|
+
# You have to populate_views first, then set the views of the workbook
|
|
69
|
+
# to the ones you want to update.
|
|
70
|
+
server.workbooks.populate_views(sample_workbook)
|
|
71
|
+
view_to_disable = sample_workbook.views[0]
|
|
72
|
+
sample_workbook.views = [view_to_disable]
|
|
73
|
+
|
|
74
|
+
disable_config = dict()
|
|
75
|
+
disable_config["acceleration_enabled"] = False
|
|
76
|
+
disable_config["accelerate_now"] = True
|
|
77
|
+
|
|
78
|
+
sample_workbook.data_acceleration_config = disable_config
|
|
79
|
+
# To get the acceleration status on the response, set includeViewAccelerationStatus=true
|
|
80
|
+
# Note that you have to populate_views first to get the acceleration status, since
|
|
81
|
+
# acceleration status is per view basis (not per workbook)
|
|
82
|
+
updated: TSC.WorkbookItem = server.workbooks.update(sample_workbook, True)
|
|
83
|
+
view1 = updated.views[0]
|
|
84
|
+
print('Disabled acceleration for 1 view "' + view1.name + '" in the workbook ' + updated.name + ".")
|
|
85
|
+
|
|
86
|
+
# Get acceleration status of the views in workbook using workbooks.get_by_id
|
|
87
|
+
# This won't need to do populate_views beforehand
|
|
88
|
+
my_workbook = server.workbooks.get_by_id(sample_workbook.id)
|
|
89
|
+
view1 = my_workbook.views[0]
|
|
90
|
+
view2 = my_workbook.views[1]
|
|
91
|
+
print(
|
|
92
|
+
"Fetching acceleration status for views in the workbook "
|
|
93
|
+
+ updated.name
|
|
94
|
+
+ ".\n"
|
|
95
|
+
+ 'View "'
|
|
96
|
+
+ view1.name
|
|
97
|
+
+ '" has acceleration_status = '
|
|
98
|
+
+ view1.data_acceleration_config["acceleration_status"]
|
|
99
|
+
+ ".\n"
|
|
100
|
+
+ 'View "'
|
|
101
|
+
+ view2.name
|
|
102
|
+
+ '" has acceleration_status = '
|
|
103
|
+
+ view2.data_acceleration_config["acceleration_status"]
|
|
104
|
+
+ "."
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
if __name__ == "__main__":
|
|
109
|
+
main()
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
####
|
|
2
|
+
# This script demonstrates how to update workbook data freshness policy 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
|
+
|
|
12
|
+
import tableauserverclient as TSC
|
|
13
|
+
from tableauserverclient import IntervalItem
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def main():
|
|
17
|
+
parser = argparse.ArgumentParser(description="Creates sample schedules for each type of frequency.")
|
|
18
|
+
# Common options; please keep those in sync across all samples
|
|
19
|
+
parser.add_argument("--server", "-s", help="server address")
|
|
20
|
+
parser.add_argument("--site", "-S", help="site name")
|
|
21
|
+
parser.add_argument("--token-name", "-p", help="name of the personal access token " "used to sign into the server")
|
|
22
|
+
parser.add_argument(
|
|
23
|
+
"--token-value", "-v", help="value of the personal access token " "used to sign into the server"
|
|
24
|
+
)
|
|
25
|
+
parser.add_argument(
|
|
26
|
+
"--logging-level",
|
|
27
|
+
"-l",
|
|
28
|
+
choices=["debug", "info", "error"],
|
|
29
|
+
default="error",
|
|
30
|
+
help="desired logging level (set to error by default)",
|
|
31
|
+
)
|
|
32
|
+
# Options specific to this sample:
|
|
33
|
+
# This sample has no additional options, yet. If you add some, please add them here
|
|
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
|
+
tableau_auth = TSC.PersonalAccessTokenAuth(args.token_name, args.token_value, site_id=args.site)
|
|
42
|
+
server = TSC.Server(args.server, use_server_version=False)
|
|
43
|
+
server.add_http_options({"verify": False})
|
|
44
|
+
server.use_server_version()
|
|
45
|
+
with server.auth.sign_in(tableau_auth):
|
|
46
|
+
# Get workbook
|
|
47
|
+
all_workbooks, pagination_item = server.workbooks.get()
|
|
48
|
+
print("\nThere are {} workbooks on site: ".format(pagination_item.total_available))
|
|
49
|
+
print([workbook.name for workbook in all_workbooks])
|
|
50
|
+
|
|
51
|
+
if all_workbooks:
|
|
52
|
+
# Pick 1 workbook that has live datasource connection.
|
|
53
|
+
# Assuming 1st workbook met the criteria for sample purposes
|
|
54
|
+
# Data Freshness Policy is not available on extract & file-based datasource.
|
|
55
|
+
sample_workbook = all_workbooks[2]
|
|
56
|
+
|
|
57
|
+
# Get more info from the workbook selected
|
|
58
|
+
# Troubleshoot: if sample_workbook_extended.data_freshness_policy.option returns with AttributeError
|
|
59
|
+
# it could mean the workbook selected does not have live connection, which means it doesn't have
|
|
60
|
+
# data freshness policy. Change to another workbook with live datasource connection.
|
|
61
|
+
sample_workbook_extended = server.workbooks.get_by_id(sample_workbook.id)
|
|
62
|
+
try:
|
|
63
|
+
print(
|
|
64
|
+
"Workbook "
|
|
65
|
+
+ sample_workbook.name
|
|
66
|
+
+ " has data freshness policy option set to: "
|
|
67
|
+
+ sample_workbook_extended.data_freshness_policy.option
|
|
68
|
+
)
|
|
69
|
+
except AttributeError as e:
|
|
70
|
+
print(
|
|
71
|
+
"Workbook does not have data freshness policy, possibly due to the workbook selected "
|
|
72
|
+
"does not have live connection. Change to another workbook using live datasource connection."
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
# Update Workbook Data Freshness Policy to "AlwaysLive"
|
|
76
|
+
sample_workbook.data_freshness_policy = TSC.DataFreshnessPolicyItem(
|
|
77
|
+
TSC.DataFreshnessPolicyItem.Option.AlwaysLive
|
|
78
|
+
)
|
|
79
|
+
updated: TSC.WorkbookItem = server.workbooks.update(sample_workbook)
|
|
80
|
+
print(
|
|
81
|
+
"Workbook "
|
|
82
|
+
+ updated.name
|
|
83
|
+
+ " updated data freshness policy option to: "
|
|
84
|
+
+ updated.data_freshness_policy.option
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
# Update Workbook Data Freshness Policy to "SiteDefault"
|
|
88
|
+
sample_workbook.data_freshness_policy = TSC.DataFreshnessPolicyItem(
|
|
89
|
+
TSC.DataFreshnessPolicyItem.Option.SiteDefault
|
|
90
|
+
)
|
|
91
|
+
updated: TSC.WorkbookItem = server.workbooks.update(sample_workbook)
|
|
92
|
+
print(
|
|
93
|
+
"Workbook "
|
|
94
|
+
+ updated.name
|
|
95
|
+
+ " updated data freshness policy option to: "
|
|
96
|
+
+ updated.data_freshness_policy.option
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
# Update Workbook Data Freshness Policy to "FreshEvery" schedule.
|
|
100
|
+
# Set the schedule to be fresh every 10 hours
|
|
101
|
+
# Once the data_freshness_policy is already populated (e.g. due to previous calls),
|
|
102
|
+
# it is possible to directly change the option & other parameters directly like below
|
|
103
|
+
sample_workbook.data_freshness_policy.option = TSC.DataFreshnessPolicyItem.Option.FreshEvery
|
|
104
|
+
fresh_every_ten_hours = TSC.DataFreshnessPolicyItem.FreshEvery(
|
|
105
|
+
TSC.DataFreshnessPolicyItem.FreshEvery.Frequency.Hours, 10
|
|
106
|
+
)
|
|
107
|
+
sample_workbook.data_freshness_policy.fresh_every_schedule = fresh_every_ten_hours
|
|
108
|
+
updated: TSC.WorkbookItem = server.workbooks.update(sample_workbook)
|
|
109
|
+
print(
|
|
110
|
+
"Workbook "
|
|
111
|
+
+ updated.name
|
|
112
|
+
+ " updated data freshness policy option to: "
|
|
113
|
+
+ updated.data_freshness_policy.option
|
|
114
|
+
+ " with frequency of "
|
|
115
|
+
+ str(updated.data_freshness_policy.fresh_every_schedule.value)
|
|
116
|
+
+ " "
|
|
117
|
+
+ updated.data_freshness_policy.fresh_every_schedule.frequency
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
# Update Workbook Data Freshness Policy to "FreshAt" schedule.
|
|
121
|
+
# Set the schedule to be fresh at 10AM every day
|
|
122
|
+
sample_workbook.data_freshness_policy.option = TSC.DataFreshnessPolicyItem.Option.FreshAt
|
|
123
|
+
fresh_at_ten_daily = TSC.DataFreshnessPolicyItem.FreshAt(
|
|
124
|
+
TSC.DataFreshnessPolicyItem.FreshAt.Frequency.Day, "10:00:00", "America/Los_Angeles"
|
|
125
|
+
)
|
|
126
|
+
sample_workbook.data_freshness_policy.fresh_at_schedule = fresh_at_ten_daily
|
|
127
|
+
updated: TSC.WorkbookItem = server.workbooks.update(sample_workbook)
|
|
128
|
+
print(
|
|
129
|
+
"Workbook "
|
|
130
|
+
+ updated.name
|
|
131
|
+
+ " updated data freshness policy option to: "
|
|
132
|
+
+ updated.data_freshness_policy.option
|
|
133
|
+
+ " with frequency of "
|
|
134
|
+
+ str(updated.data_freshness_policy.fresh_at_schedule.time)
|
|
135
|
+
+ " every "
|
|
136
|
+
+ updated.data_freshness_policy.fresh_at_schedule.frequency
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
# Set the schedule to be fresh at 6PM every week on Wednesday and Sunday
|
|
140
|
+
sample_workbook.data_freshness_policy = TSC.DataFreshnessPolicyItem(
|
|
141
|
+
TSC.DataFreshnessPolicyItem.Option.FreshAt
|
|
142
|
+
)
|
|
143
|
+
fresh_at_6pm_wed_sun = TSC.DataFreshnessPolicyItem.FreshAt(
|
|
144
|
+
TSC.DataFreshnessPolicyItem.FreshAt.Frequency.Week,
|
|
145
|
+
"18:00:00",
|
|
146
|
+
"America/Los_Angeles",
|
|
147
|
+
[IntervalItem.Day.Wednesday, "Sunday"],
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
sample_workbook.data_freshness_policy.fresh_at_schedule = fresh_at_6pm_wed_sun
|
|
151
|
+
updated: TSC.WorkbookItem = server.workbooks.update(sample_workbook)
|
|
152
|
+
new_fresh_at_schedule = updated.data_freshness_policy.fresh_at_schedule
|
|
153
|
+
print(
|
|
154
|
+
"Workbook "
|
|
155
|
+
+ updated.name
|
|
156
|
+
+ " updated data freshness policy option to: "
|
|
157
|
+
+ updated.data_freshness_policy.option
|
|
158
|
+
+ " with frequency of "
|
|
159
|
+
+ str(new_fresh_at_schedule.time)
|
|
160
|
+
+ " every "
|
|
161
|
+
+ new_fresh_at_schedule.frequency
|
|
162
|
+
+ " on "
|
|
163
|
+
+ new_fresh_at_schedule.interval_item[0]
|
|
164
|
+
+ ","
|
|
165
|
+
+ new_fresh_at_schedule.interval_item[1]
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
# Set the schedule to be fresh at 12AM every last day of the month
|
|
169
|
+
sample_workbook.data_freshness_policy = TSC.DataFreshnessPolicyItem(
|
|
170
|
+
TSC.DataFreshnessPolicyItem.Option.FreshAt
|
|
171
|
+
)
|
|
172
|
+
fresh_at_last_day_of_month = TSC.DataFreshnessPolicyItem.FreshAt(
|
|
173
|
+
TSC.DataFreshnessPolicyItem.FreshAt.Frequency.Month, "00:00:00", "America/Los_Angeles", ["LastDay"]
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
sample_workbook.data_freshness_policy.fresh_at_schedule = fresh_at_last_day_of_month
|
|
177
|
+
updated: TSC.WorkbookItem = server.workbooks.update(sample_workbook)
|
|
178
|
+
new_fresh_at_schedule = updated.data_freshness_policy.fresh_at_schedule
|
|
179
|
+
print(
|
|
180
|
+
"Workbook "
|
|
181
|
+
+ updated.name
|
|
182
|
+
+ " updated data freshness policy option to: "
|
|
183
|
+
+ updated.data_freshness_policy.option
|
|
184
|
+
+ " with frequency of "
|
|
185
|
+
+ str(new_fresh_at_schedule.time)
|
|
186
|
+
+ " every "
|
|
187
|
+
+ new_fresh_at_schedule.frequency
|
|
188
|
+
+ " on "
|
|
189
|
+
+ new_fresh_at_schedule.interval_item[0]
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
# Set the schedule to be fresh at 8PM every 1st,13th,20th day of the month
|
|
193
|
+
fresh_at_dates_of_month = TSC.DataFreshnessPolicyItem.FreshAt(
|
|
194
|
+
TSC.DataFreshnessPolicyItem.FreshAt.Frequency.Month,
|
|
195
|
+
"00:00:00",
|
|
196
|
+
"America/Los_Angeles",
|
|
197
|
+
["1", "13", "20"],
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
sample_workbook.data_freshness_policy.fresh_at_schedule = fresh_at_dates_of_month
|
|
201
|
+
updated: TSC.WorkbookItem = server.workbooks.update(sample_workbook)
|
|
202
|
+
new_fresh_at_schedule = updated.data_freshness_policy.fresh_at_schedule
|
|
203
|
+
print(
|
|
204
|
+
"Workbook "
|
|
205
|
+
+ updated.name
|
|
206
|
+
+ " updated data freshness policy option to: "
|
|
207
|
+
+ updated.data_freshness_policy.option
|
|
208
|
+
+ " with frequency of "
|
|
209
|
+
+ str(new_fresh_at_schedule.time)
|
|
210
|
+
+ " every "
|
|
211
|
+
+ new_fresh_at_schedule.frequency
|
|
212
|
+
+ " on "
|
|
213
|
+
+ str(new_fresh_at_schedule.interval_item)
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
if __name__ == "__main__":
|
|
218
|
+
main()
|
{tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/_version.py
RENAMED
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2024-
|
|
11
|
+
"date": "2024-06-03T12:52:39-0700",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "0.30"
|
|
14
|
+
"full-revisionid": "4018a0ffc01bfa7c5b0024c6f112ced158d420b9",
|
|
15
|
+
"version": "0.30.post0.dev1"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -5,6 +5,7 @@ from .custom_view_item import CustomViewItem
|
|
|
5
5
|
from .data_acceleration_report_item import DataAccelerationReportItem
|
|
6
6
|
from .data_alert_item import DataAlertItem
|
|
7
7
|
from .database_item import DatabaseItem
|
|
8
|
+
from .data_freshness_policy_item import DataFreshnessPolicyItem
|
|
8
9
|
from .datasource_item import DatasourceItem
|
|
9
10
|
from .dqw_item import DQWItem
|
|
10
11
|
from .exceptions import UnpopulatedPropertyError
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import xml.etree.ElementTree as ET
|
|
2
|
+
|
|
3
|
+
from typing import Optional, Union, List
|
|
4
|
+
from tableauserverclient.models.property_decorators import property_is_enum, property_not_nullable
|
|
5
|
+
from .interval_item import IntervalItem
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class DataFreshnessPolicyItem:
|
|
9
|
+
class Option:
|
|
10
|
+
AlwaysLive = "AlwaysLive"
|
|
11
|
+
SiteDefault = "SiteDefault"
|
|
12
|
+
FreshEvery = "FreshEvery"
|
|
13
|
+
FreshAt = "FreshAt"
|
|
14
|
+
|
|
15
|
+
class FreshEvery:
|
|
16
|
+
class Frequency:
|
|
17
|
+
Minutes = "Minutes"
|
|
18
|
+
Hours = "Hours"
|
|
19
|
+
Days = "Days"
|
|
20
|
+
Weeks = "Weeks"
|
|
21
|
+
|
|
22
|
+
def __init__(self, frequency: str, value: int):
|
|
23
|
+
self.frequency: str = frequency
|
|
24
|
+
self.value: int = value
|
|
25
|
+
|
|
26
|
+
def __repr__(self):
|
|
27
|
+
return "<FreshEvery frequency={_frequency} value={_value}>".format(**vars(self))
|
|
28
|
+
|
|
29
|
+
@property
|
|
30
|
+
def frequency(self) -> str:
|
|
31
|
+
return self._frequency
|
|
32
|
+
|
|
33
|
+
@frequency.setter
|
|
34
|
+
@property_is_enum(Frequency)
|
|
35
|
+
def frequency(self, value: str):
|
|
36
|
+
self._frequency = value
|
|
37
|
+
|
|
38
|
+
@classmethod
|
|
39
|
+
def from_xml_element(cls, fresh_every_schedule_elem: ET.Element):
|
|
40
|
+
frequency = fresh_every_schedule_elem.get("frequency", None)
|
|
41
|
+
value_str = fresh_every_schedule_elem.get("value", None)
|
|
42
|
+
if (frequency is None) or (value_str is None):
|
|
43
|
+
return None
|
|
44
|
+
value = int(value_str)
|
|
45
|
+
return DataFreshnessPolicyItem.FreshEvery(frequency, value)
|
|
46
|
+
|
|
47
|
+
class FreshAt:
|
|
48
|
+
class Frequency:
|
|
49
|
+
Day = "Day"
|
|
50
|
+
Week = "Week"
|
|
51
|
+
Month = "Month"
|
|
52
|
+
|
|
53
|
+
def __init__(self, frequency: str, time: str, timezone, interval_item: Optional[List[str]] = None):
|
|
54
|
+
self.frequency = frequency
|
|
55
|
+
self.time = time
|
|
56
|
+
self.timezone = timezone
|
|
57
|
+
self.interval_item: Optional[List[str]] = interval_item
|
|
58
|
+
|
|
59
|
+
def __repr__(self):
|
|
60
|
+
return (
|
|
61
|
+
"<FreshAt frequency={_frequency} time={_time}> timezone={_timezone} " "interval_item={_interval_time}"
|
|
62
|
+
).format(**vars(self))
|
|
63
|
+
|
|
64
|
+
@property
|
|
65
|
+
def interval_item(self) -> Optional[List[str]]:
|
|
66
|
+
return self._interval_item
|
|
67
|
+
|
|
68
|
+
@interval_item.setter
|
|
69
|
+
def interval_item(self, value: List[str]):
|
|
70
|
+
self._interval_item = value
|
|
71
|
+
|
|
72
|
+
@property
|
|
73
|
+
def time(self):
|
|
74
|
+
return self._time
|
|
75
|
+
|
|
76
|
+
@time.setter
|
|
77
|
+
@property_not_nullable
|
|
78
|
+
def time(self, value):
|
|
79
|
+
self._time = value
|
|
80
|
+
|
|
81
|
+
@property
|
|
82
|
+
def timezone(self) -> str:
|
|
83
|
+
return self._timezone
|
|
84
|
+
|
|
85
|
+
@timezone.setter
|
|
86
|
+
def timezone(self, value: str):
|
|
87
|
+
self._timezone = value
|
|
88
|
+
|
|
89
|
+
@property
|
|
90
|
+
def frequency(self) -> str:
|
|
91
|
+
return self._frequency
|
|
92
|
+
|
|
93
|
+
@frequency.setter
|
|
94
|
+
@property_is_enum(Frequency)
|
|
95
|
+
def frequency(self, value: str):
|
|
96
|
+
self._frequency = value
|
|
97
|
+
|
|
98
|
+
@classmethod
|
|
99
|
+
def from_xml_element(cls, fresh_at_schedule_elem: ET.Element, ns):
|
|
100
|
+
frequency = fresh_at_schedule_elem.get("frequency", None)
|
|
101
|
+
time = fresh_at_schedule_elem.get("time", None)
|
|
102
|
+
if (frequency is None) or (time is None):
|
|
103
|
+
return None
|
|
104
|
+
timezone = fresh_at_schedule_elem.get("timezone", None)
|
|
105
|
+
interval = parse_intervals(fresh_at_schedule_elem, frequency, ns)
|
|
106
|
+
return DataFreshnessPolicyItem.FreshAt(frequency, time, timezone, interval)
|
|
107
|
+
|
|
108
|
+
def __init__(self, option: str):
|
|
109
|
+
self.option = option
|
|
110
|
+
self.fresh_every_schedule: Optional[DataFreshnessPolicyItem.FreshEvery] = None
|
|
111
|
+
self.fresh_at_schedule: Optional[DataFreshnessPolicyItem.FreshAt] = None
|
|
112
|
+
|
|
113
|
+
def __repr__(self):
|
|
114
|
+
return "<DataFreshnessPolicy option={_option}>".format(**vars(self))
|
|
115
|
+
|
|
116
|
+
@property
|
|
117
|
+
def option(self) -> str:
|
|
118
|
+
return self._option
|
|
119
|
+
|
|
120
|
+
@option.setter
|
|
121
|
+
@property_is_enum(Option)
|
|
122
|
+
def option(self, value: str):
|
|
123
|
+
self._option = value
|
|
124
|
+
|
|
125
|
+
@property
|
|
126
|
+
def fresh_every_schedule(self) -> Optional[FreshEvery]:
|
|
127
|
+
return self._fresh_every_schedule
|
|
128
|
+
|
|
129
|
+
@fresh_every_schedule.setter
|
|
130
|
+
def fresh_every_schedule(self, value: FreshEvery):
|
|
131
|
+
self._fresh_every_schedule = value
|
|
132
|
+
|
|
133
|
+
@property
|
|
134
|
+
def fresh_at_schedule(self) -> Optional[FreshAt]:
|
|
135
|
+
return self._fresh_at_schedule
|
|
136
|
+
|
|
137
|
+
@fresh_at_schedule.setter
|
|
138
|
+
def fresh_at_schedule(self, value: FreshAt):
|
|
139
|
+
self._fresh_at_schedule = value
|
|
140
|
+
|
|
141
|
+
@classmethod
|
|
142
|
+
def from_xml_element(cls, data_freshness_policy_elem, ns):
|
|
143
|
+
option = data_freshness_policy_elem.get("option", None)
|
|
144
|
+
if option is None:
|
|
145
|
+
return None
|
|
146
|
+
data_freshness_policy = DataFreshnessPolicyItem(option)
|
|
147
|
+
|
|
148
|
+
fresh_at_schedule = None
|
|
149
|
+
fresh_every_schedule = None
|
|
150
|
+
if option == "FreshAt":
|
|
151
|
+
fresh_at_schedule_elem = data_freshness_policy_elem.find(".//t:freshAtSchedule", namespaces=ns)
|
|
152
|
+
fresh_at_schedule = DataFreshnessPolicyItem.FreshAt.from_xml_element(fresh_at_schedule_elem, ns)
|
|
153
|
+
data_freshness_policy.fresh_at_schedule = fresh_at_schedule
|
|
154
|
+
elif option == "FreshEvery":
|
|
155
|
+
fresh_every_schedule_elem = data_freshness_policy_elem.find(".//t:freshEverySchedule", namespaces=ns)
|
|
156
|
+
fresh_every_schedule = DataFreshnessPolicyItem.FreshEvery.from_xml_element(fresh_every_schedule_elem)
|
|
157
|
+
data_freshness_policy.fresh_every_schedule = fresh_every_schedule
|
|
158
|
+
|
|
159
|
+
return data_freshness_policy
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def parse_intervals(intervals_elem, frequency, ns):
|
|
163
|
+
interval_elems = intervals_elem.findall(".//t:intervals/t:interval", namespaces=ns)
|
|
164
|
+
interval = []
|
|
165
|
+
for interval_elem in interval_elems:
|
|
166
|
+
interval.extend(interval_elem.attrib.items())
|
|
167
|
+
|
|
168
|
+
# No intervals expected for Day frequency
|
|
169
|
+
if frequency == DataFreshnessPolicyItem.FreshAt.Frequency.Day:
|
|
170
|
+
return None
|
|
171
|
+
|
|
172
|
+
if frequency == DataFreshnessPolicyItem.FreshAt.Frequency.Week:
|
|
173
|
+
interval_values = [(i[1]).title() for i in interval]
|
|
174
|
+
return parse_week_intervals(interval_values)
|
|
175
|
+
|
|
176
|
+
if frequency == DataFreshnessPolicyItem.FreshAt.Frequency.Month:
|
|
177
|
+
interval_values = [(i[1]) for i in interval]
|
|
178
|
+
return parse_month_intervals(interval_values)
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def parse_week_intervals(interval_values):
|
|
182
|
+
# Using existing IntervalItem.Day to check valid weekday string
|
|
183
|
+
if not all(hasattr(IntervalItem.Day, day) for day in interval_values):
|
|
184
|
+
raise ValueError("Invalid week day defined " + str(interval_values))
|
|
185
|
+
return interval_values
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def parse_month_intervals(interval_values):
|
|
189
|
+
error = "Invalid interval value for a monthly frequency: {}.".format(interval_values)
|
|
190
|
+
|
|
191
|
+
# Month interval can have value either only ['LastDay'] or list of dates e.g. ["1", 20", "30"]
|
|
192
|
+
# First check if the list only have LastDay value. When using LastDay, there shouldn't be
|
|
193
|
+
# any other values, hence checking the first element of the list is enough.
|
|
194
|
+
# If the value is not "LastDay", we assume intervals is on list of dates format.
|
|
195
|
+
# We created this function instead of using existing MonthlyInterval because we allow list of dates interval,
|
|
196
|
+
|
|
197
|
+
intervals = []
|
|
198
|
+
if interval_values[0] == "LastDay":
|
|
199
|
+
intervals.append(interval_values[0])
|
|
200
|
+
else:
|
|
201
|
+
for interval in interval_values:
|
|
202
|
+
try:
|
|
203
|
+
if 1 <= int(interval) <= 31:
|
|
204
|
+
intervals.append(interval)
|
|
205
|
+
else:
|
|
206
|
+
raise ValueError(error)
|
|
207
|
+
except ValueError:
|
|
208
|
+
if interval_values[0] != "LastDay":
|
|
209
|
+
raise ValueError(error)
|
|
210
|
+
return intervals
|
|
@@ -136,7 +136,7 @@ class DailyInterval(object):
|
|
|
136
136
|
|
|
137
137
|
@interval.setter
|
|
138
138
|
def interval(self, intervals):
|
|
139
|
-
VALID_INTERVALS = {0.25, 0.5, 1, 2, 4, 6, 8, 12}
|
|
139
|
+
VALID_INTERVALS = {0.25, 0.5, 1, 2, 4, 6, 8, 12, 24}
|
|
140
140
|
|
|
141
141
|
for interval in intervals:
|
|
142
142
|
# if an hourly interval is a string, then it is a weekDay interval
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import datetime
|
|
2
2
|
import re
|
|
3
3
|
from functools import wraps
|
|
4
|
+
from typing import Any, Container, Optional, Tuple
|
|
4
5
|
|
|
5
6
|
from tableauserverclient.datetime_helpers import parse_datetime
|
|
6
7
|
|
|
@@ -65,7 +66,7 @@ def property_is_valid_time(func):
|
|
|
65
66
|
return wrapper
|
|
66
67
|
|
|
67
68
|
|
|
68
|
-
def property_is_int(range, allowed=None):
|
|
69
|
+
def property_is_int(range: Tuple[int, int], allowed: Optional[Container[Any]] = None):
|
|
69
70
|
"""Takes a range of ints and a list of exemptions to check against
|
|
70
71
|
when setting a property on a model. The range is a tuple of (min, max) and the
|
|
71
72
|
allowed list (empty by default) allows values outside that range.
|
|
@@ -89,8 +90,10 @@ def property_is_int(range, allowed=None):
|
|
|
89
90
|
raise ValueError(error)
|
|
90
91
|
|
|
91
92
|
min, max = range
|
|
93
|
+
if value in allowed:
|
|
94
|
+
return func(self, value)
|
|
92
95
|
|
|
93
|
-
if
|
|
96
|
+
if value < min or value > max:
|
|
94
97
|
raise ValueError(error)
|
|
95
98
|
|
|
96
99
|
return func(self, value)
|
|
@@ -144,15 +147,7 @@ def property_is_data_acceleration_config(func):
|
|
|
144
147
|
def wrapper(self, value):
|
|
145
148
|
if not isinstance(value, dict):
|
|
146
149
|
raise ValueError("{} is not type 'dict', cannot update {})".format(value.__class__.__name__, func.__name__))
|
|
147
|
-
if len(value)
|
|
148
|
-
attr in value.keys()
|
|
149
|
-
for attr in (
|
|
150
|
-
"acceleration_enabled",
|
|
151
|
-
"accelerate_now",
|
|
152
|
-
"last_updated_at",
|
|
153
|
-
"acceleration_status",
|
|
154
|
-
)
|
|
155
|
-
):
|
|
150
|
+
if len(value) < 2 or not all(attr in value.keys() for attr in ("acceleration_enabled", "accelerate_now")):
|
|
156
151
|
error = "{} should have 2 keys ".format(func.__name__)
|
|
157
152
|
error += "'acceleration_enabled' and 'accelerate_now'"
|
|
158
153
|
error += "instead you have {}".format(value.keys())
|