castor-extractor 0.25.14__tar.gz → 0.26.9__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 (483) hide show
  1. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/CHANGELOG.md +101 -0
  2. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/PKG-INFO +106 -8
  3. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/README.md +2 -4
  4. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_databricks.py +4 -0
  5. castor_extractor-0.26.9/castor_extractor/commands/extract_looker_studio.py +67 -0
  6. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_powerbi.py +7 -2
  7. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_qlik.py +6 -0
  8. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_snowflake.py +6 -0
  9. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_sqlserver.py +6 -0
  10. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_tableau.py +9 -1
  11. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/file_checker/column.py +4 -4
  12. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/confluence/client/client.py +5 -6
  13. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/confluence/client/pagination.py +2 -4
  14. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/confluence/extract.py +1 -2
  15. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/notion/client/client.py +13 -4
  16. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/notion/client/pagination.py +1 -3
  17. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/notion/extract.py +1 -2
  18. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/quality/soda/client/client.py +1 -2
  19. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/transformation/coalesce/client/client.py +62 -23
  20. castor_extractor-0.26.9/castor_extractor/transformation/coalesce/client/client_test.py +175 -0
  21. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/transformation/coalesce/client/endpoint.py +2 -5
  22. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/transformation/coalesce/client/pagination.py +1 -3
  23. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/transformation/dbt/client.py +8 -8
  24. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/transformation/dbt/client_test.py +2 -3
  25. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/uploader/env.py +2 -3
  26. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/uploader/settings.py +3 -5
  27. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/uploader/upload.py +6 -7
  28. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/__init__.py +2 -0
  29. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/batch.py +8 -3
  30. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/__init__.py +1 -1
  31. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/abstract.py +4 -4
  32. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/api/auth.py +5 -5
  33. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/api/auth_test.py +1 -3
  34. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/api/client.py +17 -16
  35. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/api/pagination.py +4 -5
  36. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/api/pagination_test.py +2 -4
  37. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/api/safe_request.py +5 -4
  38. castor_extractor-0.26.9/castor_extractor/utils/client/api/smart_pagination.py +60 -0
  39. castor_extractor-0.26.9/castor_extractor/utils/client/api/smart_pagination_test.py +61 -0
  40. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/api/utils.py +1 -4
  41. castor_extractor-0.26.9/castor_extractor/utils/client/query.py +69 -0
  42. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/collection.py +43 -17
  43. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/collection_test.py +17 -1
  44. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/env.py +3 -5
  45. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/files.py +3 -4
  46. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/formatter_test.py +1 -1
  47. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/load.py +1 -1
  48. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/object.py +3 -3
  49. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/pager/pager.py +2 -4
  50. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/pager/pager_on_id.py +3 -3
  51. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/pager/pager_on_id_test.py +1 -1
  52. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/pager/pager_test.py +1 -1
  53. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/retry.py +5 -4
  54. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/retry_test.py +6 -1
  55. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/safe.py +4 -4
  56. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/salesforce/client.py +1 -2
  57. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/salesforce/pagination.py +2 -4
  58. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/store.py +2 -3
  59. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/string.py +2 -2
  60. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/time.py +1 -2
  61. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/type.py +2 -2
  62. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/validation.py +2 -3
  63. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/count/client/client.py +2 -1
  64. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/count/extract.py +2 -2
  65. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/domo/client/client.py +9 -9
  66. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/domo/client/credentials.py +1 -3
  67. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/domo/client/endpoints.py +1 -2
  68. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/domo/client/pagination.py +1 -2
  69. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/domo/extract.py +1 -2
  70. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/api/client.py +11 -12
  71. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/api/constants.py +1 -0
  72. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/api/sdk.py +1 -3
  73. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/extract.py +3 -4
  74. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker_studio/client/admin_sdk_client.py +3 -3
  75. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker_studio/client/client.py +53 -12
  76. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker_studio/client/credentials.py +2 -4
  77. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker_studio/client/looker_studio_api_client.py +2 -2
  78. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker_studio/client/pagination.py +1 -3
  79. castor_extractor-0.26.9/castor_extractor/visualization/looker_studio/constants.py +2 -0
  80. castor_extractor-0.26.9/castor_extractor/visualization/looker_studio/extract.py +69 -0
  81. castor_extractor-0.26.9/castor_extractor/visualization/looker_studio/parameters.py +152 -0
  82. castor_extractor-0.26.9/castor_extractor/visualization/looker_studio/parameters_test.py +85 -0
  83. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/api/client.py +2 -2
  84. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/db/client.py +1 -1
  85. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/db/credentials.py +2 -4
  86. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/shared.py +1 -3
  87. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/mode/client/client.py +10 -10
  88. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/mode/errors.py +2 -2
  89. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/powerbi/__init__.py +4 -1
  90. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/powerbi/client/__init__.py +3 -2
  91. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/powerbi/client/authentication.py +28 -7
  92. castor_extractor-0.26.9/castor_extractor/visualization/powerbi/client/client.py +64 -0
  93. castor_extractor-0.26.9/castor_extractor/visualization/powerbi/client/client_test.py +29 -0
  94. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/powerbi/client/constants.py +1 -0
  95. castor_extractor-0.26.9/castor_extractor/visualization/powerbi/client/credentials.py +83 -0
  96. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/powerbi/client/credentials_test.py +3 -3
  97. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/powerbi/client/endpoints.py +13 -4
  98. castor_extractor-0.26.9/castor_extractor/visualization/powerbi/client/graph_api_client.py +72 -0
  99. castor_extractor-0.26.9/castor_extractor/visualization/powerbi/client/graph_api_client_test.py +38 -0
  100. castor_extractor-0.26.9/castor_extractor/visualization/powerbi/client/pagination.py +69 -0
  101. castor_extractor-0.25.14/castor_extractor/visualization/powerbi/client/client.py → castor_extractor-0.26.9/castor_extractor/visualization/powerbi/client/powerbi_api_client.py +51 -53
  102. castor_extractor-0.25.14/castor_extractor/visualization/powerbi/client/client_test.py → castor_extractor-0.26.9/castor_extractor/visualization/powerbi/client/powerbi_api_client_test.py +22 -30
  103. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/powerbi/extract.py +47 -13
  104. castor_extractor-0.26.9/castor_extractor/visualization/powerbi/users.py +82 -0
  105. castor_extractor-0.26.9/castor_extractor/visualization/powerbi/users_test.py +47 -0
  106. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/assets.py +1 -0
  107. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/client/constants.py +1 -0
  108. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/client/engine/client.py +87 -7
  109. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/client/engine/constants.py +3 -0
  110. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/client/engine/error.py +16 -2
  111. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/client/engine/error_test.py +11 -1
  112. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/client/engine/json_rpc.py +2 -3
  113. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/client/engine/websocket.py +4 -0
  114. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/client/master.py +31 -7
  115. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/client/rest.py +5 -5
  116. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/client/rest_test.py +1 -2
  117. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/extract.py +10 -4
  118. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/salesforce_reporting/client/rest.py +2 -3
  119. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/salesforce_reporting/extract.py +1 -2
  120. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/sigma/client/authentication.py +2 -3
  121. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/sigma/client/client.py +32 -19
  122. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/sigma/client/pagination.py +2 -4
  123. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/sigma/client/sources_transformer.py +20 -6
  124. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/sigma/extract.py +1 -2
  125. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/strategy/client/client.py +41 -14
  126. castor_extractor-0.26.9/castor_extractor/visualization/strategy/client/client_test.py +168 -0
  127. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/strategy/client/credentials.py +3 -3
  128. castor_extractor-0.26.9/castor_extractor/visualization/strategy/client/credentials_test.py +35 -0
  129. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/strategy/client/properties.py +2 -2
  130. castor_extractor-0.26.9/castor_extractor/visualization/strategy/client/properties_test.py +16 -0
  131. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/strategy/extract.py +1 -2
  132. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/tableau/client/client.py +85 -5
  133. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/tableau/client/client_metadata_api.py +149 -51
  134. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/tableau/client/client_metadata_api_test.py +53 -3
  135. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/tableau/client/client_rest_api.py +1 -2
  136. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/tableau/client/credentials.py +5 -7
  137. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/tableau/client/gql_queries.py +19 -1
  138. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/tableau/extract.py +0 -2
  139. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/thoughtspot/client/client.py +3 -4
  140. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/thoughtspot/extract.py +1 -2
  141. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/abstract/__init__.py +4 -8
  142. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/abstract/asset.py +17 -12
  143. castor_extractor-0.26.9/castor_extractor/warehouse/abstract/asset_test.py +38 -0
  144. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/abstract/extract.py +2 -3
  145. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/abstract/query.py +2 -3
  146. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/abstract/time_filter.py +2 -3
  147. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/client.py +3 -4
  148. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/extract.py +8 -9
  149. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/query.py +49 -6
  150. castor_extractor-0.26.9/castor_extractor/warehouse/bigquery/query_test.py +40 -0
  151. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/api_client.py +5 -5
  152. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/client.py +3 -4
  153. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/extract.py +2 -2
  154. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/format.py +3 -4
  155. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/pagination.py +1 -3
  156. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/utils.py +1 -2
  157. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/mysql/extract.py +7 -8
  158. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/mysql/query.py +2 -4
  159. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/postgres/extract.py +7 -8
  160. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/postgres/query.py +2 -4
  161. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/redshift/__init__.py +1 -0
  162. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/redshift/extract.py +9 -10
  163. castor_extractor-0.26.9/castor_extractor/warehouse/redshift/processor.py +188 -0
  164. castor_extractor-0.26.9/castor_extractor/warehouse/redshift/processor_test.py +144 -0
  165. castor_extractor-0.26.9/castor_extractor/warehouse/redshift/queries/sql/long/common_cte.sql +47 -0
  166. castor_extractor-0.26.9/castor_extractor/warehouse/redshift/queries/sql/long/query_metadata.sql +85 -0
  167. castor_extractor-0.26.9/castor_extractor/warehouse/redshift/queries/sql/long/query_parts.sql +45 -0
  168. castor_extractor-0.26.9/castor_extractor/warehouse/redshift/query.py +54 -0
  169. castor_extractor-0.26.9/castor_extractor/warehouse/redshift/types.py +54 -0
  170. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/salesforce/client.py +1 -2
  171. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/salesforce/extract.py +2 -2
  172. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/salesforce/pagination.py +1 -3
  173. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/__init__.py +1 -1
  174. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/client.py +4 -5
  175. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/credentials.py +3 -6
  176. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/extract.py +9 -9
  177. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/queries/column.sql +3 -3
  178. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/queries/column_lineage.sql +7 -2
  179. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/queries/database.sql +3 -3
  180. castor_extractor-0.26.9/castor_extractor/warehouse/snowflake/queries/query.sql +104 -0
  181. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/queries/schema.sql +3 -3
  182. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/queries/table.sql +3 -3
  183. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/queries/view_ddl.sql +3 -3
  184. castor_extractor-0.26.9/castor_extractor/warehouse/snowflake/query_builder.py +130 -0
  185. castor_extractor-0.26.9/castor_extractor/warehouse/snowflake/query_builder_test.py +93 -0
  186. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/sqlserver/client.py +42 -17
  187. castor_extractor-0.26.9/castor_extractor/warehouse/sqlserver/client_test.py +79 -0
  188. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/sqlserver/extract.py +15 -16
  189. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/sqlserver/query.py +2 -3
  190. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/pyproject.toml +2 -3
  191. castor_extractor-0.25.14/castor_extractor/commands/extract_looker_studio.py +0 -44
  192. castor_extractor-0.25.14/castor_extractor/utils/client/query.py +0 -20
  193. castor_extractor-0.25.14/castor_extractor/visualization/looker_studio/extract.py +0 -127
  194. castor_extractor-0.25.14/castor_extractor/visualization/looker_studio/extract_test.py +0 -19
  195. castor_extractor-0.25.14/castor_extractor/visualization/powerbi/client/credentials.py +0 -57
  196. castor_extractor-0.25.14/castor_extractor/visualization/powerbi/client/pagination.py +0 -32
  197. castor_extractor-0.25.14/castor_extractor/warehouse/abstract/asset_test.py +0 -29
  198. castor_extractor-0.25.14/castor_extractor/warehouse/redshift/query.py +0 -35
  199. castor_extractor-0.25.14/castor_extractor/warehouse/snowflake/queries/query.sql +0 -78
  200. castor_extractor-0.25.14/castor_extractor/warehouse/snowflake/query.py +0 -61
  201. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/Dockerfile +0 -0
  202. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/DockerfileUsage.md +0 -0
  203. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/LICENCE +0 -0
  204. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/__init__.py +0 -0
  205. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/__init__.py +0 -0
  206. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_bigquery.py +0 -0
  207. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_confluence.py +0 -0
  208. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_count.py +0 -0
  209. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_domo.py +0 -0
  210. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_looker.py +0 -0
  211. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_metabase_api.py +0 -0
  212. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_metabase_db.py +0 -0
  213. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_mode.py +0 -0
  214. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_mysql.py +0 -0
  215. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_notion.py +0 -0
  216. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_postgres.py +0 -0
  217. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_redshift.py +0 -0
  218. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_salesforce.py +0 -0
  219. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_salesforce_reporting.py +0 -0
  220. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_sigma.py +0 -0
  221. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_strategy.py +0 -0
  222. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/extract_thoughtspot.py +0 -0
  223. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/file_check.py +0 -0
  224. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/commands/upload.py +0 -0
  225. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/exceptions.py +0 -0
  226. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/file_checker/__init__.py +0 -0
  227. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/file_checker/column_test.py +0 -0
  228. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/file_checker/constants.py +0 -0
  229. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/file_checker/enums.py +0 -0
  230. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/file_checker/file.py +0 -0
  231. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/file_checker/file_test.py +0 -0
  232. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/file_checker/file_test_users.csv +0 -0
  233. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/file_checker/file_test_users_valid.csv +0 -0
  234. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/file_checker/templates/__init__.py +0 -0
  235. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/file_checker/templates/generic_warehouse.py +0 -0
  236. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/__init__.py +0 -0
  237. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/confluence/__init__.py +0 -0
  238. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/confluence/assets.py +0 -0
  239. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/confluence/client/__init__.py +0 -0
  240. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/confluence/client/client_test.py +0 -0
  241. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/confluence/client/credentials.py +0 -0
  242. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/confluence/client/endpoints.py +0 -0
  243. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/confluence/utils.py +0 -0
  244. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/confluence/utils_test.py +0 -0
  245. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/notion/__init__.py +0 -0
  246. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/notion/assets.py +0 -0
  247. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/notion/client/__init__.py +0 -0
  248. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/notion/client/client_test.py +0 -0
  249. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/notion/client/constants.py +0 -0
  250. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/notion/client/credentials.py +0 -0
  251. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/knowledge/notion/client/endpoints.py +0 -0
  252. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/logger.py +0 -0
  253. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/quality/__init__.py +0 -0
  254. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/quality/soda/__init__.py +0 -0
  255. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/quality/soda/assets.py +0 -0
  256. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/quality/soda/client/__init__.py +0 -0
  257. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/quality/soda/client/credentials.py +0 -0
  258. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/quality/soda/client/endpoints.py +0 -0
  259. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/quality/soda/client/pagination.py +0 -0
  260. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/transformation/__init__.py +0 -0
  261. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/transformation/coalesce/__init__.py +0 -0
  262. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/transformation/coalesce/assets.py +0 -0
  263. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/transformation/coalesce/client/__init__.py +0 -0
  264. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/transformation/coalesce/client/credentials.py +0 -0
  265. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/transformation/dbt/__init__.py +0 -0
  266. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/transformation/dbt/assets.py +0 -0
  267. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/transformation/dbt/credentials.py +0 -0
  268. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/types.py +0 -0
  269. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/uploader/__init__.py +0 -0
  270. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/uploader/constant.py +0 -0
  271. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/uploader/enums.py +0 -0
  272. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/uploader/env_test.py +0 -0
  273. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/uploader/upload_test.py +0 -0
  274. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/uploader/utils.py +0 -0
  275. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/argument_parser.py +0 -0
  276. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/argument_parser_test.py +0 -0
  277. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/batch_test.py +0 -0
  278. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/api/__init__.py +0 -0
  279. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/api/client_test.py +0 -0
  280. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/api/safe_request_test.py +0 -0
  281. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/api/utils_test.py +0 -0
  282. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/postgres.py +0 -0
  283. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/uri.py +0 -0
  284. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/client/uri_test.py +0 -0
  285. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/constants.py +0 -0
  286. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/deprecate.py +0 -0
  287. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/files_test.py +0 -0
  288. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/formatter.py +0 -0
  289. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/formatter_test.csv +0 -0
  290. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/formatter_test.json +0 -0
  291. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/json_stream_write.py +0 -0
  292. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/object_test.py +0 -0
  293. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/pager/__init__.py +0 -0
  294. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/safe_test.py +0 -0
  295. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/salesforce/__init__.py +0 -0
  296. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/salesforce/client_test.py +0 -0
  297. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/salesforce/constants.py +0 -0
  298. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/salesforce/credentials.py +0 -0
  299. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/salesforce/credentials_test.py +0 -0
  300. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/string_test.py +0 -0
  301. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/time_test.py +0 -0
  302. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/url.py +0 -0
  303. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/url_test.py +0 -0
  304. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/validation_test.py +0 -0
  305. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/utils/write.py +0 -0
  306. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/__init__.py +0 -0
  307. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/count/__init__.py +0 -0
  308. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/count/assets.py +0 -0
  309. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/count/client/__init__.py +0 -0
  310. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/count/client/credentials.py +0 -0
  311. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/count/client/queries/canvas_loads.sql +0 -0
  312. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/count/client/queries/canvas_permissions.sql +0 -0
  313. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/count/client/queries/canvases.sql +0 -0
  314. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/count/client/queries/cells.sql +0 -0
  315. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/count/client/queries/projects.sql +0 -0
  316. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/count/client/queries/queries.sql +0 -0
  317. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/count/client/queries/users.sql +0 -0
  318. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/domo/__init__.py +0 -0
  319. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/domo/assets.py +0 -0
  320. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/domo/client/__init__.py +0 -0
  321. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/domo/client/pagination_test.py +0 -0
  322. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/__init__.py +0 -0
  323. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/api/__init__.py +0 -0
  324. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/api/client_test.py +0 -0
  325. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/api/credentials.py +0 -0
  326. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/api/extraction_parameters.py +0 -0
  327. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/api/sdk_test.py +0 -0
  328. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/api/utils.py +0 -0
  329. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/assets.py +0 -0
  330. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/constant.py +0 -0
  331. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/constants.py +0 -0
  332. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/fields.py +0 -0
  333. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/fields_test.py +0 -0
  334. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker/multithreading.py +0 -0
  335. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker_studio/__init__.py +0 -0
  336. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker_studio/assets.py +0 -0
  337. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker_studio/client/__init__.py +0 -0
  338. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker_studio/client/endpoints.py +0 -0
  339. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker_studio/client/enums.py +0 -0
  340. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/looker_studio/client/queries/query.sql +0 -0
  341. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/__init__.py +0 -0
  342. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/assets.py +0 -0
  343. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/__init__.py +0 -0
  344. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/api/__init__.py +0 -0
  345. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/api/client_test.py +0 -0
  346. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/api/credentials.py +0 -0
  347. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/db/__init__.py +0 -0
  348. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/db/queries/.sqlfluff +0 -0
  349. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/db/queries/base_url.sql +0 -0
  350. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/db/queries/card.sql +0 -0
  351. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/db/queries/collection.sql +0 -0
  352. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/db/queries/dashboard.sql +0 -0
  353. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/db/queries/dashboard_cards.sql +0 -0
  354. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/db/queries/database.sql +0 -0
  355. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/db/queries/table.sql +0 -0
  356. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/db/queries/user.sql +0 -0
  357. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/decryption.py +0 -0
  358. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/client/decryption_test.py +0 -0
  359. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/errors.py +0 -0
  360. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/extract.py +0 -0
  361. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/metabase/types.py +0 -0
  362. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/mode/__init__.py +0 -0
  363. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/mode/assets.py +0 -0
  364. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/mode/client/__init__.py +0 -0
  365. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/mode/client/client_test.json +0 -0
  366. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/mode/client/client_test.py +0 -0
  367. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/mode/client/constants.py +0 -0
  368. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/mode/client/credentials.py +0 -0
  369. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/mode/extract.py +0 -0
  370. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/powerbi/assets.py +0 -0
  371. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/__init__.py +0 -0
  372. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/client/__init__.py +0 -0
  373. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/client/engine/__init__.py +0 -0
  374. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/client/engine/credentials.py +0 -0
  375. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/qlik/client/engine/json_rpc_test.py +0 -0
  376. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/salesforce_reporting/__init__.py +0 -0
  377. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/salesforce_reporting/assets.py +0 -0
  378. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/salesforce_reporting/client/__init__.py +0 -0
  379. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/salesforce_reporting/client/soql.py +0 -0
  380. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/sigma/__init__.py +0 -0
  381. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/sigma/assets.py +0 -0
  382. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/sigma/client/__init__.py +0 -0
  383. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/sigma/client/client_test.py +0 -0
  384. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/sigma/client/credentials.py +0 -0
  385. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/sigma/client/endpoints.py +0 -0
  386. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/sigma/client/sources_transformer_test.py +0 -0
  387. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/strategy/__init__.py +0 -0
  388. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/strategy/assets.py +0 -0
  389. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/strategy/client/__init__.py +0 -0
  390. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/tableau/__init__.py +0 -0
  391. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/tableau/assets.py +0 -0
  392. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/tableau/client/__init__.py +0 -0
  393. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/tableau/client/client_tsc.py +0 -0
  394. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/tableau/client/errors.py +0 -0
  395. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/tableau/client/rest_fields.py +0 -0
  396. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/tableau/constants.py +0 -0
  397. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/thoughtspot/__init__.py +0 -0
  398. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/thoughtspot/assets.py +0 -0
  399. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/thoughtspot/client/__init__.py +0 -0
  400. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/thoughtspot/client/credentials.py +0 -0
  401. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/thoughtspot/client/endpoints.py +0 -0
  402. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/visualization/thoughtspot/client/pagination.py +0 -0
  403. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/__init__.py +0 -0
  404. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/abstract/time_filter_test.py +0 -0
  405. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/__init__.py +0 -0
  406. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/client_test.py +0 -0
  407. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/credentials.py +0 -0
  408. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/queries/.sqlfluff +0 -0
  409. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/queries/column.sql +0 -0
  410. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/queries/cte/sharded.sql +0 -0
  411. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/queries/database.sql +0 -0
  412. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/queries/query.sql +0 -0
  413. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/queries/schema.sql +0 -0
  414. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/queries/table.sql +0 -0
  415. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/queries/table_with_tags.sql +0 -0
  416. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/queries/user.sql +0 -0
  417. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/queries/view_ddl.sql +0 -0
  418. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/bigquery/types.py +0 -0
  419. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/__init__.py +0 -0
  420. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/api_client_test.py +0 -0
  421. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/client_test.py +0 -0
  422. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/credentials.py +0 -0
  423. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/endpoints.py +0 -0
  424. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/enums.py +0 -0
  425. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/format_test.py +0 -0
  426. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/queries/column_lineage.sql +0 -0
  427. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/queries/table_lineage.sql +0 -0
  428. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/sql_client.py +0 -0
  429. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/types.py +0 -0
  430. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/databricks/utils_test.py +0 -0
  431. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/mysql/__init__.py +0 -0
  432. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/mysql/client.py +0 -0
  433. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/mysql/client_test.py +0 -0
  434. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/mysql/queries/.sqlfluff +0 -0
  435. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/mysql/queries/column.sql +0 -0
  436. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/mysql/queries/database.sql +0 -0
  437. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/mysql/queries/query.sql +0 -0
  438. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/mysql/queries/schema.sql +0 -0
  439. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/mysql/queries/table.sql +0 -0
  440. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/mysql/queries/user.sql +0 -0
  441. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/mysql/queries/view_ddl.sql +0 -0
  442. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/postgres/__init__.py +0 -0
  443. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/postgres/queries/.sqlfluff +0 -0
  444. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/postgres/queries/column.sql +0 -0
  445. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/postgres/queries/database.sql +0 -0
  446. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/postgres/queries/group.sql +0 -0
  447. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/postgres/queries/schema.sql +0 -0
  448. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/postgres/queries/table.sql +0 -0
  449. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/postgres/queries/user.sql +0 -0
  450. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/redshift/client.py +0 -0
  451. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/redshift/client_test.py +0 -0
  452. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/redshift/extract_test.py +0 -0
  453. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/redshift/queries/.sqlfluff +0 -0
  454. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/redshift/queries/column.sql +0 -0
  455. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/redshift/queries/database.sql +0 -0
  456. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/redshift/queries/group.sql +0 -0
  457. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/redshift/queries/schema.sql +0 -0
  458. {castor_extractor-0.25.14/castor_extractor/warehouse/redshift/queries → castor_extractor-0.26.9/castor_extractor/warehouse/redshift/queries/sql/short}/query.sql +0 -0
  459. /castor_extractor-0.25.14/castor_extractor/warehouse/redshift/queries/query_serverless.sql → /castor_extractor-0.26.9/castor_extractor/warehouse/redshift/queries/sql_serverless/query.sql +0 -0
  460. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/redshift/queries/table.sql +0 -0
  461. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/redshift/queries/table_freshness.sql +0 -0
  462. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/redshift/queries/user.sql +0 -0
  463. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/redshift/queries/view_ddl.sql +0 -0
  464. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/salesforce/__init__.py +0 -0
  465. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/salesforce/constants.py +0 -0
  466. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/salesforce/format.py +0 -0
  467. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/salesforce/format_test.py +0 -0
  468. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/salesforce/soql.py +0 -0
  469. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/client_test.py +0 -0
  470. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/credentials_test.py +0 -0
  471. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/queries/.sqlfluff +0 -0
  472. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/queries/function.sql +0 -0
  473. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/snowflake/queries/user.sql +0 -0
  474. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/sqlserver/__init__.py +0 -0
  475. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/sqlserver/queries/.sqlfluff +0 -0
  476. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/sqlserver/queries/column.sql +0 -0
  477. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/sqlserver/queries/database.sql +0 -0
  478. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/sqlserver/queries/query.sql +0 -0
  479. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/sqlserver/queries/schema.sql +0 -0
  480. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/sqlserver/queries/table.sql +0 -0
  481. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/sqlserver/queries/user.sql +0 -0
  482. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/sqlserver/queries/view_ddl.sql +0 -0
  483. {castor_extractor-0.25.14 → castor_extractor-0.26.9}/castor_extractor/warehouse/synapse/queries/column.sql +0 -0
@@ -1,5 +1,106 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.26.9 - 2026-01-21
4
+
5
+ * SqlServer: support default database
6
+
7
+ ## 0.26.8 - 2026-01-14
8
+
9
+ * Qlik: ignore OBJECT_NOT_FOUND errors
10
+
11
+ ## 0.26.7 - 2026-01-13
12
+
13
+ * Coalesce: introduce dynamic pagination
14
+
15
+ ## 0.26.6 - 2025-12-30
16
+
17
+ * Snowflake: add setting `apply_db_filter_to_queries` (for future use)
18
+
19
+ ## 0.26.5 - 2025-12-23
20
+
21
+ * Looker: extract dashboard's slug
22
+
23
+ ## 0.26.4 - 2025-12-18
24
+
25
+ * Snowflake: extend query_blocked to column-lineage extraction
26
+
27
+ ## 0.26.3 - 2025-12-17
28
+
29
+ * Tableau: catch error relationship-service-war
30
+
31
+ ## 0.26.2 - 2025-12-16
32
+
33
+ * Notion: deduplicate Users
34
+
35
+ ## 0.26.1 - 2025-12-15
36
+
37
+ * Power BI: pages extraction conditioned on workspace access
38
+
39
+ ## 0.26.0 - 2025-12-09
40
+
41
+ * Removing support for python3.9
42
+
43
+ ## 0.25.29 - 2025-12-11
44
+
45
+ * Tableau: dynamic pagination and safe mode for all types of assets
46
+
47
+ ## 0.25.28 - 2025-12-08
48
+
49
+ * Tableau: fix retry exponential time
50
+
51
+ ## 0.25.27 - 2025-12-04
52
+
53
+ * Sigma: retry on 503 errors
54
+
55
+ ## 0.25.26 - 2025-12-03
56
+
57
+ * Strategy: deduplicate users on ID
58
+
59
+ ## 0.25.25 - 2025-12-02
60
+
61
+ * Tableau: better catching of timeouts
62
+
63
+ ## 0.25.24 - 2025-11-27
64
+
65
+ * Tableau: extraction of tables and columns without "Extracts"
66
+
67
+ ## 0.25.23 - 2025-11-24
68
+
69
+ * Looker Studio: add option to extract source queries only
70
+
71
+ ## 0.25.22 - 2025-11-19
72
+
73
+ * SQL Server: improved error log
74
+ * Sigma : handle service errors in queries and elements extraction
75
+
76
+ ## 0.25.21 - 2025-11-05
77
+
78
+ * Qlik: Extracting sheets
79
+
80
+ ## 0.25.20 - 2025-11-14
81
+
82
+ * BigQuery: skip Omni locations when extracting SQL queries
83
+
84
+ ## 0.25.19 - 2025-11-14
85
+
86
+ * Redshift: support extraction of queries longer than 65,535 characters
87
+
88
+ ## 0.25.18 - 2025-11-13
89
+
90
+ * Power BI: expand groups into individual users
91
+
92
+ ## 0.25.17 - 2025-11-04
93
+
94
+ * Snowflake: add query_block to exclude specific sql patterns
95
+
96
+ ## 0.25.16 - 2025-11-03
97
+
98
+ * Snowflake: remove duplicated queries, based on query_hash
99
+
100
+ ## 0.25.15 - 2025-10-30
101
+
102
+ * Databricks: Add `http_path` mandatory field for databricks credentials
103
+
3
104
  ## 0.25.14 - 2025-10-28
4
105
 
5
106
  * Removing unused dependency (google-cloud-storage)
@@ -1,19 +1,19 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: castor-extractor
3
- Version: 0.25.14
3
+ Version: 0.26.9
4
4
  Summary: Extract your metadata assets.
5
5
  Home-page: https://www.castordoc.com/
6
6
  License: EULA
7
7
  Author: Castor
8
8
  Author-email: support@castordoc.com
9
- Requires-Python: >=3.9,<3.13
9
+ Requires-Python: >=3.10,<3.14
10
10
  Classifier: License :: Other/Proprietary License
11
11
  Classifier: Operating System :: OS Independent
12
12
  Classifier: Programming Language :: Python :: 3
13
- Classifier: Programming Language :: Python :: 3.9
14
13
  Classifier: Programming Language :: Python :: 3.10
15
14
  Classifier: Programming Language :: Python :: 3.11
16
15
  Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
17
  Provides-Extra: all
18
18
  Provides-Extra: bigquery
19
19
  Provides-Extra: count
@@ -61,7 +61,6 @@ Requires-Dist: sqlalchemy-bigquery[bqstorage] (>=1.0.0,<=2.0.0) ; extra == "bigq
61
61
  Requires-Dist: sqlalchemy-redshift (>=0.8.14,<0.9.0) ; extra == "redshift" or extra == "all"
62
62
  Requires-Dist: tableauserverclient (>=0.25.0,<0.26.0) ; extra == "tableau" or extra == "all"
63
63
  Requires-Dist: tqdm (>=4.0.0,<5.0.0)
64
- Requires-Dist: typing-extensions (>=4,<5)
65
64
  Requires-Dist: websocket-client (>=1,<2) ; extra == "qlik" or extra == "all"
66
65
  Project-URL: Documentation, https://docs.castordoc.com/castor-package/castor-extractor
67
66
  Description-Content-Type: text/markdown
@@ -102,11 +101,9 @@ It also embeds utilities to help you push your metadata to Castor:
102
101
 
103
102
  ## Installation
104
103
 
105
- Requirements: **python3.9+**
104
+ Requirements: **python3.10+**
106
105
  <img src="https://upload.wikimedia.org/wikipedia/commons/c/c3/Python-logo-notext.svg" width=20 />
107
106
 
108
- **Note:** The Strategy command requires **python3.10+**. All other modules work with python3.9+.
109
-
110
107
  ### Create castor-env
111
108
 
112
109
  We advise to create a dedicated [Python environment](https://docs.python.org/3/library/venv.html).
@@ -128,7 +125,7 @@ eval "$(pyenv init --path)"
128
125
  eval "$(pyenv virtualenv-init -)"
129
126
  ```
130
127
 
131
- - [optional] Install python 3.9+ if needed
128
+ - [optional] Install python 3.10+ if needed
132
129
 
133
130
  ```bash
134
131
  pyenv versions # check your local python installations
@@ -215,6 +212,107 @@ For any questions or bug report, contact us at [support@coalesce.io](mailto:supp
215
212
 
216
213
  # Changelog
217
214
 
215
+ ## 0.26.9 - 2026-01-21
216
+
217
+ * SqlServer: support default database
218
+
219
+ ## 0.26.8 - 2026-01-14
220
+
221
+ * Qlik: ignore OBJECT_NOT_FOUND errors
222
+
223
+ ## 0.26.7 - 2026-01-13
224
+
225
+ * Coalesce: introduce dynamic pagination
226
+
227
+ ## 0.26.6 - 2025-12-30
228
+
229
+ * Snowflake: add setting `apply_db_filter_to_queries` (for future use)
230
+
231
+ ## 0.26.5 - 2025-12-23
232
+
233
+ * Looker: extract dashboard's slug
234
+
235
+ ## 0.26.4 - 2025-12-18
236
+
237
+ * Snowflake: extend query_blocked to column-lineage extraction
238
+
239
+ ## 0.26.3 - 2025-12-17
240
+
241
+ * Tableau: catch error relationship-service-war
242
+
243
+ ## 0.26.2 - 2025-12-16
244
+
245
+ * Notion: deduplicate Users
246
+
247
+ ## 0.26.1 - 2025-12-15
248
+
249
+ * Power BI: pages extraction conditioned on workspace access
250
+
251
+ ## 0.26.0 - 2025-12-09
252
+
253
+ * Removing support for python3.9
254
+
255
+ ## 0.25.29 - 2025-12-11
256
+
257
+ * Tableau: dynamic pagination and safe mode for all types of assets
258
+
259
+ ## 0.25.28 - 2025-12-08
260
+
261
+ * Tableau: fix retry exponential time
262
+
263
+ ## 0.25.27 - 2025-12-04
264
+
265
+ * Sigma: retry on 503 errors
266
+
267
+ ## 0.25.26 - 2025-12-03
268
+
269
+ * Strategy: deduplicate users on ID
270
+
271
+ ## 0.25.25 - 2025-12-02
272
+
273
+ * Tableau: better catching of timeouts
274
+
275
+ ## 0.25.24 - 2025-11-27
276
+
277
+ * Tableau: extraction of tables and columns without "Extracts"
278
+
279
+ ## 0.25.23 - 2025-11-24
280
+
281
+ * Looker Studio: add option to extract source queries only
282
+
283
+ ## 0.25.22 - 2025-11-19
284
+
285
+ * SQL Server: improved error log
286
+ * Sigma : handle service errors in queries and elements extraction
287
+
288
+ ## 0.25.21 - 2025-11-05
289
+
290
+ * Qlik: Extracting sheets
291
+
292
+ ## 0.25.20 - 2025-11-14
293
+
294
+ * BigQuery: skip Omni locations when extracting SQL queries
295
+
296
+ ## 0.25.19 - 2025-11-14
297
+
298
+ * Redshift: support extraction of queries longer than 65,535 characters
299
+
300
+ ## 0.25.18 - 2025-11-13
301
+
302
+ * Power BI: expand groups into individual users
303
+
304
+ ## 0.25.17 - 2025-11-04
305
+
306
+ * Snowflake: add query_block to exclude specific sql patterns
307
+
308
+ ## 0.25.16 - 2025-11-03
309
+
310
+ * Snowflake: remove duplicated queries, based on query_hash
311
+
312
+ ## 0.25.15 - 2025-10-30
313
+
314
+ * Databricks: Add `http_path` mandatory field for databricks credentials
315
+
218
316
  ## 0.25.14 - 2025-10-28
219
317
 
220
318
  * Removing unused dependency (google-cloud-storage)
@@ -34,11 +34,9 @@ It also embeds utilities to help you push your metadata to Castor:
34
34
 
35
35
  ## Installation
36
36
 
37
- Requirements: **python3.9+**
37
+ Requirements: **python3.10+**
38
38
  <img src="https://upload.wikimedia.org/wikipedia/commons/c/c3/Python-logo-notext.svg" width=20 />
39
39
 
40
- **Note:** The Strategy command requires **python3.10+**. All other modules work with python3.9+.
41
-
42
40
  ### Create castor-env
43
41
 
44
42
  We advise to create a dedicated [Python environment](https://docs.python.org/3/library/venv.html).
@@ -60,7 +58,7 @@ eval "$(pyenv init --path)"
60
58
  eval "$(pyenv virtualenv-init -)"
61
59
  ```
62
60
 
63
- - [optional] Install python 3.9+ if needed
61
+ - [optional] Install python 3.10+ if needed
64
62
 
65
63
  ```bash
66
64
  pyenv versions # check your local python installations
@@ -21,6 +21,9 @@ def main():
21
21
  help="List of databricks catalogs that should not be extracted",
22
22
  )
23
23
  parser.add_argument("-t", "--token", help="Databricks access token")
24
+ parser.add_argument(
25
+ "-p", "--http-path", dest="http_path", help="Databricks http path"
26
+ )
24
27
  parser.add_argument("-o", "--output", help="Directory to write to")
25
28
  parser.add_argument(
26
29
  "--skip-existing",
@@ -38,5 +41,6 @@ def main():
38
41
  host=args.host,
39
42
  output_directory=args.output,
40
43
  token=args.token,
44
+ http_path=args.http_path,
41
45
  skip_existing=args.skip_existing,
42
46
  )
@@ -0,0 +1,67 @@
1
+ from argparse import ArgumentParser
2
+
3
+ from castor_extractor.utils import parse_filled_arguments # type: ignore
4
+ from castor_extractor.visualization import looker_studio # type: ignore
5
+
6
+
7
+ def main():
8
+ parser = ArgumentParser(
9
+ description="Extract data from Looker Studio and related BigQuery source queries"
10
+ )
11
+ parser.add_argument("-o", "--output", help="Directory to write to")
12
+
13
+ mode_group = parser.add_argument_group("Execution mode")
14
+ mode_group.add_argument(
15
+ "--source-queries-only",
16
+ action="store_true",
17
+ default=False,
18
+ help="If selected, only extracts BigQuery source queries (bypasses Looker Studio extraction)",
19
+ )
20
+ mode_group.add_argument(
21
+ "--skip-view-activity-logs",
22
+ action="store_true",
23
+ default=False,
24
+ help="Skip extraction of activity logs (use if credentials lack required scopes)",
25
+ )
26
+
27
+ looker_group = parser.add_argument_group("Looker Studio extraction")
28
+ looker_group.add_argument(
29
+ "-c",
30
+ "--credentials",
31
+ help="File path to Service Account credentials with Looker Studio access",
32
+ )
33
+ looker_group.add_argument(
34
+ "-a",
35
+ "--admin-email",
36
+ help="Email of a Google Workspace user with admin access",
37
+ )
38
+ looker_group.add_argument(
39
+ "--users-file-path",
40
+ help=(
41
+ "Optional path to a JSON file with user email addresses "
42
+ 'as a list of strings (e.g. ["foo@bar.com", "fee@bar.com"]). '
43
+ "If provided, only extracts assets owned by the specified users."
44
+ ),
45
+ )
46
+
47
+ bigquery_group = parser.add_argument_group("Source queries extraction")
48
+ bigquery_group.add_argument(
49
+ "-b",
50
+ "--bigquery-credentials",
51
+ help=(
52
+ "File path to Service Account credentials with BigQuery access. "
53
+ "Can point to the same file as Looker Studio credentials."
54
+ ),
55
+ )
56
+ bigquery_group.add_argument(
57
+ "--db-allowed",
58
+ nargs="*",
59
+ help="Optional list of GCP projects to allow for source queries extraction",
60
+ )
61
+ bigquery_group.add_argument(
62
+ "--db-blocked",
63
+ nargs="*",
64
+ help="Optional list of GCP projects to block from source queries extraction",
65
+ )
66
+
67
+ looker_studio.extract_all(**parse_filled_arguments(parser))
@@ -31,11 +31,16 @@ def main():
31
31
  parser.add_argument(
32
32
  "-sc",
33
33
  "--scopes",
34
- help="PowerBi scopes, optional",
34
+ help="Optional scopes for the Power BI REST API and the Microsoft Graph API",
35
35
  nargs="*",
36
36
  )
37
37
  parser.add_argument("-o", "--output", help="Directory to write to")
38
38
  parser.add_argument("-l", "--login_url", help="Login url (Optional)")
39
- parser.add_argument("-a", "--api_base", help="REST API base (Optional)")
39
+ parser.add_argument(
40
+ "-a", "--api_base", help="Power BI REST API base (Optional)"
41
+ )
42
+ parser.add_argument(
43
+ "-g", "--graph_api_base", help="Microsoft Graph API base (Optional)"
44
+ )
40
45
 
41
46
  powerbi.extract_all(**parse_filled_arguments(parser))
@@ -22,5 +22,11 @@ def main():
22
22
  "as warning instead. Helpful to continue script execution when "
23
23
  "missing rights on some assets.",
24
24
  )
25
+ parser.add_argument(
26
+ "-s",
27
+ "--include-sheets",
28
+ action="store_true",
29
+ help="Also extract sheets",
30
+ )
25
31
 
26
32
  qlik.extract_all(**parse_filled_arguments(parser))
@@ -35,6 +35,11 @@ def main():
35
35
  nargs="*",
36
36
  help="List of databases that should not be extracted",
37
37
  )
38
+ parser.add_argument(
39
+ "--query-blocked",
40
+ nargs="*",
41
+ help="List of query patterns that should not be extracted. SQL wildcards are supported: % and _",
42
+ )
38
43
  parser.add_argument(
39
44
  "--fetch-transient",
40
45
  action="store_true",
@@ -67,6 +72,7 @@ def main():
67
72
  role=args.role,
68
73
  db_allowed=args.db_allowed,
69
74
  db_blocked=args.db_blocked,
75
+ query_blocked=args.query_blocked,
70
76
  output_directory=args.output,
71
77
  skip_existing=args.skip_existing,
72
78
  fetch_transient=args.fetch_transient,
@@ -40,6 +40,10 @@ def main():
40
40
  nargs="*",
41
41
  help="List of databases that should not be extracted",
42
42
  )
43
+ parser.add_argument(
44
+ "--default-db",
45
+ help="Optional database used only when the SQL Server login cannot connect via its default database (e.g. Azure SQL). Not required for most setups.",
46
+ )
43
47
  parser.set_defaults(skip_existing=False)
44
48
 
45
49
  args = parser.parse_args()
@@ -51,6 +55,8 @@ def main():
51
55
  password=args.password,
52
56
  output_directory=args.output,
53
57
  skip_existing=args.skip_existing,
58
+ skip_queries=args.skip_queries,
54
59
  db_allowed=args.db_allowed,
55
60
  db_blocked=args.db_blocked,
61
+ default_db=args.default_db,
56
62
  )
@@ -4,6 +4,8 @@ from argparse import ArgumentParser
4
4
  from castor_extractor.utils import parse_filled_arguments # type: ignore
5
5
  from castor_extractor.visualization import tableau # type: ignore
6
6
 
7
+ logger = logging.getLogger(__name__)
8
+
7
9
  logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s")
8
10
 
9
11
 
@@ -53,8 +55,14 @@ def main():
53
55
  "--ignore-errors",
54
56
  action="store_true",
55
57
  dest="ignore_errors",
56
- help="Allow partial extraction of Fields and Columns: skip batch in case of Timeout errors",
58
+ help="(DEPRECATED) This option no longer has any effect and will be removed in a future version.",
57
59
  )
60
+ args = parser.parse_args()
61
+ if args.ignore_errors:
62
+ logger.warning(
63
+ "--ignore-errors is deprecated and has no more effect. It will be removed in a future version."
64
+ )
65
+
58
66
  parser.add_argument(
59
67
  "--ignore-ssl",
60
68
  action="store_true",
@@ -1,4 +1,4 @@
1
- from typing import Callable, Optional
1
+ from collections.abc import Callable
2
2
 
3
3
  from dateutil.parser import parse
4
4
 
@@ -29,8 +29,8 @@ class ColumnChecker:
29
29
  data_type: DataType = DataType.STRING,
30
30
  is_mandatory: bool = True,
31
31
  is_unique: bool = False,
32
- foreign: Optional[set[str]] = None,
33
- enum_values: Optional[set[str]] = None,
32
+ foreign: set[str] | None = None,
33
+ enum_values: set[str] | None = None,
34
34
  ):
35
35
  self.data_type = data_type
36
36
  self.is_mandatory = is_mandatory
@@ -79,7 +79,7 @@ class ColumnChecker:
79
79
  return True
80
80
  return value in self.foreign
81
81
 
82
- def check(self, value: Optional[str]) -> Optional[Issue]:
82
+ def check(self, value: str | None) -> Issue | None:
83
83
  """
84
84
  Do all checks to validate that the given value respect the column rules.
85
85
  Return an issue if something's wrong.
@@ -1,7 +1,6 @@
1
1
  import logging
2
- from collections.abc import Iterator
2
+ from collections.abc import Iterable, Iterator
3
3
  from functools import partial
4
- from typing import Iterable, Optional
5
4
 
6
5
  from ....utils import (
7
6
  APIClient,
@@ -31,8 +30,8 @@ class ConfluenceClient(APIClient):
31
30
  credentials: ConfluenceCredentials,
32
31
  include_archived_spaces: bool = False,
33
32
  include_personal_spaces: bool = False,
34
- space_ids_allowed: Optional[set[str]] = None,
35
- space_ids_blocked: Optional[set[str]] = None,
33
+ space_ids_allowed: set[str] | None = None,
34
+ space_ids_blocked: set[str] | None = None,
36
35
  ):
37
36
  self.account_id = credentials.account_id
38
37
  auth = BasicAuth(
@@ -150,8 +149,8 @@ class ConfluenceClient(APIClient):
150
149
  self,
151
150
  asset: ConfluenceAsset,
152
151
  *,
153
- folder_ids: Optional[Iterator[str]] = None,
154
- database_ids: Optional[Iterator[str]] = None,
152
+ folder_ids: Iterator[str] | None = None,
153
+ database_ids: Iterator[str] | None = None,
155
154
  ) -> Iterator[dict]:
156
155
  """Returns the needed metadata for the queried asset"""
157
156
  if asset == ConfluenceAsset.FOLDERS:
@@ -1,5 +1,3 @@
1
- from typing import Optional, Union
2
-
3
1
  from pydantic import AliasPath, Field
4
2
 
5
3
  from ....utils import (
@@ -14,7 +12,7 @@ class ConfluencePagination(PaginationModel):
14
12
  fetch_by: FetchNextPageBy = FetchNextPageBy.URL
15
13
 
16
14
  results: list = Field(default_factory=list)
17
- next_url: Optional[str] = Field(
15
+ next_url: str | None = Field(
18
16
  validation_alias=AliasPath("_links", "next"),
19
17
  default=None,
20
18
  )
@@ -23,7 +21,7 @@ class ConfluencePagination(PaginationModel):
23
21
  """Stopping condition for the pagination"""
24
22
  return self.next_url is None
25
23
 
26
- def next_page_payload(self) -> Union[str, None]:
24
+ def next_page_payload(self) -> str | None:
27
25
  """Payload enabling to generate the request for the next page"""
28
26
  return self.next_url
29
27
 
@@ -1,6 +1,5 @@
1
1
  import logging
2
2
  from collections.abc import Iterable, Iterator
3
- from typing import Union
4
3
 
5
4
  from ...utils import (
6
5
  OUTPUT_DIR,
@@ -20,7 +19,7 @@ logger = logging.getLogger(__name__)
20
19
 
21
20
  def iterate_all_data(
22
21
  client: ConfluenceClient,
23
- ) -> Iterable[tuple[ConfluenceAsset, Union[list, Iterator, dict]]]:
22
+ ) -> Iterable[tuple[ConfluenceAsset, list | Iterator | dict]]:
24
23
  """Iterate over the extracted data from Confluence"""
25
24
 
26
25
  logger.info("Extracting USERS from API")
@@ -1,9 +1,14 @@
1
1
  from collections.abc import Iterator
2
2
  from functools import partial
3
3
  from http import HTTPStatus
4
- from typing import Optional
5
4
 
6
- from ....utils import APIClient, BearerAuth, RequestSafeMode, fetch_all_pages
5
+ from ....utils import (
6
+ APIClient,
7
+ BearerAuth,
8
+ RequestSafeMode,
9
+ deduplicate,
10
+ fetch_all_pages,
11
+ )
7
12
  from ..assets import NotionAsset
8
13
  from .constants import CASTOR_NOTION_USER_AGENT, NOTION_BASE_URL, NOTION_VERSION
9
14
  from .credentials import NotionCredentials
@@ -40,7 +45,7 @@ class NotionClient(APIClient):
40
45
  def __init__(
41
46
  self,
42
47
  credentials: NotionCredentials,
43
- safe_mode: Optional[RequestSafeMode] = None,
48
+ safe_mode: RequestSafeMode | None = None,
44
49
  ):
45
50
  auth = NotionAuth(token=credentials.token)
46
51
  super().__init__(
@@ -52,8 +57,12 @@ class NotionClient(APIClient):
52
57
  )
53
58
 
54
59
  def users(self) -> Iterator[dict]:
60
+ """
61
+ Yield all Notion users, deduplicated by user ID.
62
+ """
55
63
  request = partial(self._get, endpoint=NotionEndpointFactory.users())
56
- yield from fetch_all_pages(request, NotionPagination)
64
+ all_users = fetch_all_pages(request, NotionPagination)
65
+ return deduplicate("id", all_users)
57
66
 
58
67
  def _page_listing(self) -> Iterator[dict]:
59
68
  request = partial(
@@ -1,5 +1,3 @@
1
- from typing import Optional
2
-
3
1
  from pydantic import Field
4
2
 
5
3
  from ....utils import PaginationModel
@@ -9,7 +7,7 @@ class NotionPagination(PaginationModel):
9
7
  """Class to handle paginated results"""
10
8
 
11
9
  results: list = Field(default_factory=list)
12
- next_cursor: Optional[str] = None
10
+ next_cursor: str | None = None
13
11
  has_more: bool = False
14
12
 
15
13
  def is_last(self) -> bool:
@@ -1,6 +1,5 @@
1
1
  import logging
2
2
  from collections.abc import Iterable, Iterator
3
- from typing import Union
4
3
 
5
4
  from ...utils import (
6
5
  OUTPUT_DIR,
@@ -19,7 +18,7 @@ logger = logging.getLogger(__name__)
19
18
 
20
19
  def iterate_all_data(
21
20
  client: NotionClient,
22
- ) -> Iterable[tuple[NotionAsset, Union[list, Iterator, dict]]]:
21
+ ) -> Iterable[tuple[NotionAsset, list | Iterator | dict]]:
23
22
  """Iterate over the extracted data from Notion"""
24
23
 
25
24
  logger.info("Extracting USERS from API")
@@ -1,6 +1,5 @@
1
- from collections.abc import Iterator
1
+ from collections.abc import Callable, Iterator
2
2
  from functools import partial
3
- from typing import Callable
4
3
 
5
4
  from ....utils import (
6
5
  APIClient,