castor-extractor 0.16.5__tar.gz → 0.16.6__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.

Potentially problematic release.


This version of castor-extractor might be problematic. Click here for more details.

Files changed (371) hide show
  1. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/CHANGELOG.md +4 -0
  2. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/PKG-INFO +1 -1
  3. castor_extractor-0.16.6/castor_extractor/visualization/tableau_revamp/__init__.py +3 -0
  4. castor_extractor-0.16.6/castor_extractor/visualization/tableau_revamp/assets.py +18 -0
  5. castor_extractor-0.16.6/castor_extractor/visualization/tableau_revamp/client/__init__.py +2 -0
  6. castor_extractor-0.16.6/castor_extractor/visualization/tableau_revamp/client/client.py +234 -0
  7. castor_extractor-0.16.6/castor_extractor/visualization/tableau_revamp/client/credentials.py +104 -0
  8. castor_extractor-0.16.6/castor_extractor/visualization/tableau_revamp/client/errors.py +3 -0
  9. castor_extractor-0.16.6/castor_extractor/visualization/tableau_revamp/client/gql_queries.py +131 -0
  10. castor_extractor-0.16.6/castor_extractor/visualization/tableau_revamp/client/tsc_fields.py +30 -0
  11. castor_extractor-0.16.6/castor_extractor/visualization/tableau_revamp/constants.py +5 -0
  12. castor_extractor-0.16.6/castor_extractor/visualization/tableau_revamp/extract.py +53 -0
  13. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/pyproject.toml +1 -1
  14. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/Dockerfile +0 -0
  15. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/LICENCE +0 -0
  16. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/README.md +0 -0
  17. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/__init__.py +0 -0
  18. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/__init__.py +0 -0
  19. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_bigquery.py +0 -0
  20. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_databricks.py +0 -0
  21. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_domo.py +0 -0
  22. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_looker.py +0 -0
  23. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_metabase_api.py +0 -0
  24. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_metabase_db.py +0 -0
  25. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_mode.py +0 -0
  26. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_mysql.py +0 -0
  27. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_postgres.py +0 -0
  28. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_powerbi.py +0 -0
  29. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_qlik.py +0 -0
  30. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_redshift.py +0 -0
  31. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_salesforce.py +0 -0
  32. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_salesforce_reporting.py +0 -0
  33. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_sigma.py +0 -0
  34. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_snowflake.py +0 -0
  35. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_sqlserver.py +0 -0
  36. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/extract_tableau.py +0 -0
  37. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/file_check.py +0 -0
  38. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/commands/upload.py +0 -0
  39. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/file_checker/__init__.py +0 -0
  40. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/file_checker/column.py +0 -0
  41. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/file_checker/column_test.py +0 -0
  42. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/file_checker/constants.py +0 -0
  43. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/file_checker/enums.py +0 -0
  44. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/file_checker/file.py +0 -0
  45. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/file_checker/file_test.py +0 -0
  46. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/file_checker/file_test_users.csv +0 -0
  47. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/file_checker/file_test_users_valid.csv +0 -0
  48. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/file_checker/templates/__init__.py +0 -0
  49. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/file_checker/templates/generic_warehouse.py +0 -0
  50. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/logger.py +0 -0
  51. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/types.py +0 -0
  52. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/uploader/__init__.py +0 -0
  53. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/uploader/constant.py +0 -0
  54. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/uploader/env.py +0 -0
  55. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/uploader/env_test.py +0 -0
  56. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/uploader/upload.py +0 -0
  57. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/uploader/upload_test.py +0 -0
  58. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/uploader/utils.py +0 -0
  59. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/__init__.py +0 -0
  60. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/client/__init__.py +0 -0
  61. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/client/abstract.py +0 -0
  62. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/client/api.py +0 -0
  63. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/client/api_test.py +0 -0
  64. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/client/postgres.py +0 -0
  65. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/client/query.py +0 -0
  66. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/client/uri.py +0 -0
  67. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/client/uri_test.py +0 -0
  68. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/collection.py +0 -0
  69. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/constants.py +0 -0
  70. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/dbt/__init__.py +0 -0
  71. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/dbt/assets.py +0 -0
  72. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/dbt/client.py +0 -0
  73. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/dbt/client_test.py +0 -0
  74. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/dbt/credentials.py +0 -0
  75. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/deprecate.py +0 -0
  76. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/env.py +0 -0
  77. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/files.py +0 -0
  78. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/files_test.py +0 -0
  79. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/formatter.py +0 -0
  80. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/formatter_test.csv +0 -0
  81. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/formatter_test.json +0 -0
  82. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/formatter_test.py +0 -0
  83. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/json_stream_write.py +0 -0
  84. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/load.py +0 -0
  85. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/object.py +0 -0
  86. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/object_test.py +0 -0
  87. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/pager/__init__.py +0 -0
  88. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/pager/pager.py +0 -0
  89. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/pager/pager_on_id.py +0 -0
  90. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/pager/pager_on_id_test.py +0 -0
  91. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/pager/pager_on_token.py +0 -0
  92. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/pager/pager_on_token_test.py +0 -0
  93. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/pager/pager_test.py +0 -0
  94. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/retry.py +0 -0
  95. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/retry_test.py +0 -0
  96. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/safe.py +0 -0
  97. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/safe_test.py +0 -0
  98. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/salesforce/__init__.py +0 -0
  99. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/salesforce/client.py +0 -0
  100. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/salesforce/client_test.py +0 -0
  101. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/salesforce/constants.py +0 -0
  102. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/salesforce/credentials.py +0 -0
  103. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/salesforce/credentials_test.py +0 -0
  104. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/store.py +0 -0
  105. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/string.py +0 -0
  106. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/string_test.py +0 -0
  107. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/time.py +0 -0
  108. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/time_test.py +0 -0
  109. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/type.py +0 -0
  110. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/validation.py +0 -0
  111. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/validation_test.py +0 -0
  112. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/utils/write.py +0 -0
  113. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/__init__.py +0 -0
  114. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/domo/__init__.py +0 -0
  115. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/domo/assets.py +0 -0
  116. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/domo/client/__init__.py +0 -0
  117. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/domo/client/client.py +0 -0
  118. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/domo/client/client_test.py +0 -0
  119. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/domo/client/credentials.py +0 -0
  120. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/domo/client/endpoints.py +0 -0
  121. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/domo/client/pagination.py +0 -0
  122. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/domo/client/pagination_test.py +0 -0
  123. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/domo/constants.py +0 -0
  124. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/domo/extract.py +0 -0
  125. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/__init__.py +0 -0
  126. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/api/__init__.py +0 -0
  127. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/api/client.py +0 -0
  128. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/api/client_test.py +0 -0
  129. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/api/constants.py +0 -0
  130. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/api/sdk.py +0 -0
  131. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/api/sdk_test.py +0 -0
  132. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/api/utils.py +0 -0
  133. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/assets.py +0 -0
  134. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/constant.py +0 -0
  135. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/env.py +0 -0
  136. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/extract.py +0 -0
  137. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/fields.py +0 -0
  138. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/fields_test.py +0 -0
  139. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/multithreading.py +0 -0
  140. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/looker/parameters.py +0 -0
  141. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/__init__.py +0 -0
  142. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/assets.py +0 -0
  143. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/__init__.py +0 -0
  144. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/api/__init__.py +0 -0
  145. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/api/client.py +0 -0
  146. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/api/client_test.py +0 -0
  147. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/api/credentials.py +0 -0
  148. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/db/__init__.py +0 -0
  149. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/db/client.py +0 -0
  150. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/db/credentials.py +0 -0
  151. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/db/queries/.sqlfluff +0 -0
  152. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/db/queries/base_url.sql +0 -0
  153. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/db/queries/card.sql +0 -0
  154. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/db/queries/collection.sql +0 -0
  155. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/db/queries/dashboard.sql +0 -0
  156. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/db/queries/dashboard_cards.sql +0 -0
  157. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/db/queries/database.sql +0 -0
  158. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/db/queries/table.sql +0 -0
  159. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/db/queries/user.sql +0 -0
  160. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/decryption.py +0 -0
  161. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/decryption_test.py +0 -0
  162. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/client/shared.py +0 -0
  163. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/errors.py +0 -0
  164. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/extract.py +0 -0
  165. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/metabase/types.py +0 -0
  166. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/mode/__init__.py +0 -0
  167. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/mode/assets.py +0 -0
  168. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/mode/client/__init__.py +0 -0
  169. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/mode/client/client.py +0 -0
  170. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/mode/client/client_test.json +0 -0
  171. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/mode/client/client_test.py +0 -0
  172. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/mode/client/constants.py +0 -0
  173. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/mode/client/credentials.py +0 -0
  174. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/mode/errors.py +0 -0
  175. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/mode/extract.py +0 -0
  176. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/powerbi/__init__.py +0 -0
  177. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/powerbi/assets.py +0 -0
  178. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/powerbi/client/__init__.py +0 -0
  179. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/powerbi/client/constants.py +0 -0
  180. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/powerbi/client/credentials.py +0 -0
  181. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/powerbi/client/credentials_test.py +0 -0
  182. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/powerbi/client/rest.py +0 -0
  183. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/powerbi/client/rest_test.py +0 -0
  184. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/powerbi/client/utils.py +0 -0
  185. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/powerbi/client/utils_test.py +0 -0
  186. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/powerbi/extract.py +0 -0
  187. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/__init__.py +0 -0
  188. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/assets.py +0 -0
  189. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/client/__init__.py +0 -0
  190. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/client/constants.py +0 -0
  191. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/client/engine/__init__.py +0 -0
  192. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/client/engine/client.py +0 -0
  193. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/client/engine/constants.py +0 -0
  194. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/client/engine/error.py +0 -0
  195. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/client/engine/error_test.py +0 -0
  196. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/client/engine/json_rpc.py +0 -0
  197. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/client/engine/json_rpc_test.py +0 -0
  198. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/client/engine/websocket.py +0 -0
  199. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/client/master.py +0 -0
  200. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/client/rest.py +0 -0
  201. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/client/rest_test.py +0 -0
  202. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/constants.py +0 -0
  203. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/qlik/extract.py +0 -0
  204. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/salesforce_reporting/__init__.py +0 -0
  205. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/salesforce_reporting/assets.py +0 -0
  206. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/salesforce_reporting/client/__init__.py +0 -0
  207. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/salesforce_reporting/client/rest.py +0 -0
  208. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/salesforce_reporting/client/soql.py +0 -0
  209. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/salesforce_reporting/extract.py +0 -0
  210. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/sigma/__init__.py +0 -0
  211. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/sigma/assets.py +0 -0
  212. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/sigma/client/__init__.py +0 -0
  213. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/sigma/client/client.py +0 -0
  214. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/sigma/client/client_test.py +0 -0
  215. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/sigma/client/credentials.py +0 -0
  216. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/sigma/client/endpoints.py +0 -0
  217. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/sigma/client/pagination.py +0 -0
  218. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/sigma/constants.py +0 -0
  219. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/sigma/extract.py +0 -0
  220. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/__init__.py +0 -0
  221. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/assets.py +0 -0
  222. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/client/__init__.py +0 -0
  223. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/client/client.py +0 -0
  224. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/client/client_utils.py +0 -0
  225. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/client/credentials.py +0 -0
  226. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/client/project.py +0 -0
  227. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/client/safe_mode.py +0 -0
  228. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/constants.py +0 -0
  229. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/errors.py +0 -0
  230. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/extract.py +0 -0
  231. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/gql_fields.py +0 -0
  232. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/__init__.py +0 -0
  233. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/__init__.py +0 -0
  234. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/assets/graphql/metadata/metadata_1_get.json +0 -0
  235. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/assets/graphql/metadata/metadata_2_get.json +0 -0
  236. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/auth.xml +0 -0
  237. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/project_get.xml +0 -0
  238. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/user_get.xml +0 -0
  239. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/view_get_usage.xml +0 -0
  240. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/workbook_get.xml +0 -0
  241. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/graphql/__init__.py +0 -0
  242. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/graphql/paginated_object_test.py +0 -0
  243. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/rest_api/__init__.py +0 -0
  244. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/rest_api/auth_test.py +0 -0
  245. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/rest_api/credentials_test.py +0 -0
  246. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/rest_api/projects_test.py +0 -0
  247. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/rest_api/usages_test.py +0 -0
  248. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/rest_api/users_test.py +0 -0
  249. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/rest_api/workbooks_test.py +0 -0
  250. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/utils/__init__.py +0 -0
  251. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tests/unit/utils/env_key.py +0 -0
  252. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/tsc_fields.py +0 -0
  253. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/types.py +0 -0
  254. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/visualization/tableau/usage.py +0 -0
  255. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/__init__.py +0 -0
  256. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/abstract/__init__.py +0 -0
  257. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/abstract/asset.py +0 -0
  258. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/abstract/asset_test.py +0 -0
  259. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/abstract/extract.py +0 -0
  260. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/abstract/query.py +0 -0
  261. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/abstract/time_filter.py +0 -0
  262. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/abstract/time_filter_test.py +0 -0
  263. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/__init__.py +0 -0
  264. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/client.py +0 -0
  265. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/client_test.py +0 -0
  266. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/credentials.py +0 -0
  267. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/extract.py +0 -0
  268. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/queries/.sqlfluff +0 -0
  269. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/queries/column.sql +0 -0
  270. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/queries/cte/sharded.sql +0 -0
  271. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/queries/database.sql +0 -0
  272. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/queries/query.sql +0 -0
  273. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/queries/schema.sql +0 -0
  274. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/queries/table.sql +0 -0
  275. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/queries/table_with_tags.sql +0 -0
  276. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/queries/user.sql +0 -0
  277. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/queries/view_ddl.sql +0 -0
  278. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/query.py +0 -0
  279. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/bigquery/types.py +0 -0
  280. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/databricks/__init__.py +0 -0
  281. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/databricks/client.py +0 -0
  282. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/databricks/client_test.py +0 -0
  283. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/databricks/credentials.py +0 -0
  284. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/databricks/extract.py +0 -0
  285. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/databricks/format.py +0 -0
  286. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/databricks/format_test.py +0 -0
  287. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/databricks/types.py +0 -0
  288. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/mysql/__init__.py +0 -0
  289. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/mysql/client.py +0 -0
  290. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/mysql/client_test.py +0 -0
  291. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/mysql/extract.py +0 -0
  292. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/mysql/queries/.sqlfluff +0 -0
  293. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/mysql/queries/column.sql +0 -0
  294. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/mysql/queries/database.sql +0 -0
  295. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/mysql/queries/query.sql +0 -0
  296. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/mysql/queries/schema.sql +0 -0
  297. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/mysql/queries/table.sql +0 -0
  298. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/mysql/queries/user.sql +0 -0
  299. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/mysql/queries/view_ddl.sql +0 -0
  300. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/mysql/query.py +0 -0
  301. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/postgres/__init__.py +0 -0
  302. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/postgres/extract.py +0 -0
  303. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/postgres/queries/.sqlfluff +0 -0
  304. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/postgres/queries/column.sql +0 -0
  305. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/postgres/queries/database.sql +0 -0
  306. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/postgres/queries/group.sql +0 -0
  307. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/postgres/queries/schema.sql +0 -0
  308. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/postgres/queries/table.sql +0 -0
  309. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/postgres/queries/user.sql +0 -0
  310. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/postgres/query.py +0 -0
  311. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/__init__.py +0 -0
  312. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/client.py +0 -0
  313. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/client_test.py +0 -0
  314. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/extract.py +0 -0
  315. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/queries/.sqlfluff +0 -0
  316. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/queries/column.sql +0 -0
  317. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/queries/database.sql +0 -0
  318. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/queries/group.sql +0 -0
  319. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/queries/query.sql +0 -0
  320. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/queries/schema.sql +0 -0
  321. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/queries/table.sql +0 -0
  322. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/queries/table_freshness.sql +0 -0
  323. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/queries/user.sql +0 -0
  324. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/queries/view_ddl.sql +0 -0
  325. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/redshift/query.py +0 -0
  326. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/salesforce/__init__.py +0 -0
  327. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/salesforce/client.py +0 -0
  328. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/salesforce/constants.py +0 -0
  329. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/salesforce/extract.py +0 -0
  330. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/salesforce/format.py +0 -0
  331. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/salesforce/format_test.py +0 -0
  332. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/salesforce/soql.py +0 -0
  333. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/__init__.py +0 -0
  334. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/client.py +0 -0
  335. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/client_test.py +0 -0
  336. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/credentials.py +0 -0
  337. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/credentials_test.py +0 -0
  338. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/extract.py +0 -0
  339. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/queries/.sqlfluff +0 -0
  340. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/queries/column.sql +0 -0
  341. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/queries/column_lineage.sql +0 -0
  342. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/queries/database.sql +0 -0
  343. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/queries/grant_to_role.sql +0 -0
  344. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/queries/grant_to_user.sql +0 -0
  345. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/queries/query.sql +0 -0
  346. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/queries/role.sql +0 -0
  347. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/queries/schema.sql +0 -0
  348. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/queries/table.sql +0 -0
  349. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/queries/user.sql +0 -0
  350. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/queries/view_ddl.sql +0 -0
  351. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/snowflake/query.py +0 -0
  352. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/sqlserver/__init__.py +0 -0
  353. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/sqlserver/client.py +0 -0
  354. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/sqlserver/extract.py +0 -0
  355. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/sqlserver/queries/.sqlfluff +0 -0
  356. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/sqlserver/queries/column.sql +0 -0
  357. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/sqlserver/queries/database.sql +0 -0
  358. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/sqlserver/queries/schema.sql +0 -0
  359. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/sqlserver/queries/table.sql +0 -0
  360. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/sqlserver/queries/user.sql +0 -0
  361. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/sqlserver/query.py +0 -0
  362. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/synapse/__init__.py +0 -0
  363. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/synapse/extract.py +0 -0
  364. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/synapse/queries/.sqlfluff +0 -0
  365. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/synapse/queries/column.sql +0 -0
  366. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/synapse/queries/database.sql +0 -0
  367. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/synapse/queries/query.sql +0 -0
  368. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/synapse/queries/schema.sql +0 -0
  369. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/synapse/queries/table.sql +0 -0
  370. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/synapse/queries/user.sql +0 -0
  371. {castor_extractor-0.16.5 → castor_extractor-0.16.6}/castor_extractor/warehouse/synapse/queries/view_ddl.sql +0 -0
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.16.6 - 2024-05-14
4
+
5
+ * Introducing the revamped connector for Tableau
6
+
3
7
  ## 0.16.5 - 2024-04-25
4
8
 
5
9
  * Salesforce: remove DeploymentStatus from EntityDefinition query
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: castor-extractor
3
- Version: 0.16.5
3
+ Version: 0.16.6
4
4
  Summary: Extract your metadata assets.
5
5
  Home-page: https://www.castordoc.com/
6
6
  License: EULA
@@ -0,0 +1,3 @@
1
+ from .assets import TableauRevampAsset
2
+ from .client import TableauRevampClient, TableauRevampCredentials
3
+ from .extract import extract_all, iterate_all_data
@@ -0,0 +1,18 @@
1
+ from ...types import ExternalAsset
2
+
3
+
4
+ class TableauRevampAsset(ExternalAsset):
5
+ """
6
+ Tableau assets
7
+ """
8
+
9
+ COLUMN = "columns"
10
+ DASHBOARD = "dashboards"
11
+ DATASOURCE = "datasources"
12
+ FIELD = "fields"
13
+ PROJECT = "projects"
14
+ SHEET = "sheets"
15
+ TABLE = "tables"
16
+ USAGE = "usage"
17
+ USER = "users"
18
+ WORKBOOK = "workbooks"
@@ -0,0 +1,2 @@
1
+ from .client import TableauRevampClient
2
+ from .credentials import TableauRevampCredentials
@@ -0,0 +1,234 @@
1
+ import logging
2
+ from typing import Dict, Iterator, List, Optional
3
+
4
+ import tableauserverclient as TSC # type: ignore
5
+
6
+ from ....utils import SerializedAsset
7
+ from ..assets import TableauRevampAsset
8
+ from ..constants import (
9
+ DEFAULT_PAGE_SIZE,
10
+ DEFAULT_TIMEOUT_SECONDS,
11
+ TABLEAU_SERVER_VERSION,
12
+ )
13
+ from .credentials import TableauRevampCredentials
14
+ from .errors import TableauApiError
15
+ from .gql_queries import GQL_QUERIES, QUERY_TEMPLATE
16
+ from .tsc_fields import TSC_FIELDS
17
+
18
+ logger = logging.getLogger(__name__)
19
+
20
+ # these assets must be extracted via TableauServerClient
21
+ _TSC_ASSETS = (
22
+ # only users who published content can be extracted from MetadataAPI
23
+ TableauRevampAsset.USER,
24
+ # projects are not available in Metadata API
25
+ TableauRevampAsset.PROJECT,
26
+ # view count are not available in Metadata API
27
+ TableauRevampAsset.USAGE,
28
+ )
29
+
30
+ _CUSTOM_PAGE_SIZE: Dict[TableauRevampAsset, int] = {
31
+ TableauRevampAsset.FIELD: 1000,
32
+ }
33
+
34
+
35
+ def _pick_fields(
36
+ data: SerializedAsset,
37
+ asset: TableauRevampAsset,
38
+ ) -> SerializedAsset:
39
+ fields = TSC_FIELDS[asset]
40
+
41
+ def _pick(row: dict):
42
+ return {field: getattr(row, field) for field in fields}
43
+
44
+ return [_pick(row) for row in data]
45
+
46
+
47
+ def _enrich_with_tsc(
48
+ datasources: SerializedAsset,
49
+ tsc_datasources: SerializedAsset,
50
+ ) -> SerializedAsset:
51
+ """
52
+ Enrich datasources with fields coming from TableauServerClient:
53
+ - project_luid
54
+ - webpage_url
55
+ """
56
+
57
+ mapping = {row["id"]: row for row in tsc_datasources}
58
+
59
+ for datasource in datasources:
60
+ if datasource["__typename"] != "PublishedDatasource":
61
+ # embedded datasources are bound to workbooks => no project
62
+ # embedded datasources cannot be accessed via URL => no webpage_url
63
+ continue
64
+ luid = datasource["luid"]
65
+ tsc_datasource = mapping[luid]
66
+ datasource["projectLuid"] = tsc_datasource["project_id"]
67
+ datasource["webpageUrl"] = tsc_datasource["webpage_url"]
68
+
69
+ return datasources
70
+
71
+
72
+ def gql_query_scroll(
73
+ server,
74
+ query: str,
75
+ resource: str,
76
+ ) -> Iterator[SerializedAsset]:
77
+ """Iterate over GQL query results, handling pagination and cursor"""
78
+
79
+ def _call(cursor: Optional[str]) -> dict:
80
+ # If cursor is defined it must be quoted else use null token
81
+ token = "null" if cursor is None else f'"{cursor}"'
82
+ query_ = query.replace("AFTER_TOKEN_SIGNAL", token)
83
+ answer = server.metadata.query(query_)
84
+ if "errors" in answer:
85
+ raise TableauApiError(answer["errors"])
86
+ return answer["data"][f"{resource}Connection"]
87
+
88
+ cursor = None
89
+ while True:
90
+ payload = _call(cursor)
91
+ yield payload["nodes"]
92
+
93
+ page_info = payload["pageInfo"]
94
+ if page_info["hasNextPage"]:
95
+ cursor = page_info["endCursor"]
96
+ else:
97
+ break
98
+
99
+
100
+ class TableauRevampClient:
101
+ """
102
+ Connect to Tableau's API and extract assets.
103
+
104
+ Relies on TableauServerClient overlay:
105
+ https://tableau.github.io/server-client-python/docs/
106
+ - for connection
107
+ - to extract Users (Metadata
108
+
109
+ Calls the MetadataAPI, using graphQL
110
+ https://help.tableau.com/current/api/metadata_api/en-us/reference/index.html
111
+ """
112
+
113
+ def __init__(
114
+ self,
115
+ credentials: TableauRevampCredentials,
116
+ timeout_sec: int = DEFAULT_TIMEOUT_SECONDS,
117
+ ):
118
+ self._credentials = credentials
119
+ self._server = TSC.Server(self._credentials.server_url)
120
+ options = {"verify": True, "timeout": timeout_sec}
121
+ self._server.add_http_options(options)
122
+ self._server.version = TABLEAU_SERVER_VERSION
123
+ self.errors: List[str] = []
124
+
125
+ @staticmethod
126
+ def name() -> str:
127
+ return "Tableau/API"
128
+
129
+ def _user_password_login(self) -> None:
130
+ """Login into Tableau using user and password"""
131
+ self._server.auth.sign_in(
132
+ TSC.TableauAuth(
133
+ self._credentials.user,
134
+ self._credentials.password,
135
+ site_id=self._credentials.site_id,
136
+ ),
137
+ )
138
+
139
+ def _pat_login(self) -> None:
140
+ """Login into Tableau using personal authentication token"""
141
+ self._server.auth.sign_in(
142
+ TSC.PersonalAccessTokenAuth(
143
+ self._credentials.token_name,
144
+ self._credentials.token,
145
+ site_id=self._credentials.site_id,
146
+ ),
147
+ )
148
+
149
+ def login(self) -> None:
150
+ """
151
+ Depending on the given credentials, logs-in using either:
152
+ - user/password
153
+ - token_name/value (Personal Access Token)
154
+ https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_auth.htm
155
+
156
+ Raises an error if none can be found
157
+ """
158
+
159
+ if self._credentials.user and self._credentials.password:
160
+ logger.info("Logging in using user and password authentication")
161
+ return self._user_password_login()
162
+
163
+ if self._credentials.token_name and self._credentials.token:
164
+ logger.info("Logging in using token authentication")
165
+ return self._pat_login()
166
+
167
+ raise ValueError(
168
+ "Invalid credentials: either user/password or PAT must be provided",
169
+ )
170
+
171
+ def base_url(self) -> str:
172
+ return self._credentials.server_url
173
+
174
+ def _fetch_from_tsc(
175
+ self,
176
+ asset: TableauRevampAsset,
177
+ ) -> SerializedAsset:
178
+
179
+ if asset == TableauRevampAsset.USER:
180
+ data = TSC.Pager(self._server.users)
181
+
182
+ elif asset == TableauRevampAsset.PROJECT:
183
+ data = TSC.Pager(self._server.projects)
184
+
185
+ elif asset == TableauRevampAsset.DATASOURCE:
186
+ data = TSC.Pager(self._server.datasources)
187
+
188
+ elif asset == TableauRevampAsset.USAGE:
189
+ data = TSC.Pager(self._server.views, usage=True)
190
+
191
+ else:
192
+ raise AssertionError(f"Fetching from TSC not supported for {asset}")
193
+
194
+ return _pick_fields(data, asset)
195
+
196
+ def _fetch_from_metadata_api(
197
+ self,
198
+ asset: TableauRevampAsset,
199
+ ) -> SerializedAsset:
200
+ resource, fields = GQL_QUERIES[asset]
201
+ page_size = _CUSTOM_PAGE_SIZE.get(asset) or DEFAULT_PAGE_SIZE
202
+ query = QUERY_TEMPLATE.format(
203
+ resource=resource,
204
+ fields=fields,
205
+ page_size=page_size,
206
+ )
207
+ result_pages = gql_query_scroll(self._server, query, resource)
208
+ return [asset for page in result_pages for asset in page]
209
+
210
+ def _fetch_datasources(self) -> SerializedAsset:
211
+ asset = TableauRevampAsset.DATASOURCE
212
+
213
+ datasources = self._fetch_from_metadata_api(asset)
214
+ datasource_projects = self._fetch_from_tsc(asset)
215
+
216
+ return _enrich_with_tsc(datasources, datasource_projects)
217
+
218
+ def fetch(
219
+ self,
220
+ asset: TableauRevampAsset,
221
+ ) -> SerializedAsset:
222
+ """
223
+ Extract the given Tableau Asset
224
+ """
225
+ if asset == TableauRevampAsset.DATASOURCE:
226
+ # both APIs are required to extract datasources
227
+ return self._fetch_datasources()
228
+
229
+ if asset in _TSC_ASSETS:
230
+ # some assets can only be extracted via TSC
231
+ return self._fetch_from_tsc(asset)
232
+
233
+ # extract most assets via Metadata API
234
+ return self._fetch_from_metadata_api(asset)
@@ -0,0 +1,104 @@
1
+ from enum import Enum
2
+ from typing import Dict, Literal, Optional, overload
3
+
4
+ from ....utils import from_env
5
+
6
+ _AUTH_ERROR_MSG = "Need either user and password or token_name and token"
7
+
8
+ # To specify the default site on Tableau Server, you can use an empty string
9
+ # https://tableau.github.io/server-client-python/docs/api-ref#authentication
10
+ _DEFAULT_SERVER_SITE_ID = ""
11
+
12
+
13
+ class CredentialsKey(Enum):
14
+ """Value enum object for the credentials"""
15
+
16
+ TABLEAU_USER = "user"
17
+ TABLEAU_PASSWORD = "password" # noqa: S105
18
+ TABLEAU_TOKEN_NAME = "token_name" # noqa: S105
19
+ TABLEAU_TOKEN = "token" # noqa: S105
20
+ TABLEAU_SITE_ID = "site_id"
21
+ TABLEAU_SERVER_URL = "server_url"
22
+
23
+
24
+ CREDENTIALS_ENV: Dict[CredentialsKey, str] = {
25
+ CredentialsKey.TABLEAU_USER: "CASTOR_TABLEAU_USER",
26
+ CredentialsKey.TABLEAU_PASSWORD: "CASTOR_TABLEAU_PASSWORD",
27
+ CredentialsKey.TABLEAU_TOKEN_NAME: "CASTOR_TABLEAU_TOKEN_NAME",
28
+ CredentialsKey.TABLEAU_TOKEN: "CASTOR_TABLEAU_TOKEN",
29
+ CredentialsKey.TABLEAU_SITE_ID: "CASTOR_TABLEAU_SITE_ID",
30
+ CredentialsKey.TABLEAU_SERVER_URL: "CASTOR_TABLEAU_SERVER_URL",
31
+ }
32
+
33
+
34
+ @overload
35
+ def get_value(key: CredentialsKey, kwargs: dict) -> Optional[str]: ...
36
+
37
+
38
+ @overload
39
+ def get_value(
40
+ key: CredentialsKey, kwargs: dict, optional: Literal[True]
41
+ ) -> Optional[str]: ...
42
+
43
+
44
+ @overload
45
+ def get_value(
46
+ key: CredentialsKey, kwargs: dict, optional: Literal[False]
47
+ ) -> str: ...
48
+
49
+
50
+ def get_value(
51
+ key: CredentialsKey,
52
+ kwargs: dict,
53
+ optional: bool = True,
54
+ ) -> Optional[str]:
55
+ """
56
+ Returns the value of the given key:
57
+ - from kwargs in priority
58
+ - from ENV otherwise
59
+ Raises an error if not found (unless optional)
60
+ """
61
+
62
+ if key.value in kwargs:
63
+ return kwargs[key.value]
64
+
65
+ env_key = CREDENTIALS_ENV[key]
66
+ return from_env(env_key, optional)
67
+
68
+
69
+ class TableauRevampCredentials:
70
+ """
71
+ Tableau's credentials to connect to REST API
72
+ """
73
+
74
+ def __init__(
75
+ self,
76
+ *,
77
+ server_url: str,
78
+ site_id: Optional[str],
79
+ user: Optional[str],
80
+ password: Optional[str],
81
+ token_name: Optional[str],
82
+ token: Optional[str],
83
+ ):
84
+ self.user = user
85
+ self.site_id = site_id or _DEFAULT_SERVER_SITE_ID
86
+ self.server_url = server_url
87
+ self.password = password
88
+ self.token_name = token_name
89
+ self.token = token
90
+
91
+ @classmethod
92
+ def from_env(cls, kwargs: dict) -> "TableauRevampCredentials":
93
+ return TableauRevampCredentials(
94
+ server_url=get_value(
95
+ CredentialsKey.TABLEAU_SERVER_URL,
96
+ kwargs,
97
+ optional=False,
98
+ ),
99
+ site_id=get_value(CredentialsKey.TABLEAU_SITE_ID, kwargs),
100
+ user=get_value(CredentialsKey.TABLEAU_USER, kwargs),
101
+ password=get_value(CredentialsKey.TABLEAU_PASSWORD, kwargs),
102
+ token_name=get_value(CredentialsKey.TABLEAU_TOKEN_NAME, kwargs),
103
+ token=get_value(CredentialsKey.TABLEAU_TOKEN, kwargs),
104
+ )
@@ -0,0 +1,3 @@
1
+ class TableauApiError(ValueError):
2
+ def __init__(self, error: str):
3
+ super().__init__(f"Tableau API returned the following error: {error}")
@@ -0,0 +1,131 @@
1
+ from typing import Dict, Tuple
2
+
3
+ from ..assets import TableauRevampAsset
4
+
5
+ QUERY_TEMPLATE = """
6
+ {{
7
+ {resource}Connection(first: {page_size}, after: AFTER_TOKEN_SIGNAL) {{
8
+ nodes {{ {fields}
9
+ }}
10
+ pageInfo {{
11
+ hasNextPage
12
+ endCursor
13
+ }}
14
+ totalCount
15
+ }}
16
+ }}
17
+ """
18
+
19
+ _COLUMNS_QUERY = """
20
+ downstreamDashboards { id }
21
+ downstreamFields { id }
22
+ downstreamWorkbooks { id }
23
+ id
24
+ name
25
+ table { id }
26
+ """
27
+
28
+ _DASHBOARDS_QUERY = """
29
+ createdAt
30
+ id
31
+ name
32
+ path
33
+ tags { name }
34
+ updatedAt
35
+ workbook { id }
36
+ """
37
+
38
+ _DATASOURCES_QUERY = """
39
+ __typename
40
+ createdAt
41
+ downstreamDashboards { id }
42
+ downstreamWorkbooks { id }
43
+ id
44
+ name
45
+ updatedAt
46
+ ... on PublishedDatasource {
47
+ description
48
+ luid
49
+ owner { luid }
50
+ site { name }
51
+ tags { name }
52
+ uri
53
+ }
54
+ """
55
+
56
+ _TABLES_QUERY = """
57
+ __typename
58
+ downstreamDashboards { id }
59
+ downstreamDatasources { id }
60
+ downstreamWorkbooks { id }
61
+ id
62
+ name
63
+ ... on DatabaseTable {
64
+ connectionType
65
+ fullName
66
+ schema
67
+ tableType
68
+ }
69
+ ... on CustomSQLTable {
70
+ query
71
+ }
72
+ """
73
+
74
+
75
+ _WORKBOOKS_QUERY = """
76
+ createdAt
77
+ description
78
+ embeddedDatasources { id }
79
+ id
80
+ luid
81
+ name
82
+ owner { luid }
83
+ projectLuid
84
+ site { name }
85
+ tags { name }
86
+ updatedAt
87
+ uri
88
+ """
89
+
90
+ _FIELDS_QUERY = """
91
+ __typename
92
+ datasource { id }
93
+ description
94
+ downstreamDashboards { id }
95
+ downstreamWorkbooks { id }
96
+ folderName
97
+ id
98
+ name
99
+ ... on DataField {
100
+ dataType
101
+ role
102
+ }
103
+ ... on ColumnField {
104
+ columns {
105
+ name
106
+ table { name }
107
+ }
108
+ }
109
+ """
110
+
111
+ _SHEETS_QUERY = """
112
+ containedInDashboards { id }
113
+ createdAt
114
+ id
115
+ index
116
+ name
117
+ updatedAt
118
+ upstreamFields { name }
119
+ workbook { id }
120
+ """
121
+
122
+
123
+ GQL_QUERIES: Dict[TableauRevampAsset, Tuple[str, str]] = {
124
+ TableauRevampAsset.COLUMN: ("columns", _COLUMNS_QUERY),
125
+ TableauRevampAsset.DASHBOARD: ("dashboards", _DASHBOARDS_QUERY),
126
+ TableauRevampAsset.DATASOURCE: ("datasources", _DATASOURCES_QUERY),
127
+ TableauRevampAsset.FIELD: ("fields", _FIELDS_QUERY),
128
+ TableauRevampAsset.SHEET: ("sheets", _SHEETS_QUERY),
129
+ TableauRevampAsset.TABLE: ("tables", _TABLES_QUERY),
130
+ TableauRevampAsset.WORKBOOK: ("workbooks", _WORKBOOKS_QUERY),
131
+ }
@@ -0,0 +1,30 @@
1
+ from typing import Dict, Set
2
+
3
+ from ..assets import TableauRevampAsset
4
+
5
+ # list of fields to pick in TSC response
6
+ TSC_FIELDS: Dict[TableauRevampAsset, Set[str]] = {
7
+ TableauRevampAsset.DATASOURCE: {
8
+ "id",
9
+ "project_id",
10
+ "webpage_url",
11
+ },
12
+ TableauRevampAsset.PROJECT: {
13
+ "description",
14
+ "id",
15
+ "name",
16
+ "parent_id",
17
+ },
18
+ TableauRevampAsset.USAGE: {
19
+ "name",
20
+ "total_views",
21
+ "workbook_id",
22
+ },
23
+ TableauRevampAsset.USER: {
24
+ "email",
25
+ "fullname",
26
+ "id",
27
+ "name",
28
+ "site_role",
29
+ },
30
+ }
@@ -0,0 +1,5 @@
1
+ TABLEAU_SERVER_VERSION = "3.5"
2
+
3
+ DEFAULT_PAGE_SIZE = 100
4
+
5
+ DEFAULT_TIMEOUT_SECONDS = 100
@@ -0,0 +1,53 @@
1
+ import logging
2
+ from typing import Iterable, Tuple
3
+
4
+ from ...utils import (
5
+ OUTPUT_DIR,
6
+ current_timestamp,
7
+ deep_serialize,
8
+ from_env,
9
+ get_output_filename,
10
+ write_errors_logs,
11
+ write_json,
12
+ write_summary,
13
+ )
14
+ from .assets import TableauRevampAsset
15
+ from .client import TableauRevampClient
16
+
17
+ logger = logging.getLogger(__name__)
18
+
19
+
20
+ def iterate_all_data(
21
+ client: TableauRevampClient,
22
+ ) -> Iterable[Tuple[TableauRevampAsset, list]]:
23
+ """Iterate over the extracted Data from Tableau"""
24
+
25
+ logger.info("Extracting USER from Tableau API")
26
+ yield TableauRevampAsset.USER, deep_serialize(
27
+ client.fetch(TableauRevampAsset.USER)
28
+ )
29
+
30
+
31
+ def extract_all(client: TableauRevampClient, **kwargs: str) -> None:
32
+ """
33
+ Extract Data from tableau
34
+ Store data locally in files under the output_directory
35
+ If errors from Tableau's API are catch store them locally in file under the output_directory
36
+ """
37
+ output_directory = kwargs.get("output_directory") or from_env(OUTPUT_DIR)
38
+
39
+ timestamp = current_timestamp()
40
+
41
+ for key, data in iterate_all_data(client):
42
+ filename = get_output_filename(key.value, output_directory, timestamp)
43
+ write_json(filename, data)
44
+
45
+ write_summary(
46
+ output_directory,
47
+ timestamp,
48
+ base_url=client.base_url(),
49
+ client_name=client.name(),
50
+ )
51
+
52
+ if client.errors:
53
+ write_errors_logs(output_directory, timestamp, client.errors)
@@ -3,7 +3,7 @@ requires = ["setuptools>=61.2"]
3
3
 
4
4
  [tool.poetry]
5
5
  name = "castor-extractor"
6
- version = "0.16.5"
6
+ version = "0.16.6"
7
7
  description = "Extract your metadata assets."
8
8
  authors = ["Castor <support@castordoc.com>"]
9
9
  license = "EULA"