tableauserverclient 0.32__tar.gz → 0.33__tar.gz

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