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.
Files changed (381) hide show
  1. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/PKG-INFO +2 -1
  2. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/pyproject.toml +1 -0
  3. tableauserverclient-0.30.post0.dev1/samples/update_workbook_data_acceleration.py +109 -0
  4. tableauserverclient-0.30.post0.dev1/samples/update_workbook_data_freshness_policy.py +218 -0
  5. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/__init__.py +1 -0
  6. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/_version.py +3 -3
  7. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/__init__.py +1 -0
  8. tableauserverclient-0.30.post0.dev1/tableauserverclient/models/data_freshness_policy_item.py +210 -0
  9. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/interval_item.py +1 -1
  10. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/property_decorators.py +6 -11
  11. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/schedule_item.py +1 -0
  12. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/task_item.py +1 -0
  13. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/view_item.py +34 -0
  14. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/workbook_item.py +34 -4
  15. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/__init__.py +1 -0
  16. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/datasources_endpoint.py +5 -3
  17. tableauserverclient-0.30.post0.dev1/tableauserverclient/server/endpoint/flow_task_endpoint.py +29 -0
  18. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/flows_endpoint.py +5 -3
  19. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/workbooks_endpoint.py +14 -4
  20. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/pager.py +5 -1
  21. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/request_factory.py +92 -4
  22. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/request_options.py +47 -3
  23. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/server.py +2 -0
  24. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient.egg-info/PKG-INFO +2 -1
  25. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient.egg-info/SOURCES.txt +18 -0
  26. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient.egg-info/requires.txt +1 -0
  27. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_get.xml +1 -0
  28. tableauserverclient-0.30.post0.dev1/test/assets/tasks_create_flow_task.xml +28 -0
  29. tableauserverclient-0.30.post0.dev1/test/assets/tasks_with_interval.xml +20 -0
  30. tableauserverclient-0.30.post0.dev1/test/assets/workbook_get_by_id_acceleration_status.xml +19 -0
  31. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_publish.xml +2 -2
  32. tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_acceleration_status.xml +16 -0
  33. tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_data_freshness_policy.xml +9 -0
  34. tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_data_freshness_policy2.xml +9 -0
  35. tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_data_freshness_policy3.xml +11 -0
  36. tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_data_freshness_policy4.xml +12 -0
  37. tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_data_freshness_policy5.xml +16 -0
  38. tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_data_freshness_policy6.xml +15 -0
  39. tableauserverclient-0.30.post0.dev1/test/assets/workbook_update_views_acceleration_status.xml +19 -0
  40. tableauserverclient-0.30.post0.dev1/test/test_data_freshness_policy.py +189 -0
  41. tableauserverclient-0.30.post0.dev1/test/test_flowtask.py +47 -0
  42. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_request_option.py +20 -0
  43. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_schedule.py +10 -0
  44. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_task.py +10 -0
  45. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_view.py +29 -0
  46. tableauserverclient-0.30.post0.dev1/test/test_view_acceleration.py +119 -0
  47. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_workbook.py +3 -0
  48. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/CHANGELOG.md +0 -0
  49. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/CONTRIBUTORS.md +0 -0
  50. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/LICENSE +0 -0
  51. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/LICENSE.versioneer +0 -0
  52. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/MANIFEST.in +0 -0
  53. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/README.md +0 -0
  54. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/contributing.md +0 -0
  55. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/docs/README.md +0 -0
  56. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/add_default_permission.py +0 -0
  57. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/create_extract_task.py +0 -0
  58. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/create_group.py +0 -0
  59. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/create_project.py +0 -0
  60. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/create_schedules.py +0 -0
  61. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/explore_datasource.py +0 -0
  62. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/explore_favorites.py +0 -0
  63. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/explore_site.py +0 -0
  64. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/explore_webhooks.py +0 -0
  65. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/explore_workbook.py +0 -0
  66. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/export.py +0 -0
  67. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/extracts.py +0 -0
  68. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/filter_sort_groups.py +0 -0
  69. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/filter_sort_projects.py +0 -0
  70. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/getting_started/1_hello_server.py +0 -0
  71. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/getting_started/2_hello_site.py +0 -0
  72. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/getting_started/3_hello_universe.py +0 -0
  73. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/initialize_server.py +0 -0
  74. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/kill_all_jobs.py +0 -0
  75. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/list.py +0 -0
  76. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/login.py +0 -0
  77. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/metadata_query.py +0 -0
  78. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/move_workbook_projects.py +0 -0
  79. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/move_workbook_sites.py +0 -0
  80. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/name.txt +0 -0
  81. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/pagination_sample.py +0 -0
  82. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/publish_datasource.py +0 -0
  83. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/publish_workbook.py +0 -0
  84. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/query_permissions.py +0 -0
  85. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/refresh.py +0 -0
  86. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/refresh_tasks.py +0 -0
  87. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/set_refresh_schedule.py +0 -0
  88. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/smoke_test.py +0 -0
  89. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/update_connection.py +0 -0
  90. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/samples/update_datasource_data.py +0 -0
  91. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/setup.cfg +0 -0
  92. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/setup.py +0 -0
  93. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/config.py +0 -0
  94. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/datetime_helpers.py +0 -0
  95. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/exponential_backoff.py +0 -0
  96. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/filesys_helpers.py +0 -0
  97. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/helpers/__init__.py +0 -0
  98. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/helpers/headers.py +0 -0
  99. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/helpers/logging.py +0 -0
  100. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/helpers/strings.py +0 -0
  101. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/column_item.py +0 -0
  102. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/connection_credentials.py +0 -0
  103. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/connection_item.py +0 -0
  104. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/custom_view_item.py +0 -0
  105. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/data_acceleration_report_item.py +0 -0
  106. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/data_alert_item.py +0 -0
  107. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/database_item.py +0 -0
  108. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/datasource_item.py +0 -0
  109. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/dqw_item.py +0 -0
  110. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/exceptions.py +0 -0
  111. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/favorites_item.py +0 -0
  112. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/fileupload_item.py +0 -0
  113. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/flow_item.py +0 -0
  114. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/flow_run_item.py +0 -0
  115. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/group_item.py +0 -0
  116. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/job_item.py +0 -0
  117. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/metric_item.py +0 -0
  118. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/pagination_item.py +0 -0
  119. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/permissions_item.py +0 -0
  120. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/project_item.py +0 -0
  121. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/reference_item.py +0 -0
  122. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/revision_item.py +0 -0
  123. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/server_info_item.py +0 -0
  124. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/site_item.py +0 -0
  125. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/subscription_item.py +0 -0
  126. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/table_item.py +0 -0
  127. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/tableau_auth.py +0 -0
  128. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/tableau_types.py +0 -0
  129. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/tag_item.py +0 -0
  130. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/target.py +0 -0
  131. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/user_item.py +0 -0
  132. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/models/webhook_item.py +0 -0
  133. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/namespace.py +0 -0
  134. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/py.typed +0 -0
  135. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/__init__.py +0 -0
  136. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/auth_endpoint.py +0 -0
  137. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/custom_views_endpoint.py +0 -0
  138. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/data_acceleration_report_endpoint.py +0 -0
  139. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/data_alert_endpoint.py +0 -0
  140. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/databases_endpoint.py +0 -0
  141. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/default_permissions_endpoint.py +0 -0
  142. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/dqw_endpoint.py +0 -0
  143. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/endpoint.py +0 -0
  144. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/exceptions.py +0 -0
  145. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/favorites_endpoint.py +0 -0
  146. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/fileuploads_endpoint.py +0 -0
  147. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/flow_runs_endpoint.py +0 -0
  148. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/groups_endpoint.py +0 -0
  149. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/jobs_endpoint.py +0 -0
  150. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/metadata_endpoint.py +0 -0
  151. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/metrics_endpoint.py +0 -0
  152. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/permissions_endpoint.py +0 -0
  153. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/projects_endpoint.py +0 -0
  154. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/resource_tagger.py +0 -0
  155. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/schedules_endpoint.py +0 -0
  156. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/server_info_endpoint.py +0 -0
  157. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/sites_endpoint.py +0 -0
  158. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/subscriptions_endpoint.py +0 -0
  159. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/tables_endpoint.py +0 -0
  160. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/tasks_endpoint.py +0 -0
  161. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/users_endpoint.py +0 -0
  162. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/views_endpoint.py +0 -0
  163. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/endpoint/webhooks_endpoint.py +0 -0
  164. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/exceptions.py +0 -0
  165. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/filter.py +0 -0
  166. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/query.py +0 -0
  167. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient/server/sort.py +0 -0
  168. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient.egg-info/dependency_links.txt +0 -0
  169. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/tableauserverclient.egg-info/top_level.txt +0 -0
  170. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/__init__.py +0 -0
  171. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/_utils.py +0 -0
  172. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/Data/Tableau Samples/World Indicators.tde +0 -0
  173. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/Data/user_details.csv +0 -0
  174. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/Data/usernames.csv +0 -0
  175. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/RESTAPISample Image.png +0 -0
  176. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/Sample View Image.png +0 -0
  177. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/World Indicators.hyper +0 -0
  178. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/auth_sign_in.xml +0 -0
  179. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/auth_sign_in_error.xml +0 -0
  180. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/auth_sign_in_impersonate.xml +0 -0
  181. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/custom_view_get.xml +0 -0
  182. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/custom_view_get_id.xml +0 -0
  183. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/custom_view_update.xml +0 -0
  184. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/data_acceleration_report.xml +0 -0
  185. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/data_alerts_add_user.xml +0 -0
  186. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/data_alerts_get.xml +0 -0
  187. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/data_alerts_get_by_id.xml +0 -0
  188. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/data_alerts_update.xml +0 -0
  189. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/database_get.xml +0 -0
  190. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/database_populate_permissions.xml +0 -0
  191. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/database_update.xml +0 -0
  192. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_add_tags.xml +0 -0
  193. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_connection_update.xml +0 -0
  194. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_data_update.xml +0 -0
  195. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_get.xml +0 -0
  196. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_get_by_id.xml +0 -0
  197. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_get_empty.xml +0 -0
  198. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_populate_connections.xml +0 -0
  199. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_populate_permissions.xml +0 -0
  200. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_publish.xml +0 -0
  201. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_publish_async.xml +0 -0
  202. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_refresh.xml +0 -0
  203. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_revision.xml +0 -0
  204. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/datasource_update.xml +0 -0
  205. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/dqw_by_content_type.xml +0 -0
  206. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/favorites_add_datasource.xml +0 -0
  207. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/favorites_add_project.xml +0 -0
  208. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/favorites_add_view.xml +0 -0
  209. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/favorites_add_workbook.xml +0 -0
  210. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/favorites_get.xml +0 -0
  211. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/fileupload_append.xml +0 -0
  212. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/fileupload_initialize.xml +0 -0
  213. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_get.xml +0 -0
  214. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_get_by_id.xml +0 -0
  215. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_populate_connections.xml +0 -0
  216. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_populate_permissions.xml +0 -0
  217. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_publish.xml +0 -0
  218. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_refresh.xml +0 -0
  219. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_runs_get.xml +0 -0
  220. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_runs_get_by_id.xml +0 -0
  221. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_runs_get_by_id_failed.xml +0 -0
  222. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_runs_get_by_id_inprogress.xml +0 -0
  223. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/flow_update.xml +0 -0
  224. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_add_user.xml +0 -0
  225. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_create.xml +0 -0
  226. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_create_ad.xml +0 -0
  227. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_create_async.xml +0 -0
  228. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_get.xml +0 -0
  229. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_populate_users.xml +0 -0
  230. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_populate_users_empty.xml +0 -0
  231. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_update.xml +0 -0
  232. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_update_async.xml +0 -0
  233. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/group_users_added.xml +0 -0
  234. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/job_get.xml +0 -0
  235. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/job_get_by_id.xml +0 -0
  236. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/job_get_by_id_failed.xml +0 -0
  237. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/job_get_by_id_failed_workbook.xml +0 -0
  238. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/job_get_by_id_inprogress.xml +0 -0
  239. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metadata_paged_1.json +0 -0
  240. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metadata_paged_2.json +0 -0
  241. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metadata_paged_3.json +0 -0
  242. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metadata_query_error.json +0 -0
  243. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metadata_query_expected_dict.dict +0 -0
  244. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metadata_query_success.json +0 -0
  245. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metrics_get.xml +0 -0
  246. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metrics_get_by_id.xml +0 -0
  247. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/metrics_update.xml +0 -0
  248. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/populate_csv.csv +0 -0
  249. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/populate_pdf.pdf +0 -0
  250. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/project_content_permission.xml +0 -0
  251. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/project_create.xml +0 -0
  252. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/project_get.xml +0 -0
  253. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/project_populate_permissions.xml +0 -0
  254. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/project_populate_workbook_default_permissions.xml +0 -0
  255. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/project_update.xml +0 -0
  256. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/project_update_datasource_default_permissions.xml +0 -0
  257. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/queryset_slicing_page_1.xml +0 -0
  258. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/queryset_slicing_page_2.xml +0 -0
  259. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/request_option_filter_equals.xml +0 -0
  260. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/request_option_filter_name_in.xml +0 -0
  261. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/request_option_filter_tags_in.xml +0 -0
  262. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/request_option_page_number.xml +0 -0
  263. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/request_option_page_size.xml +0 -0
  264. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/request_option_pagination.xml +0 -0
  265. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/request_option_slicing_queryset.xml +0 -0
  266. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_add_datasource.xml +0 -0
  267. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_add_flow.xml +0 -0
  268. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_add_workbook.xml +0 -0
  269. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_add_workbook_with_warnings.xml +0 -0
  270. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_create_daily.xml +0 -0
  271. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_create_hourly.xml +0 -0
  272. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_create_monthly.xml +0 -0
  273. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_create_weekly.xml +0 -0
  274. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_get_by_id.xml +0 -0
  275. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_get_daily_id.xml +0 -0
  276. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_get_empty.xml +0 -0
  277. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_get_hourly_id.xml +0 -0
  278. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_get_monthly_id.xml +0 -0
  279. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/schedule_update.xml +0 -0
  280. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/server_info_25.xml +0 -0
  281. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/server_info_404.xml +0 -0
  282. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/server_info_auth_info.xml +0 -0
  283. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/server_info_get.xml +0 -0
  284. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/site_create.xml +0 -0
  285. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/site_get.xml +0 -0
  286. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/site_get_by_id.xml +0 -0
  287. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/site_get_by_name.xml +0 -0
  288. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/site_update.xml +0 -0
  289. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/subscription_create.xml +0 -0
  290. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/subscription_get.xml +0 -0
  291. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/subscription_get_by_id.xml +0 -0
  292. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/table_get.xml +0 -0
  293. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/table_update.xml +0 -0
  294. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_create_extract_task.xml +0 -0
  295. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_no_workbook_or_datasource.xml +0 -0
  296. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_run_now_response.xml +0 -0
  297. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_with_dataacceleration_task.xml +0 -0
  298. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_with_datasource.xml +0 -0
  299. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_with_workbook.xml +0 -0
  300. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_with_workbook_and_datasource.xml +0 -0
  301. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/tasks_without_schedule.xml +0 -0
  302. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_add.xml +0 -0
  303. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_add_favorite.xml +0 -0
  304. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_get.xml +0 -0
  305. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_get_by_id.xml +0 -0
  306. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_get_empty.xml +0 -0
  307. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_populate_groups.xml +0 -0
  308. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_populate_workbooks.xml +0 -0
  309. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/user_update.xml +0 -0
  310. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/view_add_tags.xml +0 -0
  311. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/view_get.xml +0 -0
  312. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/view_get_id.xml +0 -0
  313. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/view_get_usage.xml +0 -0
  314. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/view_populate_permissions.xml +0 -0
  315. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/view_update_permissions.xml +0 -0
  316. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/webhook_create.xml +0 -0
  317. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/webhook_create_request.xml +0 -0
  318. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/webhook_get.xml +0 -0
  319. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_add_tags.xml +0 -0
  320. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get.xml +0 -0
  321. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get_by_id.xml +0 -0
  322. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get_by_id_personal.xml +0 -0
  323. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get_empty.xml +0 -0
  324. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get_invalid_date.xml +0 -0
  325. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get_page_1.xml +0 -0
  326. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get_page_2.xml +0 -0
  327. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_get_page_3.xml +0 -0
  328. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_populate_connections.xml +0 -0
  329. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_populate_permissions.xml +0 -0
  330. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_populate_views.xml +0 -0
  331. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_populate_views_usage.xml +0 -0
  332. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_publish_async.xml +0 -0
  333. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_refresh.xml +0 -0
  334. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_revision.xml +0 -0
  335. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_update.xml +0 -0
  336. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/assets/workbook_update_permissions.xml +0 -0
  337. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/http/test_http_requests.py +0 -0
  338. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/models/_models.py +0 -0
  339. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/models/test_repr.py +0 -0
  340. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/request_factory/__init__.py +0 -0
  341. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/request_factory/test_datasource_requests.py +0 -0
  342. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/request_factory/test_workbook_requests.py +0 -0
  343. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_auth.py +0 -0
  344. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_connection_.py +0 -0
  345. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_custom_view.py +0 -0
  346. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_data_acceleration_report.py +0 -0
  347. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_dataalert.py +0 -0
  348. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_database.py +0 -0
  349. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_datasource.py +0 -0
  350. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_datasource_model.py +0 -0
  351. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_dqw.py +0 -0
  352. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_endpoint.py +0 -0
  353. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_exponential_backoff.py +0 -0
  354. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_favorites.py +0 -0
  355. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_filesys_helpers.py +0 -0
  356. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_fileuploads.py +0 -0
  357. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_filter.py +0 -0
  358. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_flow.py +0 -0
  359. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_flowruns.py +0 -0
  360. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_group.py +0 -0
  361. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_group_model.py +0 -0
  362. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_job.py +0 -0
  363. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_metadata.py +0 -0
  364. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_metrics.py +0 -0
  365. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_pager.py +0 -0
  366. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_project.py +0 -0
  367. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_project_model.py +0 -0
  368. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_regression_tests.py +0 -0
  369. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_requests.py +0 -0
  370. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_server_info.py +0 -0
  371. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_site.py +0 -0
  372. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_site_model.py +0 -0
  373. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_sort.py +0 -0
  374. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_subscription.py +0 -0
  375. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_table.py +0 -0
  376. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_tableauauth_model.py +0 -0
  377. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_user.py +0 -0
  378. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_user_model.py +0 -0
  379. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_webhook.py +0 -0
  380. {tableauserverclient-0.30 → tableauserverclient-0.30.post0.dev1}/test/test_workbook_model.py +0 -0
  381. {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"
@@ -16,6 +16,7 @@ dependencies = [
16
16
  'packaging>=23.1', # latest as at 7/31/23
17
17
  'requests>=2.31', # latest as at 7/31/23
18
18
  'urllib3==2.0.7', # latest as at 7/31/23
19
+ 'typing_extensions>=4.0.1',
19
20
  ]
20
21
  requires-python = ">=3.7"
21
22
  classifiers = [
@@ -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()
@@ -10,6 +10,7 @@ from .models import (
10
10
  DailyInterval,
11
11
  DataAlertItem,
12
12
  DatabaseItem,
13
+ DataFreshnessPolicyItem,
13
14
  DatasourceItem,
14
15
  FavoriteItem,
15
16
  FlowItem,
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2024-01-19T11:30:24-0800",
11
+ "date": "2024-06-03T12:52:39-0700",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "f84d7d5302344f0a4ac369c501b122931ae7e79e",
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 (value < min or value > max) and (value not in allowed):
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) != 4 or not all(
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())
@@ -26,6 +26,7 @@ class ScheduleItem(object):
26
26
  Subscription = "Subscription"
27
27
  DataAcceleration = "DataAcceleration"
28
28
  ActiveDirectorySync = "ActiveDirectorySync"
29
+ System = "System"
29
30
 
30
31
  class ExecutionOrder:
31
32
  Parallel = "Parallel"
@@ -18,6 +18,7 @@ class TaskItem(object):
18
18
  _TASK_TYPE_MAPPING = {
19
19
  "RefreshExtractTask": Type.ExtractRefresh,
20
20
  "MaterializeViewsTask": Type.DataAcceleration,
21
+ "RunFlowTask": Type.RunFlow,
21
22
  }
22
23
 
23
24
  def __init__(