castor-extractor 0.18.2__tar.gz → 0.18.7__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 (380) hide show
  1. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/CHANGELOG.md +20 -0
  2. castor_extractor-0.18.7/DockerfileUsage.md +21 -0
  3. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/PKG-INFO +1 -1
  4. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_domo.py +2 -10
  5. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_looker.py +2 -13
  6. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_metabase_api.py +4 -10
  7. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_metabase_db.py +4 -16
  8. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_mode.py +2 -12
  9. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_powerbi.py +2 -8
  10. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_qlik.py +2 -7
  11. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_salesforce.py +3 -12
  12. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_salesforce_reporting.py +2 -10
  13. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_sigma.py +2 -7
  14. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/__init__.py +1 -0
  15. castor_extractor-0.18.7/castor_extractor/utils/argument_parser.py +7 -0
  16. castor_extractor-0.18.7/castor_extractor/utils/argument_parser_test.py +25 -0
  17. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/domo/extract.py +4 -19
  18. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/extract.py +2 -3
  19. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/extract.py +2 -2
  20. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/mode/extract.py +4 -3
  21. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/powerbi/extract.py +4 -15
  22. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/extract.py +3 -6
  23. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/salesforce_reporting/extract.py +6 -20
  24. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/sigma/extract.py +4 -13
  25. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/client.py +41 -6
  26. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/extract.py +1 -0
  27. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/query.py +23 -9
  28. castor_extractor-0.18.7/castor_extractor/warehouse/bigquery/types.py +4 -0
  29. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/databricks/client.py +3 -0
  30. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/salesforce/client.py +28 -3
  31. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/salesforce/format.py +6 -4
  32. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/salesforce/format_test.py +1 -1
  33. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/salesforce/soql.py +6 -1
  34. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/pyproject.toml +1 -1
  35. castor_extractor-0.18.2/castor_extractor/warehouse/bigquery/types.py +0 -5
  36. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/Dockerfile +0 -0
  37. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/LICENCE +0 -0
  38. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/README.md +0 -0
  39. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/__init__.py +0 -0
  40. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/__init__.py +0 -0
  41. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_bigquery.py +0 -0
  42. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_databricks.py +0 -0
  43. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_mysql.py +0 -0
  44. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_postgres.py +0 -0
  45. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_redshift.py +0 -0
  46. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_snowflake.py +0 -0
  47. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_sqlserver.py +0 -0
  48. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/extract_tableau.py +0 -0
  49. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/file_check.py +0 -0
  50. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/commands/upload.py +0 -0
  51. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/file_checker/__init__.py +0 -0
  52. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/file_checker/column.py +0 -0
  53. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/file_checker/column_test.py +0 -0
  54. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/file_checker/constants.py +0 -0
  55. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/file_checker/enums.py +0 -0
  56. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/file_checker/file.py +0 -0
  57. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/file_checker/file_test.py +0 -0
  58. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/file_checker/file_test_users.csv +0 -0
  59. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/file_checker/file_test_users_valid.csv +0 -0
  60. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/file_checker/templates/__init__.py +0 -0
  61. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/file_checker/templates/generic_warehouse.py +0 -0
  62. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/logger.py +0 -0
  63. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/types.py +0 -0
  64. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/uploader/__init__.py +0 -0
  65. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/uploader/constant.py +0 -0
  66. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/uploader/env.py +0 -0
  67. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/uploader/env_test.py +0 -0
  68. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/uploader/upload.py +0 -0
  69. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/uploader/upload_test.py +0 -0
  70. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/uploader/utils.py +0 -0
  71. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/client/__init__.py +0 -0
  72. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/client/abstract.py +0 -0
  73. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/client/api.py +0 -0
  74. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/client/api_test.py +0 -0
  75. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/client/postgres.py +0 -0
  76. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/client/query.py +0 -0
  77. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/client/uri.py +0 -0
  78. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/client/uri_test.py +0 -0
  79. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/collection.py +0 -0
  80. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/collection_test.py +0 -0
  81. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/constants.py +0 -0
  82. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/dbt/__init__.py +0 -0
  83. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/dbt/assets.py +0 -0
  84. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/dbt/client.py +0 -0
  85. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/dbt/client_test.py +0 -0
  86. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/dbt/credentials.py +0 -0
  87. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/deprecate.py +0 -0
  88. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/env.py +0 -0
  89. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/files.py +0 -0
  90. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/files_test.py +0 -0
  91. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/formatter.py +0 -0
  92. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/formatter_test.csv +0 -0
  93. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/formatter_test.json +0 -0
  94. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/formatter_test.py +0 -0
  95. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/json_stream_write.py +0 -0
  96. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/load.py +0 -0
  97. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/object.py +0 -0
  98. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/object_test.py +0 -0
  99. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/pager/__init__.py +0 -0
  100. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/pager/pager.py +0 -0
  101. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/pager/pager_on_id.py +0 -0
  102. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/pager/pager_on_id_test.py +0 -0
  103. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/pager/pager_on_token.py +0 -0
  104. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/pager/pager_on_token_test.py +0 -0
  105. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/pager/pager_test.py +0 -0
  106. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/retry.py +0 -0
  107. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/retry_test.py +0 -0
  108. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/safe.py +0 -0
  109. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/safe_request.py +0 -0
  110. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/safe_request_test.py +0 -0
  111. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/safe_test.py +0 -0
  112. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/salesforce/__init__.py +0 -0
  113. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/salesforce/client.py +0 -0
  114. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/salesforce/client_test.py +0 -0
  115. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/salesforce/constants.py +0 -0
  116. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/salesforce/credentials.py +0 -0
  117. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/salesforce/credentials_test.py +0 -0
  118. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/store.py +0 -0
  119. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/string.py +0 -0
  120. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/string_test.py +0 -0
  121. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/time.py +0 -0
  122. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/time_test.py +0 -0
  123. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/type.py +0 -0
  124. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/validation.py +0 -0
  125. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/validation_test.py +0 -0
  126. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/utils/write.py +0 -0
  127. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/__init__.py +0 -0
  128. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/domo/__init__.py +0 -0
  129. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/domo/assets.py +0 -0
  130. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/domo/client/__init__.py +0 -0
  131. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/domo/client/client.py +0 -0
  132. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/domo/client/credentials.py +0 -0
  133. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/domo/client/endpoints.py +0 -0
  134. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/domo/client/pagination.py +0 -0
  135. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/domo/client/pagination_test.py +0 -0
  136. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/__init__.py +0 -0
  137. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/api/__init__.py +0 -0
  138. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/api/client.py +0 -0
  139. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/api/client_test.py +0 -0
  140. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/api/constants.py +0 -0
  141. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/api/credentials.py +0 -0
  142. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/api/extraction_parameters.py +0 -0
  143. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/api/sdk.py +0 -0
  144. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/api/sdk_test.py +0 -0
  145. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/api/utils.py +0 -0
  146. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/assets.py +0 -0
  147. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/constant.py +0 -0
  148. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/constants.py +0 -0
  149. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/fields.py +0 -0
  150. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/fields_test.py +0 -0
  151. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/looker/multithreading.py +0 -0
  152. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/__init__.py +0 -0
  153. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/assets.py +0 -0
  154. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/__init__.py +0 -0
  155. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/api/__init__.py +0 -0
  156. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/api/client.py +0 -0
  157. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/api/client_test.py +0 -0
  158. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/api/credentials.py +0 -0
  159. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/db/__init__.py +0 -0
  160. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/db/client.py +0 -0
  161. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/db/credentials.py +0 -0
  162. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/db/queries/.sqlfluff +0 -0
  163. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/db/queries/base_url.sql +0 -0
  164. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/db/queries/card.sql +0 -0
  165. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/db/queries/collection.sql +0 -0
  166. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/db/queries/dashboard.sql +0 -0
  167. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/db/queries/dashboard_cards.sql +0 -0
  168. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/db/queries/database.sql +0 -0
  169. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/db/queries/table.sql +0 -0
  170. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/db/queries/user.sql +0 -0
  171. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/decryption.py +0 -0
  172. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/decryption_test.py +0 -0
  173. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/client/shared.py +0 -0
  174. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/errors.py +0 -0
  175. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/metabase/types.py +0 -0
  176. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/mode/__init__.py +0 -0
  177. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/mode/assets.py +0 -0
  178. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/mode/client/__init__.py +0 -0
  179. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/mode/client/client.py +0 -0
  180. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/mode/client/client_test.json +0 -0
  181. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/mode/client/client_test.py +0 -0
  182. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/mode/client/constants.py +0 -0
  183. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/mode/client/credentials.py +0 -0
  184. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/mode/errors.py +0 -0
  185. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/powerbi/__init__.py +0 -0
  186. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/powerbi/assets.py +0 -0
  187. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/powerbi/client/__init__.py +0 -0
  188. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/powerbi/client/constants.py +0 -0
  189. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/powerbi/client/credentials.py +0 -0
  190. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/powerbi/client/credentials_test.py +0 -0
  191. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/powerbi/client/rest.py +0 -0
  192. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/powerbi/client/rest_test.py +0 -0
  193. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/powerbi/client/utils.py +0 -0
  194. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/powerbi/client/utils_test.py +0 -0
  195. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/__init__.py +0 -0
  196. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/assets.py +0 -0
  197. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/client/__init__.py +0 -0
  198. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/client/constants.py +0 -0
  199. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/client/engine/__init__.py +0 -0
  200. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/client/engine/client.py +0 -0
  201. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/client/engine/constants.py +0 -0
  202. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/client/engine/credentials.py +0 -0
  203. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/client/engine/error.py +0 -0
  204. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/client/engine/error_test.py +0 -0
  205. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/client/engine/json_rpc.py +0 -0
  206. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/client/engine/json_rpc_test.py +0 -0
  207. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/client/engine/websocket.py +0 -0
  208. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/client/master.py +0 -0
  209. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/client/rest.py +0 -0
  210. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/qlik/client/rest_test.py +0 -0
  211. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/salesforce_reporting/__init__.py +0 -0
  212. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/salesforce_reporting/assets.py +0 -0
  213. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/salesforce_reporting/client/__init__.py +0 -0
  214. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/salesforce_reporting/client/rest.py +0 -0
  215. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/salesforce_reporting/client/soql.py +0 -0
  216. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/sigma/__init__.py +0 -0
  217. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/sigma/assets.py +0 -0
  218. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/sigma/client/__init__.py +0 -0
  219. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/sigma/client/client.py +0 -0
  220. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/sigma/client/client_test.py +0 -0
  221. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/sigma/client/credentials.py +0 -0
  222. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/sigma/client/endpoints.py +0 -0
  223. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/sigma/client/pagination.py +0 -0
  224. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/__init__.py +0 -0
  225. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/assets.py +0 -0
  226. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/client/__init__.py +0 -0
  227. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/client/client.py +0 -0
  228. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/client/client_utils.py +0 -0
  229. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/client/credentials.py +0 -0
  230. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/client/project.py +0 -0
  231. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/client/safe_mode.py +0 -0
  232. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/constants.py +0 -0
  233. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/errors.py +0 -0
  234. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/extract.py +0 -0
  235. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/gql_fields.py +0 -0
  236. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/__init__.py +0 -0
  237. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/__init__.py +0 -0
  238. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/assets/graphql/metadata/metadata_1_get.json +0 -0
  239. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/assets/graphql/metadata/metadata_2_get.json +0 -0
  240. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/auth.xml +0 -0
  241. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/project_get.xml +0 -0
  242. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/user_get.xml +0 -0
  243. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/view_get_usage.xml +0 -0
  244. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/workbook_get.xml +0 -0
  245. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/graphql/__init__.py +0 -0
  246. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/graphql/paginated_object_test.py +0 -0
  247. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/rest_api/__init__.py +0 -0
  248. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/rest_api/auth_test.py +0 -0
  249. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/rest_api/credentials_test.py +0 -0
  250. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/rest_api/projects_test.py +0 -0
  251. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/rest_api/usages_test.py +0 -0
  252. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/rest_api/users_test.py +0 -0
  253. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/rest_api/workbooks_test.py +0 -0
  254. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/utils/__init__.py +0 -0
  255. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tests/unit/utils/env_key.py +0 -0
  256. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/tsc_fields.py +0 -0
  257. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/types.py +0 -0
  258. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau/usage.py +0 -0
  259. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau_revamp/__init__.py +0 -0
  260. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau_revamp/assets.py +0 -0
  261. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau_revamp/client/__init__.py +0 -0
  262. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau_revamp/client/client.py +0 -0
  263. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau_revamp/client/credentials.py +0 -0
  264. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau_revamp/client/errors.py +0 -0
  265. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau_revamp/client/gql_queries.py +0 -0
  266. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau_revamp/client/tsc_fields.py +0 -0
  267. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau_revamp/constants.py +0 -0
  268. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/visualization/tableau_revamp/extract.py +0 -0
  269. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/__init__.py +0 -0
  270. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/abstract/__init__.py +0 -0
  271. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/abstract/asset.py +0 -0
  272. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/abstract/asset_test.py +0 -0
  273. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/abstract/extract.py +0 -0
  274. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/abstract/query.py +0 -0
  275. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/abstract/time_filter.py +0 -0
  276. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/abstract/time_filter_test.py +0 -0
  277. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/__init__.py +0 -0
  278. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/client_test.py +0 -0
  279. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/credentials.py +0 -0
  280. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/queries/.sqlfluff +0 -0
  281. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/queries/column.sql +0 -0
  282. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/queries/cte/sharded.sql +0 -0
  283. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/queries/database.sql +0 -0
  284. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/queries/query.sql +0 -0
  285. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/queries/schema.sql +0 -0
  286. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/queries/table.sql +0 -0
  287. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/queries/table_with_tags.sql +0 -0
  288. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/queries/user.sql +0 -0
  289. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/bigquery/queries/view_ddl.sql +0 -0
  290. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/databricks/__init__.py +0 -0
  291. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/databricks/client_test.py +0 -0
  292. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/databricks/credentials.py +0 -0
  293. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/databricks/extract.py +0 -0
  294. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/databricks/format.py +0 -0
  295. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/databricks/format_test.py +0 -0
  296. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/databricks/test_constants.py +0 -0
  297. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/databricks/types.py +0 -0
  298. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/databricks/utils.py +0 -0
  299. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/databricks/utils_test.py +0 -0
  300. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/mysql/__init__.py +0 -0
  301. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/mysql/client.py +0 -0
  302. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/mysql/client_test.py +0 -0
  303. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/mysql/extract.py +0 -0
  304. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/mysql/queries/.sqlfluff +0 -0
  305. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/mysql/queries/column.sql +0 -0
  306. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/mysql/queries/database.sql +0 -0
  307. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/mysql/queries/query.sql +0 -0
  308. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/mysql/queries/schema.sql +0 -0
  309. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/mysql/queries/table.sql +0 -0
  310. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/mysql/queries/user.sql +0 -0
  311. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/mysql/queries/view_ddl.sql +0 -0
  312. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/mysql/query.py +0 -0
  313. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/postgres/__init__.py +0 -0
  314. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/postgres/extract.py +0 -0
  315. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/postgres/queries/.sqlfluff +0 -0
  316. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/postgres/queries/column.sql +0 -0
  317. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/postgres/queries/database.sql +0 -0
  318. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/postgres/queries/group.sql +0 -0
  319. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/postgres/queries/schema.sql +0 -0
  320. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/postgres/queries/table.sql +0 -0
  321. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/postgres/queries/user.sql +0 -0
  322. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/postgres/query.py +0 -0
  323. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/__init__.py +0 -0
  324. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/client.py +0 -0
  325. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/client_test.py +0 -0
  326. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/extract.py +0 -0
  327. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/queries/.sqlfluff +0 -0
  328. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/queries/column.sql +0 -0
  329. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/queries/database.sql +0 -0
  330. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/queries/group.sql +0 -0
  331. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/queries/query.sql +0 -0
  332. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/queries/schema.sql +0 -0
  333. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/queries/table.sql +0 -0
  334. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/queries/table_freshness.sql +0 -0
  335. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/queries/user.sql +0 -0
  336. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/queries/view_ddl.sql +0 -0
  337. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/redshift/query.py +0 -0
  338. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/salesforce/__init__.py +0 -0
  339. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/salesforce/constants.py +0 -0
  340. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/salesforce/extract.py +0 -0
  341. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/__init__.py +0 -0
  342. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/client.py +0 -0
  343. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/client_test.py +0 -0
  344. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/credentials.py +0 -0
  345. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/credentials_test.py +0 -0
  346. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/extract.py +0 -0
  347. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/queries/.sqlfluff +0 -0
  348. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/queries/column.sql +0 -0
  349. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/queries/column_lineage.sql +0 -0
  350. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/queries/database.sql +0 -0
  351. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/queries/function.sql +0 -0
  352. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/queries/grant_to_role.sql +0 -0
  353. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/queries/grant_to_user.sql +0 -0
  354. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/queries/query.sql +0 -0
  355. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/queries/role.sql +0 -0
  356. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/queries/schema.sql +0 -0
  357. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/queries/table.sql +0 -0
  358. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/queries/user.sql +0 -0
  359. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/queries/view_ddl.sql +0 -0
  360. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/snowflake/query.py +0 -0
  361. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/sqlserver/__init__.py +0 -0
  362. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/sqlserver/client.py +0 -0
  363. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/sqlserver/extract.py +0 -0
  364. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/sqlserver/queries/.sqlfluff +0 -0
  365. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/sqlserver/queries/column.sql +0 -0
  366. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/sqlserver/queries/database.sql +0 -0
  367. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/sqlserver/queries/schema.sql +0 -0
  368. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/sqlserver/queries/table.sql +0 -0
  369. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/sqlserver/queries/user.sql +0 -0
  370. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/sqlserver/query.py +0 -0
  371. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/synapse/__init__.py +0 -0
  372. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/synapse/extract.py +0 -0
  373. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/synapse/queries/.sqlfluff +0 -0
  374. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/synapse/queries/column.sql +0 -0
  375. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/synapse/queries/database.sql +0 -0
  376. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/synapse/queries/query.sql +0 -0
  377. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/synapse/queries/schema.sql +0 -0
  378. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/synapse/queries/table.sql +0 -0
  379. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/synapse/queries/user.sql +0 -0
  380. {castor_extractor-0.18.2 → castor_extractor-0.18.7}/castor_extractor/warehouse/synapse/queries/view_ddl.sql +0 -0
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.18.7 - 2024-08-01
4
+
5
+ * Salesforce: extract table descriptions
6
+
7
+ ## 0.18.6 - 2024-07-30
8
+
9
+ * BigQuery: introduce extended regions to extract missing queries
10
+
11
+ ## 0.18.5 - 2024-07-17
12
+
13
+ * Salesforce: extract DeveloperName and tooling url
14
+
15
+ ## 0.18.4 - 2024-07-16
16
+
17
+ * Fix environment variables assignments for credentials
18
+
19
+ ## 0.18.3 - 2024-07-16
20
+
21
+ * bump dependencies (minor and patches)
22
+
3
23
  ## 0.18.2 - 2024-07-08
4
24
 
5
25
  * Added StatusCode handling to SafeMode
@@ -0,0 +1,21 @@
1
+ # Dockerfile usage for CastorDoc package
2
+
3
+ ## How To
4
+
5
+ - The Dockerfile is present on the pypi package
6
+ - For building it you should use this command `docker build -t castor-extractor-looker --build-arg EXTRA=looker .` with replacing looker one or several of: [bigquery,looker,metabase,powerbi,qlik,redshift,snowflake,tableau]
7
+ - For running it you should do `docker run -v <local-path>:/data --env-file <castor-extract-looker.env> castor-extractor-looker` where `</local-path>` have to be replaced and `<castor-extract-looker.env>` have to be set.
8
+ - Extracted datas would be available on `<local-path>`. The path should exists
9
+ - `<castor-extract-looker.env>` would contain env vars for credentials, url...
10
+
11
+ #### example
12
+
13
+ ```bash
14
+ docker run -v /logs:/data --env-file /config/castor-extract-looker.env castor-extractor-looker
15
+ ```
16
+
17
+ ## Limitation
18
+
19
+ - This docker image is for a specific techno
20
+ - This docker image is based on python 3.11
21
+ - This docker image use the latest castor-extractor package version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: castor-extractor
3
- Version: 0.18.2
3
+ Version: 0.18.7
4
4
  Summary: Extract your metadata assets.
5
5
  Home-page: https://www.castordoc.com/
6
6
  License: EULA
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  from argparse import ArgumentParser
3
3
 
4
+ from castor_extractor.utils import parse_filled_arguments # type: ignore
4
5
  from castor_extractor.visualization import domo # type: ignore
5
6
 
6
7
  logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s")
@@ -38,13 +39,4 @@ def main():
38
39
 
39
40
  parser.add_argument("-o", "--output", help="Directory to write to")
40
41
 
41
- args = parser.parse_args()
42
-
43
- domo.extract_all(
44
- api_token=args.api_token,
45
- base_url=args.base_url,
46
- client_id=args.client_id,
47
- cloud_id=args.cloud_id,
48
- developer_token=args.developer_token,
49
- output_directory=args.output,
50
- )
42
+ domo.extract_all(**parse_filled_arguments(parser))
@@ -1,5 +1,6 @@
1
1
  from argparse import ArgumentParser
2
2
 
3
+ from castor_extractor.utils import parse_filled_arguments # type: ignore
3
4
  from castor_extractor.visualization import looker # type: ignore
4
5
 
5
6
 
@@ -33,16 +34,4 @@ def main():
33
34
  action="store_true",
34
35
  )
35
36
 
36
- args = parser.parse_args()
37
-
38
- looker.extract_all(
39
- base_url=args.base_url,
40
- client_id=args.username,
41
- client_secret=args.password,
42
- log_to_stdout=args.log_to_stdout,
43
- output_directory=args.output,
44
- safe_mode=args.safe_mode,
45
- search_per_folder=args.search_per_folder,
46
- thread_pool_size=args.thread_pool_size,
47
- timeout=args.timeout,
48
- )
37
+ looker.extract_all(**parse_filled_arguments(parser))
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  from argparse import ArgumentParser
3
3
 
4
+ from castor_extractor.utils import parse_filled_arguments # type: ignore
4
5
  from castor_extractor.visualization import metabase # type: ignore
5
6
 
6
7
  logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s")
@@ -15,16 +16,9 @@ def main():
15
16
 
16
17
  parser.add_argument("-o", "--output", help="Directory to write to")
17
18
 
18
- args = parser.parse_args()
19
+ args = parse_filled_arguments(parser)
19
20
 
20
- credentials = metabase.MetabaseApiCredentials(
21
- base_url=args.base_url,
22
- user=args.username,
23
- password=args.password,
24
- )
21
+ credentials = metabase.MetabaseApiCredentials(**args)
25
22
  client = metabase.ApiClient(credentials)
26
23
 
27
- metabase.extract_all(
28
- client,
29
- output_directory=args.output,
30
- )
24
+ metabase.extract_all(client, **args)
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  from argparse import ArgumentParser
3
3
 
4
+ from castor_extractor.utils import parse_filled_arguments # type: ignore
4
5
  from castor_extractor.visualization import metabase # type: ignore
5
6
 
6
7
  logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s")
@@ -33,22 +34,9 @@ def main():
33
34
 
34
35
  parser.add_argument("-o", "--output", help="Directory to write to")
35
36
 
36
- args = parser.parse_args()
37
-
38
- credentials = metabase.MetabaseDbCredentials(
39
- host=args.host,
40
- port=args.port,
41
- database=args.database,
42
- schema=args.schema,
43
- user=args.username,
44
- password=args.password,
45
- encryption_secret_key=args.encryption_secret_key,
46
- require_ssl=args.require_ssl,
47
- )
37
+ args = parse_filled_arguments(parser)
38
+ credentials = metabase.MetabaseDbCredentials(**args)
48
39
 
49
40
  client = metabase.DbClient(credentials)
50
41
 
51
- metabase.extract_all(
52
- client,
53
- output_directory=args.output,
54
- )
42
+ metabase.extract_all(client, **args)
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  from argparse import ArgumentParser
3
3
 
4
+ from castor_extractor.utils import parse_filled_arguments # type: ignore
4
5
  from castor_extractor.visualization import mode # type: ignore
5
6
 
6
7
  logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s")
@@ -24,15 +25,4 @@ def main():
24
25
 
25
26
  parser.add_argument("-o", "--output", help="Directory to write to")
26
27
 
27
- args = parser.parse_args()
28
- credentials = mode.Credentials(
29
- host=args.host,
30
- workspace=args.workspace,
31
- token=args.token,
32
- secret=args.secret,
33
- )
34
-
35
- mode.extract_all(
36
- credentials,
37
- output_directory=args.output,
38
- )
28
+ mode.extract_all(**parse_filled_arguments(parser))
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  from argparse import ArgumentParser
3
3
 
4
+ from castor_extractor.utils import parse_filled_arguments # type: ignore
4
5
  from castor_extractor.visualization import powerbi # type: ignore
5
6
 
6
7
  logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s")
@@ -20,11 +21,4 @@ def main():
20
21
  )
21
22
  parser.add_argument("-o", "--output", help="Directory to write to")
22
23
 
23
- args = parser.parse_args()
24
- powerbi.extract_all(
25
- tenant_id=args.tenant_id,
26
- client_id=args.client_id,
27
- secret=args.secret,
28
- scopes=args.scopes,
29
- output_directory=args.output,
30
- )
24
+ powerbi.extract_all(**parse_filled_arguments(parser))
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  from argparse import ArgumentParser
3
3
 
4
+ from castor_extractor.utils import parse_filled_arguments # type: ignore
4
5
  from castor_extractor.visualization import qlik # type: ignore
5
6
 
6
7
  logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s")
@@ -22,10 +23,4 @@ def main():
22
23
  "missing rights on some assets.",
23
24
  )
24
25
 
25
- args = parser.parse_args()
26
- qlik.extract_all(
27
- base_url=args.base_url,
28
- api_key=args.api_key,
29
- output_directory=args.output,
30
- except_http_error_statuses=args.except_http_error_statuses,
31
- )
26
+ qlik.extract_all(**parse_filled_arguments(parser))
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  from argparse import ArgumentParser
3
3
 
4
+ from castor_extractor.utils import parse_filled_arguments # type: ignore
4
5
  from castor_extractor.warehouse import salesforce # type: ignore
5
6
 
6
7
  logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s")
@@ -29,15 +30,5 @@ def main():
29
30
  )
30
31
  parser.set_defaults(skip_existing=False)
31
32
 
32
- args = parser.parse_args()
33
-
34
- salesforce.extract_all(
35
- username=args.username,
36
- password=args.password,
37
- client_id=args.client_id,
38
- client_secret=args.client_secret,
39
- security_token=args.security_token,
40
- base_url=args.base_url,
41
- output_directory=args.output,
42
- skip_existing=args.skip_existing,
43
- )
33
+ args = parse_filled_arguments(parser)
34
+ salesforce.extract_all(output_directory=args.get("output"), **args)
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  from argparse import ArgumentParser
3
3
 
4
+ from castor_extractor.utils import parse_filled_arguments # type: ignore
4
5
  from castor_extractor.visualization import salesforce_reporting # type: ignore
5
6
 
6
7
  logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s")
@@ -21,13 +22,4 @@ def main():
21
22
  parser.add_argument("-b", "--base-url", help="Salesforce instance URL")
22
23
  parser.add_argument("-o", "--output", help="Directory to write to")
23
24
 
24
- args = parser.parse_args()
25
- salesforce_reporting.extract_all(
26
- username=args.username,
27
- password=args.password,
28
- client_id=args.client_id,
29
- client_secret=args.client_secret,
30
- security_token=args.security_token,
31
- base_url=args.base_url,
32
- output_directory=args.output,
33
- )
25
+ salesforce_reporting.extract_all(**parse_filled_arguments(parser))
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  from argparse import ArgumentParser
3
3
 
4
+ from castor_extractor.utils import parse_filled_arguments # type: ignore
4
5
  from castor_extractor.visualization import sigma # type: ignore
5
6
 
6
7
  logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s")
@@ -14,10 +15,4 @@ def main():
14
15
  parser.add_argument("-a", "--api-token", help="Generated API key")
15
16
  parser.add_argument("-o", "--output", help="Directory to write to")
16
17
 
17
- args = parser.parse_args()
18
- sigma.extract_all(
19
- host=args.host,
20
- client_id=args.client_id,
21
- api_token=args.api_token,
22
- output_directory=args.output,
23
- )
18
+ sigma.extract_all(**parse_filled_arguments(parser))
@@ -1,3 +1,4 @@
1
+ from .argument_parser import parse_filled_arguments
1
2
  from .client import (
2
3
  AbstractSourceClient,
3
4
  ExtractionQuery,
@@ -0,0 +1,7 @@
1
+ from argparse import ArgumentParser
2
+
3
+
4
+ def parse_filled_arguments(parser: ArgumentParser) -> dict:
5
+ """Parse arguments and remove all those with None values"""
6
+ parsed_arguments = vars(parser.parse_args())
7
+ return {k: v for k, v in parsed_arguments.items() if v is not None}
@@ -0,0 +1,25 @@
1
+ from argparse import Namespace
2
+
3
+ from .argument_parser import parse_filled_arguments
4
+
5
+
6
+ class MockArgumentParser:
7
+
8
+ def __init__(self):
9
+ self.attributes = {}
10
+
11
+ def add_argument(self, name, value):
12
+ self.attributes[name] = value
13
+
14
+ def parse_args(self) -> Namespace:
15
+ return Namespace(**self.attributes)
16
+
17
+
18
+ def test_parse_filled_arguments():
19
+ parser = MockArgumentParser()
20
+ parser.add_argument("filled", "value")
21
+ parser.add_argument("unfilled", None)
22
+ parser.add_argument("empty_str", "")
23
+
24
+ expected = {"filled": "value", "empty_str": ""}
25
+ assert parse_filled_arguments(parser) == expected
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Iterable, Iterator, Optional, Tuple, Union
2
+ from typing import Iterable, Iterator, Tuple, Union
3
3
 
4
4
  from ...utils import (
5
5
  OUTPUT_DIR,
@@ -42,28 +42,13 @@ def iterate_all_data(
42
42
  yield DomoAsset.DATAFLOWS, list(deep_serialize(dataflows))
43
43
 
44
44
 
45
- def extract_all(
46
- api_token: Optional[str] = None,
47
- base_url: Optional[str] = None,
48
- client_id: Optional[str] = None,
49
- cloud_id: Optional[str] = None,
50
- developer_token: Optional[str] = None,
51
- output_directory: Optional[str] = None,
52
- ) -> None:
45
+ def extract_all(**kwargs) -> None:
53
46
  """
54
47
  Extract data from Domo API
55
48
  Store the output files locally under the given output_directory
56
49
  """
57
-
58
- _output_directory = output_directory or from_env(OUTPUT_DIR)
59
-
60
- credentials = DomoCredentials(
61
- base_url=base_url,
62
- client_id=client_id,
63
- api_token=api_token,
64
- developer_token=developer_token,
65
- cloud_id=cloud_id,
66
- )
50
+ _output_directory = kwargs.get("output") or from_env(OUTPUT_DIR)
51
+ credentials = DomoCredentials(**kwargs)
67
52
  client = DomoClient(credentials=credentials)
68
53
 
69
54
  ts = current_timestamp()
@@ -126,11 +126,10 @@ def extract_all(**kwargs) -> None:
126
126
  Extract Data From looker and store it locally in files under the
127
127
  output_directory
128
128
  """
129
- args = {arg: value for arg, value in kwargs.items() if value is not None}
130
- extraction_parameters = ExtractionParameters(**args)
129
+ extraction_parameters = ExtractionParameters(**kwargs)
131
130
  output_directory = extraction_parameters.output_directory
132
131
 
133
- credentials = LookerCredentials(**args)
132
+ credentials = LookerCredentials(**kwargs)
134
133
 
135
134
  if extraction_parameters.log_to_stdout:
136
135
  set_stream_handler_to_stdout()
@@ -40,12 +40,12 @@ def iterate_all_data(
40
40
  )
41
41
 
42
42
 
43
- def extract_all(client: ClientMetabase, **kwargs: str) -> None:
43
+ def extract_all(client: ClientMetabase, **kwargs) -> None:
44
44
  """
45
45
  Extract Data From metabase
46
46
  Store the output files locally under the given output_directory
47
47
  """
48
- output_directory = kwargs.get("output_directory") or from_env(OUTPUT_DIR)
48
+ output_directory = kwargs.get("output") or from_env(OUTPUT_DIR)
49
49
  ts = current_timestamp()
50
50
 
51
51
  for key, data in iterate_all_data(client):
@@ -37,11 +37,12 @@ def iterate_all_data(
37
37
  yield Asset.MEMBER, deep_serialize(members)
38
38
 
39
39
 
40
- def extract_all(credentials: ModeCredentials, output_directory: str) -> None:
40
+ def extract_all(**kwargs) -> None:
41
41
  """Extract Data From Mode Analytics and store it locally in files under the output_directory"""
42
- output_directory = output_directory or from_env(OUTPUT_DIR)
43
-
42
+ output_directory = kwargs.get("output") or from_env(OUTPUT_DIR)
43
+ credentials = ModeCredentials(**kwargs)
44
44
  client = Client(credentials)
45
+
45
46
  ts = current_timestamp()
46
47
 
47
48
  for key, data in iterate_all_data(client):
@@ -1,4 +1,4 @@
1
- from typing import Iterable, List, Optional, Tuple, Union
1
+ from typing import Iterable, List, Tuple, Union
2
2
 
3
3
  from ...utils import (
4
4
  OUTPUT_DIR,
@@ -24,24 +24,13 @@ def iterate_all_data(
24
24
  yield asset, deep_serialize(data)
25
25
 
26
26
 
27
- def extract_all(
28
- tenant_id: str,
29
- client_id: str,
30
- secret: str,
31
- scopes: Optional[List[str]] = None,
32
- output_directory: Optional[str] = None,
33
- ) -> None:
27
+ def extract_all(**kwargs) -> None:
34
28
  """
35
29
  Extract data from PowerBI REST API
36
30
  Store the output files locally under the given output_directory
37
31
  """
38
- _output_directory = output_directory or from_env(OUTPUT_DIR)
39
- creds = PowerbiCredentials(
40
- tenant_id=tenant_id,
41
- client_id=client_id,
42
- secret=secret,
43
- scopes=scopes,
44
- )
32
+ _output_directory = kwargs.get("output") or from_env(OUTPUT_DIR)
33
+ creds = PowerbiCredentials(**kwargs)
45
34
  client = Client(creds)
46
35
  ts = current_timestamp()
47
36
 
@@ -47,18 +47,15 @@ def iterate_all_data(
47
47
 
48
48
 
49
49
  def extract_all(
50
- base_url: Optional[str] = None,
51
- api_key: Optional[str] = None,
52
- output_directory: Optional[str] = None,
53
- except_http_error_statuses: Optional[List[int]] = None,
50
+ except_http_error_statuses: Optional[List[int]] = None, **kwargs
54
51
  ) -> None:
55
52
  """
56
53
  Extract data from Qlik REST API
57
54
  Store the output files locally under the given output_directory
58
55
  """
59
56
 
60
- credentials = QlikCredentials(base_url=base_url, api_key=api_key)
61
- _output_directory = output_directory or from_env(OUTPUT_DIR)
57
+ credentials = QlikCredentials(**kwargs)
58
+ _output_directory = kwargs.get("output") or from_env(OUTPUT_DIR)
62
59
 
63
60
  client = QlikClient(
64
61
  credentials=credentials,
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Iterable, Optional, Tuple, Union
2
+ from typing import Iterable, Tuple, Union
3
3
 
4
4
  from ...utils import (
5
5
  OUTPUT_DIR,
@@ -28,29 +28,15 @@ def iterate_all_data(
28
28
  yield asset.name.lower(), deep_serialize(data)
29
29
 
30
30
 
31
- def extract_all(
32
- username: str,
33
- password: str,
34
- client_id: str,
35
- client_secret: str,
36
- security_token: str,
37
- base_url: str,
38
- output_directory: Optional[str] = None,
39
- ) -> None:
31
+ def extract_all(**kwargs) -> None:
40
32
  """
41
33
  Extract data from Salesforce REST API
42
34
  Store the output files locally under the given output_directory
43
35
  """
44
- _output_directory = output_directory or from_env(OUTPUT_DIR)
45
- creds = SalesforceCredentials(
46
- username=username,
47
- password=password,
48
- client_id=client_id,
49
- client_secret=client_secret,
50
- security_token=security_token,
51
- base_url=base_url,
52
- )
53
- client = SalesforceReportingClient(credentials=creds)
36
+ _output_directory = kwargs.get("output") or from_env(OUTPUT_DIR)
37
+ credentials = SalesforceCredentials(**kwargs)
38
+
39
+ client = SalesforceReportingClient(credentials=credentials)
54
40
  ts = current_timestamp()
55
41
 
56
42
  for key, data in iterate_all_data(client):
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Iterable, Iterator, Optional, Tuple, Union
2
+ from typing import Iterable, Iterator, Tuple, Union
3
3
 
4
4
  from ...utils import (
5
5
  OUTPUT_DIR,
@@ -50,24 +50,15 @@ def iterate_all_data(
50
50
  yield SigmaAsset.LINEAGES, list(deep_serialize(lineages))
51
51
 
52
52
 
53
- def extract_all(
54
- host: Optional[str] = None,
55
- client_id: Optional[str] = None,
56
- api_token: Optional[str] = None,
57
- output_directory: Optional[str] = None,
58
- ) -> None:
53
+ def extract_all(**kwargs) -> None:
59
54
  """
60
55
  Extract data from Sigma API
61
56
  Store the output files locally under the given output_directory
62
57
  """
63
58
 
64
- _output_directory = output_directory or from_env(OUTPUT_DIR)
59
+ _output_directory = kwargs.get("output") or from_env(OUTPUT_DIR)
65
60
 
66
- credentials = SigmaCredentials(
67
- host=host,
68
- client_id=client_id,
69
- api_token=api_token,
70
- )
61
+ credentials = SigmaCredentials(**kwargs)
71
62
  client = SigmaClient(credentials=credentials)
72
63
 
73
64
  ts = current_timestamp()
@@ -1,13 +1,14 @@
1
+ import itertools
1
2
  import logging
2
- from typing import List, Optional, Set, Tuple
3
+ from typing import List, Optional, Set
3
4
 
4
- from google.api_core.exceptions import Forbidden
5
- from google.api_core.page_iterator import Iterator as PageIterator
5
+ from google.api_core.exceptions import Forbidden # type: ignore
6
6
  from google.cloud.bigquery import Client as GoogleCloudClient # type: ignore
7
7
  from google.cloud.bigquery.dataset import Dataset # type: ignore
8
8
  from google.oauth2.service_account import Credentials # type: ignore
9
9
 
10
10
  from ...utils import SqlalchemyClient, retry
11
+ from .types import SetTwoString
11
12
 
12
13
  logger = logging.getLogger(__name__)
13
14
 
@@ -117,16 +118,50 @@ class BigQueryClient(SqlalchemyClient):
117
118
  ]
118
119
  return self._projects
119
120
 
120
- def get_regions(self) -> Set[Tuple[str, str]]:
121
+ def get_regions(self) -> SetTwoString:
121
122
  """
122
- Returns distinct (project_id, region) available for the given GCP client
123
+ Returns (project_id, region) available for the given GCP client
124
+ - Loops trough projects -> datasets -> region
125
+ - Returns distinct values
126
+ Example:
127
+ project_A
128
+ -> dataset_1:US
129
+ project_B
130
+ -> empty
131
+ project_C
132
+ -> dataset_2:EU
133
+ -> dataset_3:EU
134
+ Will return:
135
+ { (p_A, US), (p_C, EU) }
123
136
  """
124
137
  return {
125
138
  (ds.project, ds._properties["location"])
126
139
  for ds in self._list_datasets()
127
140
  }
128
141
 
129
- def get_datasets(self) -> Set[Tuple[str, str]]:
142
+ def get_extended_regions(self) -> SetTwoString:
143
+ """
144
+ Returns all combinations of (project_id, region) for the given client
145
+ - Fetch all projects
146
+ - Fetch all regions (cross projects)
147
+ - Returns a combination of the two lists
148
+ Example:
149
+ project_A
150
+ -> dataset_1:US
151
+ project_B
152
+ -> empty
153
+ project_C
154
+ -> dataset_2:EU
155
+ -> dataset_3:EU
156
+ Will return:
157
+ { (p_A, EU), (p_A, US), (p_B, EU), (p_B, US), (p_C, EU), (p_C, US) }
158
+ """
159
+ projects = self.get_projects()
160
+ regions = {ds._properties["location"] for ds in self._list_datasets()}
161
+ combinations = itertools.product(projects, regions)
162
+ return set(combinations)
163
+
164
+ def get_datasets(self) -> SetTwoString:
130
165
  """
131
166
  Returns distinct (project_id, dataset_id) available for the given GCP client
132
167
  """
@@ -68,6 +68,7 @@ def extract_all(**kwargs) -> None:
68
68
  query_builder = BigQueryQueryBuilder(
69
69
  regions=client.get_regions(),
70
70
  datasets=client.get_datasets(),
71
+ extended_regions=client.get_extended_regions(),
71
72
  )
72
73
 
73
74
  storage = LocalStorage(directory=output_directory)