tableauserverclient 0.36__tar.gz → 0.38__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 (425) hide show
  1. {tableauserverclient-0.36 → tableauserverclient-0.38}/PKG-INFO +3 -2
  2. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/extracts.py +0 -1
  3. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/__init__.py +6 -0
  4. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/bin/_version.py +3 -3
  5. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/helpers/strings.py +25 -1
  6. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/__init__.py +6 -1
  7. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/connection_item.py +3 -3
  8. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/datasource_item.py +218 -23
  9. tableauserverclient-0.38/tableauserverclient/models/extract_item.py +82 -0
  10. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/flow_item.py +2 -2
  11. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/group_item.py +11 -0
  12. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/interval_item.py +40 -0
  13. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/job_item.py +1 -0
  14. tableauserverclient-0.38/tableauserverclient/models/location_item.py +53 -0
  15. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/project_item.py +138 -27
  16. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/schedule_item.py +57 -0
  17. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/site_item.py +28 -0
  18. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/table_item.py +7 -3
  19. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/tableau_types.py +13 -1
  20. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/user_item.py +101 -1
  21. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/view_item.py +79 -5
  22. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/workbook_item.py +151 -1
  23. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/__init__.py +2 -0
  24. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/databases_endpoint.py +101 -18
  25. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/datasources_endpoint.py +562 -7
  26. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/dqw_endpoint.py +16 -6
  27. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/endpoint.py +39 -0
  28. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/exceptions.py +4 -0
  29. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/fileuploads_endpoint.py +1 -1
  30. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/groupsets_endpoint.py +2 -2
  31. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/jobs_endpoint.py +1 -1
  32. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/schedules_endpoint.py +132 -2
  33. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/sites_endpoint.py +18 -1
  34. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/tables_endpoint.py +140 -17
  35. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/users_endpoint.py +22 -5
  36. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/views_endpoint.py +5 -1
  37. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/workbooks_endpoint.py +24 -10
  38. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/query.py +36 -0
  39. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/request_factory.py +16 -5
  40. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/request_options.py +162 -2
  41. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/server.py +42 -0
  42. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient.egg-info/PKG-INFO +3 -2
  43. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient.egg-info/SOURCES.txt +14 -0
  44. tableauserverclient-0.38/test/assets/datasource_get_all_fields.xml +10 -0
  45. tableauserverclient-0.38/test/assets/group_get_all_fields.xml +14 -0
  46. tableauserverclient-0.38/test/assets/job_get_by_id_completed.xml +14 -0
  47. tableauserverclient-0.38/test/assets/project_get_all_fields.xml +9 -0
  48. tableauserverclient-0.38/test/assets/schedule_get_extract_refresh_tasks.xml +15 -0
  49. tableauserverclient-0.38/test/assets/site_auth_configurations.xml +18 -0
  50. tableauserverclient-0.38/test/assets/user_get_all_fields.xml +11 -0
  51. tableauserverclient-0.38/test/assets/view_get_all_fields.xml +35 -0
  52. tableauserverclient-0.38/test/assets/virtual_connection_populate_connections2.xml +6 -0
  53. tableauserverclient-0.38/test/assets/workbook_get_all_fields.xml +46 -0
  54. tableauserverclient-0.38/test/request_factory/test_task_requests.py +47 -0
  55. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_datasource.py +38 -1
  56. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_group.py +23 -0
  57. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_job.py +12 -0
  58. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_project.py +26 -0
  59. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_request_option.py +11 -1
  60. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_schedule.py +18 -0
  61. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_site.py +26 -0
  62. tableauserverclient-0.38/test/test_ssl_config.py +77 -0
  63. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_user.py +88 -1
  64. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_view.py +153 -1
  65. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_virtual_connection.py +23 -17
  66. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_workbook.py +153 -4
  67. {tableauserverclient-0.36 → tableauserverclient-0.38}/CHANGELOG.md +0 -0
  68. {tableauserverclient-0.36 → tableauserverclient-0.38}/CONTRIBUTORS.md +0 -0
  69. {tableauserverclient-0.36 → tableauserverclient-0.38}/LICENSE +0 -0
  70. {tableauserverclient-0.36 → tableauserverclient-0.38}/LICENSE.versioneer +0 -0
  71. {tableauserverclient-0.36 → tableauserverclient-0.38}/MANIFEST.in +0 -0
  72. {tableauserverclient-0.36 → tableauserverclient-0.38}/README.md +0 -0
  73. {tableauserverclient-0.36 → tableauserverclient-0.38}/contributing.md +0 -0
  74. {tableauserverclient-0.36 → tableauserverclient-0.38}/docs/README.md +0 -0
  75. {tableauserverclient-0.36 → tableauserverclient-0.38}/pyproject.toml +0 -0
  76. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/add_default_permission.py +0 -0
  77. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/create_extract_task.py +0 -0
  78. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/create_group.py +0 -0
  79. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/create_project.py +0 -0
  80. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/create_schedules.py +0 -0
  81. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/explore_datasource.py +0 -0
  82. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/explore_favorites.py +0 -0
  83. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/explore_site.py +0 -0
  84. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/explore_webhooks.py +0 -0
  85. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/explore_workbook.py +0 -0
  86. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/export.py +0 -0
  87. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/filter_sort_groups.py +0 -0
  88. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/filter_sort_projects.py +0 -0
  89. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/getting_started/1_hello_server.py +0 -0
  90. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/getting_started/2_hello_site.py +0 -0
  91. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/getting_started/3_hello_universe.py +0 -0
  92. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/initialize_server.py +0 -0
  93. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/kill_all_jobs.py +0 -0
  94. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/list.py +0 -0
  95. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/login.py +0 -0
  96. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/metadata_query.py +0 -0
  97. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/move_workbook_projects.py +0 -0
  98. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/move_workbook_sites.py +0 -0
  99. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/name.txt +0 -0
  100. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/pagination_sample.py +0 -0
  101. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/publish_datasource.py +0 -0
  102. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/publish_workbook.py +0 -0
  103. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/query_permissions.py +0 -0
  104. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/refresh.py +0 -0
  105. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/refresh_tasks.py +0 -0
  106. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/set_refresh_schedule.py +0 -0
  107. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/smoke_test.py +0 -0
  108. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/update_connection.py +0 -0
  109. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/update_datasource_data.py +0 -0
  110. {tableauserverclient-0.36 → tableauserverclient-0.38}/samples/update_workbook_data_freshness_policy.py +0 -0
  111. {tableauserverclient-0.36 → tableauserverclient-0.38}/setup.cfg +0 -0
  112. {tableauserverclient-0.36 → tableauserverclient-0.38}/setup.py +0 -0
  113. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/config.py +0 -0
  114. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/datetime_helpers.py +0 -0
  115. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/exponential_backoff.py +0 -0
  116. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/filesys_helpers.py +0 -0
  117. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/helpers/__init__.py +0 -0
  118. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/helpers/headers.py +0 -0
  119. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/helpers/logging.py +0 -0
  120. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/column_item.py +0 -0
  121. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/connection_credentials.py +0 -0
  122. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/custom_view_item.py +0 -0
  123. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/data_acceleration_report_item.py +0 -0
  124. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/data_alert_item.py +0 -0
  125. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/data_freshness_policy_item.py +0 -0
  126. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/database_item.py +0 -0
  127. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/dqw_item.py +0 -0
  128. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/exceptions.py +0 -0
  129. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/favorites_item.py +0 -0
  130. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/fileupload_item.py +0 -0
  131. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/flow_run_item.py +0 -0
  132. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/groupset_item.py +0 -0
  133. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/linked_tasks_item.py +0 -0
  134. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/metric_item.py +0 -0
  135. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/pagination_item.py +0 -0
  136. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/permissions_item.py +0 -0
  137. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/property_decorators.py +0 -0
  138. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/reference_item.py +0 -0
  139. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/revision_item.py +0 -0
  140. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/server_info_item.py +0 -0
  141. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/subscription_item.py +0 -0
  142. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/tableau_auth.py +0 -0
  143. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/tag_item.py +0 -0
  144. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/target.py +0 -0
  145. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/task_item.py +0 -0
  146. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/virtual_connection_item.py +0 -0
  147. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/models/webhook_item.py +0 -0
  148. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/namespace.py +0 -0
  149. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/py.typed +0 -0
  150. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/__init__.py +0 -0
  151. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/auth_endpoint.py +0 -0
  152. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/custom_views_endpoint.py +0 -0
  153. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/data_acceleration_report_endpoint.py +0 -0
  154. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/data_alert_endpoint.py +0 -0
  155. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/default_permissions_endpoint.py +0 -0
  156. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/favorites_endpoint.py +0 -0
  157. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/flow_runs_endpoint.py +0 -0
  158. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/flow_task_endpoint.py +0 -0
  159. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/flows_endpoint.py +0 -0
  160. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/groups_endpoint.py +0 -0
  161. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/linked_tasks_endpoint.py +0 -0
  162. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/metadata_endpoint.py +0 -0
  163. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/metrics_endpoint.py +0 -0
  164. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/permissions_endpoint.py +0 -0
  165. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/projects_endpoint.py +0 -0
  166. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/resource_tagger.py +0 -0
  167. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/server_info_endpoint.py +0 -0
  168. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/subscriptions_endpoint.py +0 -0
  169. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/tasks_endpoint.py +0 -0
  170. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/virtual_connections_endpoint.py +0 -0
  171. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/endpoint/webhooks_endpoint.py +0 -0
  172. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/exceptions.py +0 -0
  173. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/filter.py +0 -0
  174. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/pager.py +0 -0
  175. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient/server/sort.py +0 -0
  176. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient.egg-info/dependency_links.txt +0 -0
  177. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient.egg-info/requires.txt +0 -0
  178. {tableauserverclient-0.36 → tableauserverclient-0.38}/tableauserverclient.egg-info/top_level.txt +0 -0
  179. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/__init__.py +0 -0
  180. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/_utils.py +0 -0
  181. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/Data/Tableau Samples/World Indicators.tde +0 -0
  182. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/Data/user_details.csv +0 -0
  183. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/Data/usernames.csv +0 -0
  184. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/RESTAPISample Image.png +0 -0
  185. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/Sample View Image.png +0 -0
  186. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/World Indicators.hyper +0 -0
  187. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/auth_sign_in.xml +0 -0
  188. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/auth_sign_in_error.xml +0 -0
  189. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/auth_sign_in_impersonate.xml +0 -0
  190. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/custom_view_download.json +0 -0
  191. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/custom_view_get.xml +0 -0
  192. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/custom_view_get_id.xml +0 -0
  193. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/custom_view_update.xml +0 -0
  194. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/data_acceleration_report.xml +0 -0
  195. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/data_alerts_add_user.xml +0 -0
  196. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/data_alerts_get.xml +0 -0
  197. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/data_alerts_get_by_id.xml +0 -0
  198. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/data_alerts_update.xml +0 -0
  199. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/database_get.xml +0 -0
  200. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/database_populate_permissions.xml +0 -0
  201. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/database_update.xml +0 -0
  202. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/datasource_add_tags.xml +0 -0
  203. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/datasource_connection_update.xml +0 -0
  204. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/datasource_data_update.xml +0 -0
  205. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/datasource_get.xml +0 -0
  206. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/datasource_get_by_id.xml +0 -0
  207. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/datasource_get_empty.xml +0 -0
  208. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/datasource_populate_connections.xml +0 -0
  209. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/datasource_populate_permissions.xml +0 -0
  210. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/datasource_publish.xml +0 -0
  211. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/datasource_publish_async.xml +0 -0
  212. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/datasource_refresh.xml +0 -0
  213. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/datasource_revision.xml +0 -0
  214. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/datasource_update.xml +0 -0
  215. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/dqw_by_content_type.xml +0 -0
  216. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/favorites_add_datasource.xml +0 -0
  217. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/favorites_add_project.xml +0 -0
  218. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/favorites_add_view.xml +0 -0
  219. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/favorites_add_workbook.xml +0 -0
  220. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/favorites_get.xml +0 -0
  221. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/fileupload_append.xml +0 -0
  222. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/fileupload_initialize.xml +0 -0
  223. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/flow_get.xml +0 -0
  224. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/flow_get_by_id.xml +0 -0
  225. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/flow_populate_connections.xml +0 -0
  226. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/flow_populate_permissions.xml +0 -0
  227. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/flow_publish.xml +0 -0
  228. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/flow_refresh.xml +0 -0
  229. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/flow_runs_get.xml +0 -0
  230. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/flow_runs_get_by_id.xml +0 -0
  231. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/flow_runs_get_by_id_failed.xml +0 -0
  232. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/flow_runs_get_by_id_inprogress.xml +0 -0
  233. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/flow_update.xml +0 -0
  234. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/group_add_user.xml +0 -0
  235. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/group_add_users.xml +0 -0
  236. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/group_create.xml +0 -0
  237. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/group_create_ad.xml +0 -0
  238. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/group_create_async.xml +0 -0
  239. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/group_get.xml +0 -0
  240. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/group_populate_users.xml +0 -0
  241. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/group_populate_users_empty.xml +0 -0
  242. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/group_update.xml +0 -0
  243. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/group_update_async.xml +0 -0
  244. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/group_users_added.xml +0 -0
  245. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/groupsets_create.xml +0 -0
  246. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/groupsets_get.xml +0 -0
  247. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/groupsets_get_by_id.xml +0 -0
  248. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/groupsets_update.xml +0 -0
  249. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/job_get.xml +0 -0
  250. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/job_get_by_id.xml +0 -0
  251. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/job_get_by_id_failed.xml +0 -0
  252. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/job_get_by_id_failed_workbook.xml +0 -0
  253. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/job_get_by_id_inprogress.xml +0 -0
  254. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/linked_tasks_get.xml +0 -0
  255. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/linked_tasks_run_now.xml +0 -0
  256. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/metadata_paged_1.json +0 -0
  257. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/metadata_paged_2.json +0 -0
  258. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/metadata_paged_3.json +0 -0
  259. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/metadata_query_error.json +0 -0
  260. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/metadata_query_expected_dict.dict +0 -0
  261. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/metadata_query_success.json +0 -0
  262. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/metrics_get.xml +0 -0
  263. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/metrics_get_by_id.xml +0 -0
  264. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/metrics_update.xml +0 -0
  265. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/odata_connection.xml +0 -0
  266. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/populate_csv.csv +0 -0
  267. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/populate_pdf.pdf +0 -0
  268. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/project_content_permission.xml +0 -0
  269. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/project_create.xml +0 -0
  270. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/project_get.xml +0 -0
  271. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/project_populate_permissions.xml +0 -0
  272. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/project_populate_virtualconnection_default_permissions.xml +0 -0
  273. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/project_populate_workbook_default_permissions.xml +0 -0
  274. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/project_update.xml +0 -0
  275. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/project_update_datasource_default_permissions.xml +0 -0
  276. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/project_update_virtualconnection_default_permissions.xml +0 -0
  277. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/queryset_slicing_page_1.xml +0 -0
  278. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/queryset_slicing_page_2.xml +0 -0
  279. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/request_option_filter_equals.xml +0 -0
  280. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/request_option_filter_name_in.xml +0 -0
  281. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/request_option_filter_tags_in.xml +0 -0
  282. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/request_option_page_number.xml +0 -0
  283. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/request_option_page_size.xml +0 -0
  284. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/request_option_pagination.xml +0 -0
  285. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/request_option_slicing_queryset.xml +0 -0
  286. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_add_datasource.xml +0 -0
  287. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_add_flow.xml +0 -0
  288. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_add_workbook.xml +0 -0
  289. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_add_workbook_with_warnings.xml +0 -0
  290. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_create_daily.xml +0 -0
  291. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_create_hourly.xml +0 -0
  292. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_create_monthly.xml +0 -0
  293. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_create_weekly.xml +0 -0
  294. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_get.xml +0 -0
  295. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_get_by_id.xml +0 -0
  296. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_get_daily_id.xml +0 -0
  297. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_get_empty.xml +0 -0
  298. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_get_hourly_id.xml +0 -0
  299. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_get_monthly_id.xml +0 -0
  300. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_get_monthly_id_2.xml +0 -0
  301. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/schedule_update.xml +0 -0
  302. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/server_info_25.xml +0 -0
  303. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/server_info_404.xml +0 -0
  304. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/server_info_auth_info.xml +0 -0
  305. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/server_info_get.xml +0 -0
  306. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/site_create.xml +0 -0
  307. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/site_get.xml +0 -0
  308. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/site_get_by_id.xml +0 -0
  309. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/site_get_by_name.xml +0 -0
  310. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/site_update.xml +0 -0
  311. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/subscription_create.xml +0 -0
  312. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/subscription_get.xml +0 -0
  313. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/subscription_get_by_id.xml +0 -0
  314. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/table_get.xml +0 -0
  315. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/table_update.xml +0 -0
  316. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/tasks_create_extract_task.xml +0 -0
  317. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/tasks_create_flow_task.xml +0 -0
  318. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/tasks_no_workbook_or_datasource.xml +0 -0
  319. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/tasks_run_now_response.xml +0 -0
  320. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/tasks_with_dataacceleration_task.xml +0 -0
  321. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/tasks_with_datasource.xml +0 -0
  322. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/tasks_with_interval.xml +0 -0
  323. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/tasks_with_workbook.xml +0 -0
  324. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/tasks_with_workbook_and_datasource.xml +0 -0
  325. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/tasks_without_schedule.xml +0 -0
  326. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/user_add.xml +0 -0
  327. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/user_add_favorite.xml +0 -0
  328. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/user_get.xml +0 -0
  329. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/user_get_by_id.xml +0 -0
  330. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/user_get_empty.xml +0 -0
  331. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/user_populate_groups.xml +0 -0
  332. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/user_populate_workbooks.xml +0 -0
  333. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/user_update.xml +0 -0
  334. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/view_add_tags.xml +0 -0
  335. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/view_get.xml +0 -0
  336. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/view_get_id.xml +0 -0
  337. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/view_get_id_usage.xml +0 -0
  338. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/view_get_usage.xml +0 -0
  339. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/view_populate_permissions.xml +0 -0
  340. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/view_update_permissions.xml +0 -0
  341. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/virtual_connection_add_permissions.xml +0 -0
  342. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/virtual_connection_database_connection_update.xml +0 -0
  343. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/virtual_connection_populate_connections.xml +0 -0
  344. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/virtual_connections_download.xml +0 -0
  345. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/virtual_connections_get.xml +0 -0
  346. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/virtual_connections_publish.xml +0 -0
  347. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/virtual_connections_revisions.xml +0 -0
  348. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/virtual_connections_update.xml +0 -0
  349. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/webhook_create.xml +0 -0
  350. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/webhook_create_request.xml +0 -0
  351. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/webhook_get.xml +0 -0
  352. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_add_tags.xml +0 -0
  353. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_get.xml +0 -0
  354. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_get_by_id.xml +0 -0
  355. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_get_by_id_acceleration_status.xml +0 -0
  356. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_get_by_id_personal.xml +0 -0
  357. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_get_empty.xml +0 -0
  358. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_get_invalid_date.xml +0 -0
  359. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_get_page_1.xml +0 -0
  360. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_get_page_2.xml +0 -0
  361. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_get_page_3.xml +0 -0
  362. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_populate_connections.xml +0 -0
  363. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_populate_permissions.xml +0 -0
  364. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_populate_views.xml +0 -0
  365. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_populate_views_usage.xml +0 -0
  366. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_publish.xml +0 -0
  367. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_publish_async.xml +0 -0
  368. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_refresh.xml +0 -0
  369. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_revision.xml +0 -0
  370. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_update.xml +0 -0
  371. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_update_acceleration_status.xml +0 -0
  372. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_update_data_freshness_policy.xml +0 -0
  373. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_update_data_freshness_policy2.xml +0 -0
  374. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_update_data_freshness_policy3.xml +0 -0
  375. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_update_data_freshness_policy4.xml +0 -0
  376. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_update_data_freshness_policy5.xml +0 -0
  377. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_update_data_freshness_policy6.xml +0 -0
  378. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_update_permissions.xml +0 -0
  379. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/assets/workbook_update_views_acceleration_status.xml +0 -0
  380. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/http/test_http_requests.py +0 -0
  381. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/models/_models.py +0 -0
  382. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/models/test_repr.py +0 -0
  383. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/request_factory/__init__.py +0 -0
  384. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/request_factory/test_datasource_requests.py +0 -0
  385. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/request_factory/test_workbook_requests.py +0 -0
  386. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_auth.py +0 -0
  387. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_connection_.py +0 -0
  388. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_custom_view.py +0 -0
  389. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_data_acceleration_report.py +0 -0
  390. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_data_freshness_policy.py +0 -0
  391. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_dataalert.py +0 -0
  392. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_database.py +0 -0
  393. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_datasource_model.py +0 -0
  394. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_dqw.py +0 -0
  395. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_endpoint.py +0 -0
  396. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_exponential_backoff.py +0 -0
  397. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_favorites.py +0 -0
  398. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_filesys_helpers.py +0 -0
  399. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_fileuploads.py +0 -0
  400. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_filter.py +0 -0
  401. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_flow.py +0 -0
  402. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_flowruns.py +0 -0
  403. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_flowtask.py +0 -0
  404. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_group_model.py +0 -0
  405. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_groupsets.py +0 -0
  406. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_linked_tasks.py +0 -0
  407. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_metadata.py +0 -0
  408. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_metrics.py +0 -0
  409. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_pager.py +0 -0
  410. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_permissionsrule.py +0 -0
  411. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_project_model.py +0 -0
  412. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_regression_tests.py +0 -0
  413. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_requests.py +0 -0
  414. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_server_info.py +0 -0
  415. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_site_model.py +0 -0
  416. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_sort.py +0 -0
  417. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_subscription.py +0 -0
  418. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_table.py +0 -0
  419. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_tableauauth_model.py +0 -0
  420. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_tagging.py +0 -0
  421. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_task.py +0 -0
  422. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_user_model.py +0 -0
  423. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_view_acceleration.py +0 -0
  424. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_webhook.py +0 -0
  425. {tableauserverclient-0.36 → tableauserverclient-0.38}/test/test_workbook_model.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: tableauserverclient
3
- Version: 0.36
3
+ Version: 0.38
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)
@@ -50,6 +50,7 @@ Requires-Dist: pytest>=7.0; extra == "test"
50
50
  Requires-Dist: pytest-cov; extra == "test"
51
51
  Requires-Dist: pytest-subtests; extra == "test"
52
52
  Requires-Dist: requests-mock<2.0,>=1.0; extra == "test"
53
+ Dynamic: license-file
53
54
 
54
55
  # Tableau Server Client (Python)
55
56
 
@@ -42,7 +42,6 @@ def main():
42
42
  server.add_http_options({"verify": False})
43
43
  server.use_server_version()
44
44
  with server.auth.sign_in(tableau_auth):
45
-
46
45
  wb = None
47
46
  ds = None
48
47
  if args.workbook:
@@ -25,6 +25,7 @@ from tableauserverclient.models import (
25
25
  LinkedTaskItem,
26
26
  LinkedTaskStepItem,
27
27
  LinkedTaskFlowRunItem,
28
+ LocationItem,
28
29
  MetricItem,
29
30
  MonthlyInterval,
30
31
  PaginationItem,
@@ -35,6 +36,7 @@ from tableauserverclient.models import (
35
36
  Resource,
36
37
  RevisionItem,
37
38
  ScheduleItem,
39
+ SiteAuthConfiguration,
38
40
  SiteItem,
39
41
  ServerInfoItem,
40
42
  SubscriptionItem,
@@ -56,6 +58,7 @@ from tableauserverclient.server import (
56
58
  ExcelRequestOptions,
57
59
  ImageRequestOptions,
58
60
  PDFRequestOptions,
61
+ PPTXRequestOptions,
59
62
  RequestOptions,
60
63
  MissingRequiredFieldError,
61
64
  FailedSignInError,
@@ -100,6 +103,7 @@ __all__ = [
100
103
  "LinkedTaskFlowRunItem",
101
104
  "LinkedTaskItem",
102
105
  "LinkedTaskStepItem",
106
+ "LocationItem",
103
107
  "MetricItem",
104
108
  "MissingRequiredFieldError",
105
109
  "MonthlyInterval",
@@ -107,6 +111,7 @@ __all__ = [
107
111
  "Pager",
108
112
  "PaginationItem",
109
113
  "PDFRequestOptions",
114
+ "PPTXRequestOptions",
110
115
  "Permission",
111
116
  "PermissionsRule",
112
117
  "PersonalAccessTokenAuth",
@@ -119,6 +124,7 @@ __all__ = [
119
124
  "ServerInfoItem",
120
125
  "ServerResponseError",
121
126
  "SiteItem",
127
+ "SiteAuthConfiguration",
122
128
  "Sort",
123
129
  "SubscriptionItem",
124
130
  "TableauAuth",
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-01-10T10:20:30-0800",
11
+ "date": "2025-05-15T14:21:50-0700",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "42cecfe268d494284ca74b49aa4e9bfb6cfa197a",
15
- "version": "0.36"
14
+ "full-revisionid": "cda018b684c98200f3f9de11e379ba2ca3b1b3fe",
15
+ "version": "0.38"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -1,6 +1,6 @@
1
1
  from defusedxml.ElementTree import fromstring, tostring
2
2
  from functools import singledispatch
3
- from typing import TypeVar
3
+ from typing import TypeVar, overload
4
4
 
5
5
 
6
6
  # the redact method can handle either strings or bytes, but it can't mix them.
@@ -41,3 +41,27 @@ def _(xml: str) -> str:
41
41
  @redact_xml.register # type: ignore[no-redef]
42
42
  def _(xml: bytes) -> bytes:
43
43
  return _redact_any_type(bytearray(xml), b"password", b"..[redacted]")
44
+
45
+
46
+ @overload
47
+ def nullable_str_to_int(value: None) -> None: ...
48
+
49
+
50
+ @overload
51
+ def nullable_str_to_int(value: str) -> int: ...
52
+
53
+
54
+ def nullable_str_to_int(value):
55
+ return int(value) if value is not None else None
56
+
57
+
58
+ @overload
59
+ def nullable_str_to_bool(value: None) -> None: ...
60
+
61
+
62
+ @overload
63
+ def nullable_str_to_bool(value: str) -> bool: ...
64
+
65
+
66
+ def nullable_str_to_bool(value):
67
+ return str(value).lower() == "true" if value is not None else None
@@ -28,6 +28,7 @@ from tableauserverclient.models.linked_tasks_item import (
28
28
  LinkedTaskStepItem,
29
29
  LinkedTaskFlowRunItem,
30
30
  )
31
+ from tableauserverclient.models.location_item import LocationItem
31
32
  from tableauserverclient.models.metric_item import MetricItem
32
33
  from tableauserverclient.models.pagination_item import PaginationItem
33
34
  from tableauserverclient.models.permissions_item import PermissionsRule, Permission
@@ -35,7 +36,7 @@ from tableauserverclient.models.project_item import ProjectItem
35
36
  from tableauserverclient.models.revision_item import RevisionItem
36
37
  from tableauserverclient.models.schedule_item import ScheduleItem
37
38
  from tableauserverclient.models.server_info_item import ServerInfoItem
38
- from tableauserverclient.models.site_item import SiteItem
39
+ from tableauserverclient.models.site_item import SiteItem, SiteAuthConfiguration
39
40
  from tableauserverclient.models.subscription_item import SubscriptionItem
40
41
  from tableauserverclient.models.table_item import TableItem
41
42
  from tableauserverclient.models.tableau_auth import Credentials, TableauAuth, PersonalAccessTokenAuth, JWTAuth
@@ -48,6 +49,7 @@ from tableauserverclient.models.view_item import ViewItem
48
49
  from tableauserverclient.models.virtual_connection_item import VirtualConnectionItem
49
50
  from tableauserverclient.models.webhook_item import WebhookItem
50
51
  from tableauserverclient.models.workbook_item import WorkbookItem
52
+ from tableauserverclient.models.extract_item import ExtractItem
51
53
 
52
54
  __all__ = [
53
55
  "ColumnItem",
@@ -75,6 +77,7 @@ __all__ = [
75
77
  "MonthlyInterval",
76
78
  "HourlyInterval",
77
79
  "BackgroundJobItem",
80
+ "LocationItem",
78
81
  "MetricItem",
79
82
  "PaginationItem",
80
83
  "Permission",
@@ -83,6 +86,7 @@ __all__ = [
83
86
  "RevisionItem",
84
87
  "ScheduleItem",
85
88
  "ServerInfoItem",
89
+ "SiteAuthConfiguration",
86
90
  "SiteItem",
87
91
  "SubscriptionItem",
88
92
  "TableItem",
@@ -103,4 +107,5 @@ __all__ = [
103
107
  "LinkedTaskItem",
104
108
  "LinkedTaskStepItem",
105
109
  "LinkedTaskFlowRunItem",
110
+ "ExtractItem",
106
111
  ]
@@ -103,11 +103,11 @@ class ConnectionItem:
103
103
  all_connection_xml = parsed_response.findall(".//t:connection", namespaces=ns)
104
104
  for connection_xml in all_connection_xml:
105
105
  connection_item = cls()
106
- connection_item._id = connection_xml.get("id", None)
106
+ connection_item._id = connection_xml.get("id", connection_xml.get("connectionId", None))
107
107
  connection_item._connection_type = connection_xml.get("type", connection_xml.get("dbClass", None))
108
108
  connection_item.embed_password = string_to_bool(connection_xml.get("embedPassword", ""))
109
- connection_item.server_address = connection_xml.get("serverAddress", None)
110
- connection_item.server_port = connection_xml.get("serverPort", None)
109
+ connection_item.server_address = connection_xml.get("serverAddress", connection_xml.get("server", None))
110
+ connection_item.server_port = connection_xml.get("serverPort", connection_xml.get("port", None))
111
111
  connection_item.username = connection_xml.get("userName", None)
112
112
  connection_item._query_tagging = (
113
113
  string_to_bool(s) if (s := connection_xml.get("queryTagging", None)) else None
@@ -6,9 +6,11 @@ from typing import Optional
6
6
  from defusedxml.ElementTree import fromstring
7
7
 
8
8
  from tableauserverclient.datetime_helpers import parse_datetime
9
+ from tableauserverclient.helpers.strings import nullable_str_to_bool, nullable_str_to_int
9
10
  from tableauserverclient.models.connection_item import ConnectionItem
10
11
  from tableauserverclient.models.exceptions import UnpopulatedPropertyError
11
12
  from tableauserverclient.models.permissions_item import PermissionsRule
13
+ from tableauserverclient.models.project_item import ProjectItem
12
14
  from tableauserverclient.models.property_decorators import (
13
15
  property_not_nullable,
14
16
  property_is_boolean,
@@ -16,9 +18,118 @@ from tableauserverclient.models.property_decorators import (
16
18
  )
17
19
  from tableauserverclient.models.revision_item import RevisionItem
18
20
  from tableauserverclient.models.tag_item import TagItem
21
+ from tableauserverclient.models.user_item import UserItem
19
22
 
20
23
 
21
24
  class DatasourceItem:
25
+ """
26
+ Represents a Tableau datasource item.
27
+
28
+ Parameters
29
+ ----------
30
+ project_id : Optional[str]
31
+ The project ID that the datasource belongs to.
32
+
33
+ name : Optional[str]
34
+ The name of the datasource.
35
+
36
+ Attributes
37
+ ----------
38
+ ask_data_enablement : Optional[str]
39
+ Determines if a data source allows use of Ask Data. The value can be
40
+ TSC.DatasourceItem.AskDataEnablement.Enabled,
41
+ TSC.DatasourceItem.AskDataEnablement.Disabled, or
42
+ TSC.DatasourceItem.AskDataEnablement.SiteDefault. If no setting is
43
+ specified, it will default to SiteDefault. See REST API Publish
44
+ Datasource for more information about ask_data_enablement.
45
+
46
+ connected_workbooks_count : Optional[int]
47
+ The number of workbooks connected to the datasource.
48
+
49
+ connections : list[ConnectionItem]
50
+ The list of data connections (ConnectionItem) for the specified data
51
+ source. You must first call the populate_connections method to access
52
+ this data. See the ConnectionItem class.
53
+
54
+ content_url : Optional[str]
55
+ The name of the data source as it would appear in a URL.
56
+
57
+ created_at : Optional[datetime.datetime]
58
+ The time the data source was created.
59
+
60
+ certified : Optional[bool]
61
+ A Boolean value that indicates whether the data source is certified.
62
+
63
+ certification_note : Optional[str]
64
+ The optional note that describes the certified data source.
65
+
66
+ datasource_type : Optional[str]
67
+ The type of data source, for example, sqlserver or excel-direct.
68
+
69
+ description : Optional[str]
70
+ The description for the data source.
71
+
72
+ encrypt_extracts : Optional[bool]
73
+ A Boolean value to determine if a datasource should be encrypted or not.
74
+ See Extract and Encryption Methods for more information.
75
+
76
+ favorites_total : Optional[int]
77
+ The number of users who have marked the data source as a favorite.
78
+
79
+ has_alert : Optional[bool]
80
+ A Boolean value that indicates whether the data source has an alert.
81
+
82
+ has_extracts : Optional[bool]
83
+ A Boolean value that indicates whether the datasource has extracts.
84
+
85
+ id : Optional[str]
86
+ The identifier for the data source. You need this value to query a
87
+ specific data source or to delete a data source with the get_by_id and
88
+ delete methods.
89
+
90
+ is_published : Optional[bool]
91
+ A Boolean value that indicates whether the data source is published.
92
+
93
+ name : Optional[str]
94
+ The name of the data source. If not specified, the name of the published
95
+ data source file is used.
96
+
97
+ owner: Optional[UserItem]
98
+ The owner of the data source.
99
+
100
+ owner_id : Optional[str]
101
+ The identifier of the owner of the data source.
102
+
103
+ project : Optional[ProjectItem]
104
+ The project that the data source belongs to.
105
+
106
+ project_id : Optional[str]
107
+ The identifier of the project associated with the data source. You must
108
+ provide this identifier when you create an instance of a DatasourceItem.
109
+
110
+ project_name : Optional[str]
111
+ The name of the project associated with the data source.
112
+
113
+ server_name : Optional[str]
114
+ The name of the server where the data source is published.
115
+
116
+ tags : Optional[set[str]]
117
+ The tags (list of strings) that have been added to the data source.
118
+
119
+ updated_at : Optional[datetime.datetime]
120
+ The date and time when the data source was last updated.
121
+
122
+ use_remote_query_agent : Optional[bool]
123
+ A Boolean value that indicates whether to allow or disallow your Tableau
124
+ Cloud site to use Tableau Bridge clients. Bridge allows you to maintain
125
+ data sources with live connections to supported on-premises data
126
+ sources. See Configure and Manage the Bridge Client Pool for more
127
+ information.
128
+
129
+ webpage_url : Optional[str]
130
+ The url of the datasource as displayed in browsers.
131
+ """
132
+
22
133
  class AskDataEnablement:
23
134
  Enabled = "Enabled"
24
135
  Disabled = "Disabled"
@@ -33,29 +144,36 @@ class DatasourceItem:
33
144
  )
34
145
 
35
146
  def __init__(self, project_id: Optional[str] = None, name: Optional[str] = None) -> None:
36
- self._ask_data_enablement = None
37
- self._certified = None
38
- self._certification_note = None
39
- self._connections = None
147
+ self._ask_data_enablement: Optional[str] = None
148
+ self._certified: Optional[bool] = None
149
+ self._certification_note: Optional[str] = None
150
+ self._connections: Optional[list[ConnectionItem]] = None
40
151
  self._content_url: Optional[str] = None
41
- self._created_at = None
42
- self._datasource_type = None
43
- self._description = None
44
- self._encrypt_extracts = None
45
- self._has_extracts = None
152
+ self._created_at: Optional[datetime.datetime] = None
153
+ self._datasource_type: Optional[str] = None
154
+ self._description: Optional[str] = None
155
+ self._encrypt_extracts: Optional[bool] = None
156
+ self._has_extracts: Optional[bool] = None
46
157
  self._id: Optional[str] = None
47
158
  self._initial_tags: set = set()
48
159
  self._project_name: Optional[str] = None
49
160
  self._revisions = None
50
161
  self._size: Optional[int] = None
51
- self._updated_at = None
52
- self._use_remote_query_agent = None
53
- self._webpage_url = None
54
- self.description = None
55
- self.name = name
162
+ self._updated_at: Optional[datetime.datetime] = None
163
+ self._use_remote_query_agent: Optional[bool] = None
164
+ self._webpage_url: Optional[str] = None
165
+ self.description: Optional[str] = None
166
+ self.name: Optional[str] = name
56
167
  self.owner_id: Optional[str] = None
57
- self.project_id = project_id
168
+ self.project_id: Optional[str] = project_id
58
169
  self.tags: set[str] = set()
170
+ self._connected_workbooks_count: Optional[int] = None
171
+ self._favorites_total: Optional[int] = None
172
+ self._has_alert: Optional[bool] = None
173
+ self._is_published: Optional[bool] = None
174
+ self._server_name: Optional[str] = None
175
+ self._project: Optional[ProjectItem] = None
176
+ self._owner: Optional[UserItem] = None
59
177
 
60
178
  self._permissions = None
61
179
  self._data_quality_warnings = None
@@ -63,16 +181,16 @@ class DatasourceItem:
63
181
  return None
64
182
 
65
183
  @property
66
- def ask_data_enablement(self) -> Optional[AskDataEnablement]:
184
+ def ask_data_enablement(self) -> Optional[str]:
67
185
  return self._ask_data_enablement
68
186
 
69
187
  @ask_data_enablement.setter
70
188
  @property_is_enum(AskDataEnablement)
71
- def ask_data_enablement(self, value: Optional[AskDataEnablement]):
189
+ def ask_data_enablement(self, value: Optional[str]):
72
190
  self._ask_data_enablement = value
73
191
 
74
192
  @property
75
- def connections(self) -> Optional[list[ConnectionItem]]:
193
+ def connections(self):
76
194
  if self._connections is None:
77
195
  error = "Datasource item must be populated with connections first."
78
196
  raise UnpopulatedPropertyError(error)
@@ -112,7 +230,7 @@ class DatasourceItem:
112
230
  self._certification_note = value
113
231
 
114
232
  @property
115
- def encrypt_extracts(self):
233
+ def encrypt_extracts(self) -> Optional[bool]:
116
234
  return self._encrypt_extracts
117
235
 
118
236
  @encrypt_extracts.setter
@@ -156,7 +274,7 @@ class DatasourceItem:
156
274
  return self._description
157
275
 
158
276
  @description.setter
159
- def description(self, value: str):
277
+ def description(self, value: Optional[str]):
160
278
  self._description = value
161
279
 
162
280
  @property
@@ -187,14 +305,42 @@ class DatasourceItem:
187
305
  def size(self) -> Optional[int]:
188
306
  return self._size
189
307
 
190
- def _set_connections(self, connections):
308
+ @property
309
+ def connected_workbooks_count(self) -> Optional[int]:
310
+ return self._connected_workbooks_count
311
+
312
+ @property
313
+ def favorites_total(self) -> Optional[int]:
314
+ return self._favorites_total
315
+
316
+ @property
317
+ def has_alert(self) -> Optional[bool]:
318
+ return self._has_alert
319
+
320
+ @property
321
+ def is_published(self) -> Optional[bool]:
322
+ return self._is_published
323
+
324
+ @property
325
+ def server_name(self) -> Optional[str]:
326
+ return self._server_name
327
+
328
+ @property
329
+ def project(self) -> Optional[ProjectItem]:
330
+ return self._project
331
+
332
+ @property
333
+ def owner(self) -> Optional[UserItem]:
334
+ return self._owner
335
+
336
+ def _set_connections(self, connections) -> None:
191
337
  self._connections = connections
192
338
 
193
339
  def _set_permissions(self, permissions):
194
340
  self._permissions = permissions
195
341
 
196
- def _set_data_quality_warnings(self, dqws):
197
- self._data_quality_warnings = dqws
342
+ def _set_data_quality_warnings(self, dqw):
343
+ self._data_quality_warnings = dqw
198
344
 
199
345
  def _set_revisions(self, revisions):
200
346
  self._revisions = revisions
@@ -223,6 +369,13 @@ class DatasourceItem:
223
369
  use_remote_query_agent,
224
370
  webpage_url,
225
371
  size,
372
+ connected_workbooks_count,
373
+ favorites_total,
374
+ has_alert,
375
+ is_published,
376
+ server_name,
377
+ project,
378
+ owner,
226
379
  ) = self._parse_element(datasource_xml, ns)
227
380
  self._set_values(
228
381
  ask_data_enablement,
@@ -244,6 +397,13 @@ class DatasourceItem:
244
397
  use_remote_query_agent,
245
398
  webpage_url,
246
399
  size,
400
+ connected_workbooks_count,
401
+ favorites_total,
402
+ has_alert,
403
+ is_published,
404
+ server_name,
405
+ project,
406
+ owner,
247
407
  )
248
408
  return self
249
409
 
@@ -268,6 +428,13 @@ class DatasourceItem:
268
428
  use_remote_query_agent,
269
429
  webpage_url,
270
430
  size,
431
+ connected_workbooks_count,
432
+ favorites_total,
433
+ has_alert,
434
+ is_published,
435
+ server_name,
436
+ project,
437
+ owner,
271
438
  ):
272
439
  if ask_data_enablement is not None:
273
440
  self._ask_data_enablement = ask_data_enablement
@@ -307,6 +474,20 @@ class DatasourceItem:
307
474
  self._webpage_url = webpage_url
308
475
  if size is not None:
309
476
  self._size = int(size)
477
+ if connected_workbooks_count is not None:
478
+ self._connected_workbooks_count = connected_workbooks_count
479
+ if favorites_total is not None:
480
+ self._favorites_total = favorites_total
481
+ if has_alert is not None:
482
+ self._has_alert = has_alert
483
+ if is_published is not None:
484
+ self._is_published = is_published
485
+ if server_name is not None:
486
+ self._server_name = server_name
487
+ if project is not None:
488
+ self._project = project
489
+ if owner is not None:
490
+ self._owner = owner
310
491
 
311
492
  @classmethod
312
493
  def from_response(cls, resp: str, ns: dict) -> list["DatasourceItem"]:
@@ -341,6 +522,11 @@ class DatasourceItem:
341
522
  use_remote_query_agent = datasource_xml.get("useRemoteQueryAgent", None)
342
523
  webpage_url = datasource_xml.get("webpageUrl", None)
343
524
  size = datasource_xml.get("size", None)
525
+ connected_workbooks_count = nullable_str_to_int(datasource_xml.get("connectedWorkbooksCount", None))
526
+ favorites_total = nullable_str_to_int(datasource_xml.get("favoritesTotal", None))
527
+ has_alert = nullable_str_to_bool(datasource_xml.get("hasAlert", None))
528
+ is_published = nullable_str_to_bool(datasource_xml.get("isPublished", None))
529
+ server_name = datasource_xml.get("serverName", None)
344
530
 
345
531
  tags = None
346
532
  tags_elem = datasource_xml.find(".//t:tags", namespaces=ns)
@@ -351,12 +537,14 @@ class DatasourceItem:
351
537
  project_name = None
352
538
  project_elem = datasource_xml.find(".//t:project", namespaces=ns)
353
539
  if project_elem is not None:
540
+ project = ProjectItem.from_xml(project_elem, ns)
354
541
  project_id = project_elem.get("id", None)
355
542
  project_name = project_elem.get("name", None)
356
543
 
357
544
  owner_id = None
358
545
  owner_elem = datasource_xml.find(".//t:owner", namespaces=ns)
359
546
  if owner_elem is not None:
547
+ owner = UserItem.from_xml(owner_elem, ns)
360
548
  owner_id = owner_elem.get("id", None)
361
549
 
362
550
  ask_data_enablement = None
@@ -384,4 +572,11 @@ class DatasourceItem:
384
572
  use_remote_query_agent,
385
573
  webpage_url,
386
574
  size,
575
+ connected_workbooks_count,
576
+ favorites_total,
577
+ has_alert,
578
+ is_published,
579
+ server_name,
580
+ project,
581
+ owner,
387
582
  )
@@ -0,0 +1,82 @@
1
+ from typing import Optional, List
2
+ from defusedxml.ElementTree import fromstring
3
+ import xml.etree.ElementTree as ET
4
+
5
+
6
+ class ExtractItem:
7
+ """
8
+ An extract refresh task item.
9
+
10
+ Attributes
11
+ ----------
12
+ id : str
13
+ The ID of the extract refresh task
14
+ priority : int
15
+ The priority of the task
16
+ type : str
17
+ The type of extract refresh (incremental or full)
18
+ workbook_id : str, optional
19
+ The ID of the workbook if this is a workbook extract
20
+ datasource_id : str, optional
21
+ The ID of the datasource if this is a datasource extract
22
+ """
23
+
24
+ def __init__(
25
+ self, priority: int, refresh_type: str, workbook_id: Optional[str] = None, datasource_id: Optional[str] = None
26
+ ):
27
+ self._id: Optional[str] = None
28
+ self._priority = priority
29
+ self._type = refresh_type
30
+ self._workbook_id = workbook_id
31
+ self._datasource_id = datasource_id
32
+
33
+ @property
34
+ def id(self) -> Optional[str]:
35
+ return self._id
36
+
37
+ @property
38
+ def priority(self) -> int:
39
+ return self._priority
40
+
41
+ @property
42
+ def type(self) -> str:
43
+ return self._type
44
+
45
+ @property
46
+ def workbook_id(self) -> Optional[str]:
47
+ return self._workbook_id
48
+
49
+ @property
50
+ def datasource_id(self) -> Optional[str]:
51
+ return self._datasource_id
52
+
53
+ @classmethod
54
+ def from_response(cls, resp: str, ns: dict) -> List["ExtractItem"]:
55
+ """Create ExtractItem objects from XML response."""
56
+ parsed_response = fromstring(resp)
57
+ return cls.from_xml_element(parsed_response, ns)
58
+
59
+ @classmethod
60
+ def from_xml_element(cls, parsed_response: ET.Element, ns: dict) -> List["ExtractItem"]:
61
+ """Create ExtractItem objects from XML element."""
62
+ all_extract_items = []
63
+ all_extract_xml = parsed_response.findall(".//t:extract", namespaces=ns)
64
+
65
+ for extract_xml in all_extract_xml:
66
+ extract_id = extract_xml.get("id", None)
67
+ priority = int(extract_xml.get("priority", 0))
68
+ refresh_type = extract_xml.get("type", "")
69
+
70
+ # Check for workbook or datasource
71
+ workbook_elem = extract_xml.find(".//t:workbook", namespaces=ns)
72
+ datasource_elem = extract_xml.find(".//t:datasource", namespaces=ns)
73
+
74
+ workbook_id = workbook_elem.get("id", None) if workbook_elem is not None else None
75
+ datasource_id = datasource_elem.get("id", None) if datasource_elem is not None else None
76
+
77
+ extract_item = cls(priority, refresh_type, workbook_id, datasource_id)
78
+ extract_item._id = extract_id
79
+
80
+ all_extract_items.append(extract_item)
81
+
82
+ return all_extract_items
@@ -146,8 +146,8 @@ class FlowItem:
146
146
  def _set_permissions(self, permissions):
147
147
  self._permissions = permissions
148
148
 
149
- def _set_data_quality_warnings(self, dqws):
150
- self._data_quality_warnings = dqws
149
+ def _set_data_quality_warnings(self, dqw):
150
+ self._data_quality_warnings = dqw
151
151
 
152
152
  def _parse_common_elements(self, flow_xml, ns):
153
153
  if not isinstance(flow_xml, ET.Element):
@@ -44,6 +44,11 @@ class GroupItem:
44
44
  login to a site. When the mode is onSync, a license is granted for group
45
45
  members each time the domain is synced.
46
46
 
47
+ Attributes
48
+ ----------
49
+ user_count: Optional[int]
50
+ The number of users in the group.
51
+
47
52
  Examples
48
53
  --------
49
54
  >>> # Create a new group item
@@ -65,6 +70,7 @@ class GroupItem:
65
70
  self._users: Optional[Callable[..., "Pager"]] = None
66
71
  self.name: Optional[str] = name
67
72
  self.domain_name: Optional[str] = domain_name
73
+ self._user_count: Optional[int] = None
68
74
 
69
75
  def __repr__(self):
70
76
  return f"{self.__class__.__name__}({self.__dict__!r})"
@@ -118,6 +124,10 @@ class GroupItem:
118
124
  def _set_users(self, users: Callable[..., "Pager"]) -> None:
119
125
  self._users = users
120
126
 
127
+ @property
128
+ def user_count(self) -> Optional[int]:
129
+ return self._user_count
130
+
121
131
  @classmethod
122
132
  def from_response(cls, resp, ns) -> list["GroupItem"]:
123
133
  all_group_items = list()
@@ -127,6 +137,7 @@ class GroupItem:
127
137
  name = group_xml.get("name", None)
128
138
  group_item = cls(name)
129
139
  group_item._id = group_xml.get("id", None)
140
+ group_item._user_count = int(count) if (count := group_xml.get("userCount", None)) else None
130
141
 
131
142
  # Domain name is returned in a domain element for some calls
132
143
  domain_elem = group_xml.find(".//t:domain", namespaces=ns)