castor-extractor 0.3.4__tar.gz → 0.3.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 (266) hide show
  1. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/CHANGELOG.md +12 -0
  2. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/PKG-INFO +1 -1
  3. castor_extractor-0.3.7/castor_extractor/commands/__init__.py +3 -0
  4. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/commands/extract_metabase_api.py +1 -1
  5. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/commands/extract_metabase_db.py +1 -1
  6. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/file_checker/file.py +1 -1
  7. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/file_checker/file_test.py +1 -2
  8. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/transformation/dbt/client/client.py +22 -4
  9. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/uploader/upload_test.py +1 -1
  10. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/__init__.py +1 -0
  11. castor_extractor-0.3.7/castor_extractor/utils/deprecate.py +27 -0
  12. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/formatter_test.py +1 -1
  13. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/store.py +1 -1
  14. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/write.py +2 -0
  15. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/api/client.py +2 -2
  16. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/api/credentials.py +5 -5
  17. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/db/client.py +1 -1
  18. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/db/credentials.py +5 -5
  19. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/client.py +3 -3
  20. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/extract.py +1 -1
  21. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/client.py +1 -1
  22. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/pyproject.toml +1 -1
  23. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/setup.py +1 -1
  24. castor_extractor-0.3.4/castor_extractor/warehouse/__init__.py +0 -1
  25. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/LICENCE +0 -0
  26. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/README.md +0 -0
  27. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/__init__.py +0 -0
  28. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/commands/extract_bigquery.py +0 -0
  29. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/commands/extract_looker.py +0 -0
  30. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/commands/extract_mode.py +0 -0
  31. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/commands/extract_postgres.py +0 -0
  32. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/commands/extract_powerbi.py +0 -0
  33. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/commands/extract_qlik.py +0 -0
  34. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/commands/extract_redshift.py +0 -0
  35. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/commands/extract_snowflake.py +0 -0
  36. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/commands/extract_tableau.py +0 -0
  37. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/commands/file_check.py +0 -0
  38. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/commands/upload.py +0 -0
  39. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/file_checker/__init__.py +0 -0
  40. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/file_checker/column.py +0 -0
  41. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/file_checker/column_test.py +0 -0
  42. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/file_checker/constants.py +0 -0
  43. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/file_checker/enums.py +0 -0
  44. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/file_checker/file_test_users.csv +0 -0
  45. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/file_checker/file_test_users_valid.csv +0 -0
  46. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/file_checker/templates/__init__.py +0 -0
  47. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/file_checker/templates/generic_warehouse.py +0 -0
  48. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/logger.py +0 -0
  49. {castor_extractor-0.3.4/castor_extractor/commands → castor_extractor-0.3.7/castor_extractor/transformation}/__init__.py +0 -0
  50. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/transformation/dbt/__init__.py +0 -0
  51. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/transformation/dbt/assets.py +0 -0
  52. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/transformation/dbt/client/__init__.py +0 -0
  53. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/transformation/dbt/client/credentials.py +0 -0
  54. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/uploader/__init__.py +0 -0
  55. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/uploader/constant.py +0 -0
  56. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/uploader/env.py +0 -0
  57. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/uploader/env_test.py +0 -0
  58. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/uploader/upload.py +0 -0
  59. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/uploader/utils.py +0 -0
  60. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/collection.py +0 -0
  61. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/constants.py +0 -0
  62. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/env.py +0 -0
  63. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/files.py +0 -0
  64. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/files_test.py +0 -0
  65. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/formatter.py +0 -0
  66. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/formatter_test.csv +0 -0
  67. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/formatter_test.json +0 -0
  68. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/load.py +0 -0
  69. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/object.py +0 -0
  70. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/object_test.py +0 -0
  71. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/pager.py +0 -0
  72. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/pager_test.py +0 -0
  73. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/retry.py +0 -0
  74. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/retry_test.py +0 -0
  75. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/safe.py +0 -0
  76. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/safe_test.py +0 -0
  77. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/string.py +0 -0
  78. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/string_test.py +0 -0
  79. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/time.py +0 -0
  80. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/type.py +0 -0
  81. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/uri.py +0 -0
  82. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/uri_test.py +0 -0
  83. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/validation.py +0 -0
  84. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/utils/validation_test.py +0 -0
  85. {castor_extractor-0.3.4/castor_extractor/transformation → castor_extractor-0.3.7/castor_extractor/visualization}/__init__.py +0 -0
  86. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/__init__.py +0 -0
  87. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/api/__init__.py +0 -0
  88. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/api/client.py +0 -0
  89. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/api/client_test.py +0 -0
  90. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/api/constants.py +0 -0
  91. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/api/sdk.py +0 -0
  92. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/api/sdk_test.py +0 -0
  93. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/api/utils.py +0 -0
  94. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/assets.py +0 -0
  95. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/constant.py +0 -0
  96. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/env.py +0 -0
  97. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/extract.py +0 -0
  98. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/fields.py +0 -0
  99. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/fields_test.py +0 -0
  100. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/looker/parameters.py +0 -0
  101. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/__init__.py +0 -0
  102. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/assets.py +0 -0
  103. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/__init__.py +0 -0
  104. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/api/__init__.py +0 -0
  105. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/db/__init__.py +0 -0
  106. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/db/queries/.sqlfluff +0 -0
  107. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/db/queries/base_url.sql +0 -0
  108. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/db/queries/card.sql +0 -0
  109. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/db/queries/collection.sql +0 -0
  110. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/db/queries/dashboard.sql +0 -0
  111. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/db/queries/dashboard_cards.sql +0 -0
  112. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/db/queries/database.sql +0 -0
  113. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/db/queries/table.sql +0 -0
  114. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/db/queries/user.sql +0 -0
  115. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/decryption.py +0 -0
  116. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/decryption_test.py +0 -0
  117. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/client/shared.py +0 -0
  118. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/errors.py +0 -0
  119. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/extract.py +0 -0
  120. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/metabase/types.py +0 -0
  121. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/mode/__init__.py +0 -0
  122. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/mode/assets.py +0 -0
  123. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/mode/client/__init__.py +0 -0
  124. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/mode/client/client.py +0 -0
  125. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/mode/client/client_test.json +0 -0
  126. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/mode/client/client_test.py +0 -0
  127. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/mode/client/constants.py +0 -0
  128. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/mode/client/credentials.py +0 -0
  129. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/mode/errors.py +0 -0
  130. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/mode/extract.py +0 -0
  131. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/powerbi/__init__.py +0 -0
  132. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/powerbi/assets.py +0 -0
  133. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/powerbi/client/__init__.py +0 -0
  134. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/powerbi/client/constants.py +0 -0
  135. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/powerbi/client/credentials.py +0 -0
  136. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/powerbi/client/rest.py +0 -0
  137. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/powerbi/client/rest_test.py +0 -0
  138. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/powerbi/client/utils.py +0 -0
  139. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/powerbi/client/utils_test.py +0 -0
  140. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/powerbi/extract.py +0 -0
  141. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/__init__.py +0 -0
  142. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/assets.py +0 -0
  143. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/client/__init__.py +0 -0
  144. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/client/constants.py +0 -0
  145. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/client/engine/__init__.py +0 -0
  146. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/client/engine/client.py +0 -0
  147. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/client/engine/constants.py +0 -0
  148. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/client/engine/error.py +0 -0
  149. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/client/engine/error_test.py +0 -0
  150. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/client/engine/json_rpc.py +0 -0
  151. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/client/engine/json_rpc_test.py +0 -0
  152. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/client/engine/websocket.py +0 -0
  153. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/client/master.py +0 -0
  154. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/client/rest.py +0 -0
  155. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/client/rest_test.py +0 -0
  156. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/constants.py +0 -0
  157. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/qlik/extract.py +0 -0
  158. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/__init__.py +0 -0
  159. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/assets.py +0 -0
  160. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/client/__init__.py +0 -0
  161. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/client/client.py +0 -0
  162. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/client/client_utils.py +0 -0
  163. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/client/credentials.py +0 -0
  164. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/client/project.py +0 -0
  165. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/client/safe_mode.py +0 -0
  166. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/constants.py +0 -0
  167. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/errors.py +0 -0
  168. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/extract.py +0 -0
  169. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/gql_fields.py +0 -0
  170. {castor_extractor-0.3.4/castor_extractor/visualization → castor_extractor-0.3.7/castor_extractor/visualization/tableau/tests}/__init__.py +0 -0
  171. {castor_extractor-0.3.4/castor_extractor/visualization/tableau/tests → castor_extractor-0.3.7/castor_extractor/visualization/tableau/tests/unit}/__init__.py +0 -0
  172. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/assets/graphql/metadata/metadata_1_get.json +0 -0
  173. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/assets/graphql/metadata/metadata_2_get.json +0 -0
  174. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/auth.xml +0 -0
  175. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/project_get.xml +0 -0
  176. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/user_get.xml +0 -0
  177. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/view_get_usage.xml +0 -0
  178. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/workbook_get.xml +0 -0
  179. {castor_extractor-0.3.4/castor_extractor/visualization/tableau/tests/unit → castor_extractor-0.3.7/castor_extractor/visualization/tableau/tests/unit/graphql}/__init__.py +0 -0
  180. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/graphql/paginated_object_test.py +0 -0
  181. {castor_extractor-0.3.4/castor_extractor/visualization/tableau/tests/unit/graphql → castor_extractor-0.3.7/castor_extractor/visualization/tableau/tests/unit/rest_api}/__init__.py +0 -0
  182. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/rest_api/auth_test.py +0 -0
  183. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/rest_api/credentials_test.py +0 -0
  184. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/rest_api/projects_test.py +0 -0
  185. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/rest_api/usages_test.py +0 -0
  186. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/rest_api/users_test.py +0 -0
  187. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/rest_api/workbooks_test.py +0 -0
  188. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/utils/__init__.py +0 -0
  189. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tests/unit/utils/env_key.py +0 -0
  190. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/tsc_fields.py +0 -0
  191. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/types.py +0 -0
  192. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/visualization/tableau/usage.py +0 -0
  193. {castor_extractor-0.3.4/castor_extractor/visualization/tableau/tests/unit/rest_api → castor_extractor-0.3.7/castor_extractor/warehouse}/__init__.py +0 -0
  194. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/abstract/__init__.py +0 -0
  195. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/abstract/asset.py +0 -0
  196. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/abstract/client.py +0 -0
  197. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/abstract/extract.py +0 -0
  198. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/abstract/query.py +0 -0
  199. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/abstract/time_filter.py +0 -0
  200. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/abstract/time_filter_test.py +0 -0
  201. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/__init__.py +0 -0
  202. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/client_test.py +0 -0
  203. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/queries/.sqlfluff +0 -0
  204. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/queries/column.sql +0 -0
  205. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/queries/cte/sharded.sql +0 -0
  206. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/queries/database.sql +0 -0
  207. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/queries/query.sql +0 -0
  208. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/queries/schema.sql +0 -0
  209. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/queries/table.sql +0 -0
  210. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/queries/table_with_tags.sql +0 -0
  211. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/queries/user.sql +0 -0
  212. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/queries/view_ddl.sql +0 -0
  213. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/query.py +0 -0
  214. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/bigquery/types.py +0 -0
  215. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/postgres/__init__.py +0 -0
  216. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/postgres/client.py +0 -0
  217. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/postgres/extract.py +0 -0
  218. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/postgres/queries/.sqlfluff +0 -0
  219. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/postgres/queries/column.sql +0 -0
  220. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/postgres/queries/database.sql +0 -0
  221. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/postgres/queries/group.sql +0 -0
  222. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/postgres/queries/schema.sql +0 -0
  223. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/postgres/queries/table.sql +0 -0
  224. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/postgres/queries/user.sql +0 -0
  225. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/postgres/query.py +0 -0
  226. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/__init__.py +0 -0
  227. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/client.py +0 -0
  228. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/client_test.py +0 -0
  229. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/extract.py +0 -0
  230. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/queries/.sqlfluff +0 -0
  231. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/queries/column.sql +0 -0
  232. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/queries/database.sql +0 -0
  233. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/queries/group.sql +0 -0
  234. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/queries/query.sql +0 -0
  235. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/queries/schema.sql +0 -0
  236. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/queries/table.sql +0 -0
  237. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/queries/table_freshness.sql +0 -0
  238. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/queries/user.sql +0 -0
  239. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/queries/view_ddl.sql +0 -0
  240. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/redshift/query.py +0 -0
  241. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/__init__.py +0 -0
  242. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/client_test.py +0 -0
  243. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/extract.py +0 -0
  244. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/queries/.sqlfluff +0 -0
  245. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/queries/column.sql +0 -0
  246. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/queries/column_lineage.sql +0 -0
  247. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/queries/database.sql +0 -0
  248. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/queries/grant_to_role.sql +0 -0
  249. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/queries/grant_to_user.sql +0 -0
  250. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/queries/query.sql +0 -0
  251. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/queries/role.sql +0 -0
  252. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/queries/schema.sql +0 -0
  253. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/queries/table.sql +0 -0
  254. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/queries/user.sql +0 -0
  255. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/queries/view_ddl.sql +0 -0
  256. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/snowflake/query.py +0 -0
  257. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/synapse/__init__.py +0 -0
  258. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/synapse/extract.py +0 -0
  259. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/synapse/queries/.sqlfluff +0 -0
  260. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/synapse/queries/column.sql +0 -0
  261. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/synapse/queries/database.sql +0 -0
  262. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/synapse/queries/query.sql +0 -0
  263. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/synapse/queries/schema.sql +0 -0
  264. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/synapse/queries/table.sql +0 -0
  265. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/synapse/queries/user.sql +0 -0
  266. {castor_extractor-0.3.4 → castor_extractor-0.3.7}/castor_extractor/warehouse/synapse/queries/view_ddl.sql +0 -0
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.7 - 2023-04-28
4
+
5
+ * Warning message to deprecate python < 3.8
6
+
7
+ ## 0.3.6 - 2023-04-24
8
+
9
+ * Update enum keys for Metabase credentials
10
+
11
+ ## 0.3.5 - 2023-04-07
12
+
13
+ * Extract metadata from successful dbt runs only
14
+
3
15
  ## 0.3.4 - 2023-04-05
4
16
 
5
17
  * Enhance uploader to support `QUALITY` files
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: castor-extractor
3
- Version: 0.3.4
3
+ Version: 0.3.7
4
4
  Summary: Extract your metadata assets.
5
5
  Home-page: https://www.castordoc.com/
6
6
  License: EULA
@@ -0,0 +1,3 @@
1
+ from castor_extractor.utils import deprecate_python # type: ignore
2
+
3
+ deprecate_python(min_version_supported=(3, 8))
@@ -18,7 +18,7 @@ def main():
18
18
  args = parser.parse_args()
19
19
 
20
20
  client = metabase.ApiClient(
21
- base_url=args.base_url, username=args.username, password=args.password
21
+ base_url=args.base_url, user=args.username, password=args.password
22
22
  )
23
23
 
24
24
  metabase.extract_all(
@@ -31,7 +31,7 @@ def main():
31
31
  port=args.port,
32
32
  database=args.database,
33
33
  schema=args.schema,
34
- username=args.username,
34
+ user=args.username,
35
35
  password=args.password,
36
36
  encryption_secret_key=args.encryption_secret_key,
37
37
  )
@@ -125,7 +125,7 @@ class FileCheckerRun:
125
125
  return
126
126
  header = f"Issues detected on Row #{index+1}\n"
127
127
  for k, v in row.items():
128
- header += "{:<20} {:<100}\n".format(str(k), str(v))
128
+ header += f"{str(k):<20} {str(v):<100}\n"
129
129
  self.logger.info(header + _SEPARATOR + issue_log + _SEPARATOR)
130
130
 
131
131
  def occurrences(self, name: str) -> Set[str]:
@@ -13,8 +13,7 @@ _TEST_FILE_VALID = "file_test_users_valid.csv"
13
13
  def _content(path: str) -> Iterator[Dict]:
14
14
  absolute_path = os.path.join(os.path.dirname(__file__), path)
15
15
  with open(absolute_path) as csvfile:
16
- for row in csv.DictReader(csvfile):
17
- yield row
16
+ yield from csv.DictReader(csvfile)
18
17
 
19
18
 
20
19
  def _user_template() -> FileTemplate:
@@ -1,3 +1,4 @@
1
+ import logging
1
2
  from enum import Enum
2
3
  from typing import Optional
3
4
 
@@ -5,9 +6,12 @@ import requests
5
6
 
6
7
  from .credentials import CredentialsKey, DbtCredentials, get_value
7
8
 
9
+ logger = logging.getLogger(__name__)
10
+
8
11
  _CLOUD_URL = "https://cloud.getdbt.com/api/v2/accounts"
9
12
  _DATA_KEY = "data"
10
13
  _MANIFEST_PATH = "manifest.json"
14
+ _SUCCESSFUL_RUN_STATUS = 10
11
15
 
12
16
 
13
17
  class ContentType(Enum):
@@ -47,20 +51,32 @@ class DbtClient:
47
51
  headers=headers,
48
52
  params=params,
49
53
  )
50
- result = response.json()
51
- if content_type == ContentType.JSON:
52
- return result[_DATA_KEY]
53
- return result
54
+ try:
55
+ result = response.json()
56
+ except:
57
+ context = f"{url}, status {response.status_code}"
58
+ raise ValueError(f"Couldn't extract data from {context}")
59
+ else:
60
+ if content_type == ContentType.JSON:
61
+ return result[_DATA_KEY]
62
+ return result
54
63
 
55
64
  def _infer_account_id(self) -> int:
56
65
  result = self._call(url=_CLOUD_URL)
57
66
  return result[0]["id"]
58
67
 
59
68
  def _last_run_id(self) -> int:
69
+ """
70
+ Extract last successful run id
71
+ https://docs.getdbt.com/dbt-cloud/api-v2#tag/Runs/operation/listRunsForAccount
72
+ """
73
+
60
74
  url = f"{_CLOUD_URL}/{self._account_id}/runs/"
75
+
61
76
  params = {
62
77
  "job_definition_id": self._credentials.job_id,
63
78
  "order_by": "-finished_at",
79
+ "status": _SUCCESSFUL_RUN_STATUS,
64
80
  "limit": 1,
65
81
  }
66
82
  return self._call(url, params)[0]["id"]
@@ -72,6 +88,8 @@ class DbtClient:
72
88
  """
73
89
  run_id = self._last_run_id()
74
90
  url = f"{_CLOUD_URL}/{self._account_id}/runs/{run_id}/artifacts/{_MANIFEST_PATH}"
91
+ logger.info(f"Extracting manifest from run id {run_id} with url {url}")
92
+
75
93
  # setting text content as a workaround to this issue
76
94
  # https://stackoverflow.com/questions/68201659/dbt-cloud-api-to-extract-run-artifacts
77
95
  return self._call(url, content_type=ContentType.TEXT)
@@ -11,4 +11,4 @@ def test__path():
11
11
  file_path = "filename"
12
12
 
13
13
  path = _path(source_id, file_type, file_path)
14
- assert path == "visualization-{}/{}".format(source_id, file_path)
14
+ assert path == f"visualization-{source_id}/{file_path}"
@@ -1,5 +1,6 @@
1
1
  from .collection import group_by
2
2
  from .constants import OUTPUT_DIR
3
+ from .deprecate import deprecate_python
3
4
  from .env import from_env
4
5
  from .files import explode, search_files
5
6
  from .formatter import to_string_array
@@ -0,0 +1,27 @@
1
+ import logging
2
+ import sys
3
+ import warnings
4
+ from typing import Tuple
5
+
6
+ # DeprecationWarning is filtered by default
7
+ warnings.filterwarnings("once", category=DeprecationWarning)
8
+
9
+
10
+ def deprecate_python(min_version_supported: Tuple[int]):
11
+ """raises a warning if python version < min_version_supported"""
12
+
13
+ python_version = (
14
+ sys.version_info.major,
15
+ sys.version_info.minor,
16
+ sys.version_info.micro,
17
+ )
18
+
19
+ python_version_str = ".".join(map(str, python_version))
20
+ min_supported_str = ".".join(map(str, min_version_supported))
21
+
22
+ if python_version < min_version_supported:
23
+ warnings.warn(
24
+ f"You are using python version {python_version_str}, please upgrade to version {min_supported_str} or higher."
25
+ " Your version will be soon deprecated",
26
+ DeprecationWarning,
27
+ )
@@ -37,7 +37,7 @@ SAMPLE_FILE = "formatter_test"
37
37
  def _test(formatter: Formatter) -> None:
38
38
  root = os.path.dirname(__file__)
39
39
  path = os.path.join(root, f"{SAMPLE_FILE}.{formatter.extension()}")
40
- with open(path) as file:
40
+ with open(path, "r") as file:
41
41
  rows = list(formatter.deserialize(file))
42
42
  first = rows[0]
43
43
 
@@ -67,5 +67,5 @@ class LocalStorage(AbstractStorage):
67
67
 
68
68
  def get(self, name: str) -> Iterator[dict]:
69
69
  path = self.path(name)
70
- with open(path) as file:
70
+ with open(path, "r") as file:
71
71
  return self._formatter.deserialize(StringIO(file.read()))
@@ -1,6 +1,7 @@
1
1
  import json
2
2
  import logging
3
3
  import os
4
+ import sys
4
5
  from datetime import datetime
5
6
  from typing import Any, List
6
7
 
@@ -51,6 +52,7 @@ def write_summary(output_directory: str, ts: int, **kwargs):
51
52
  write_json(
52
53
  summary,
53
54
  {
55
+ "python_version": sys.version,
54
56
  "version": _current_version(),
55
57
  "executed_at": datetime.fromtimestamp(ts).isoformat(),
56
58
  **kwargs,
@@ -33,7 +33,7 @@ class ApiClient:
33
33
  ):
34
34
  self._credentials = CredentialsApi(
35
35
  base_url=get_value(CredentialsApiKey.BASE_URL, kwargs),
36
- username=get_value(CredentialsApiKey.USERNAME, kwargs),
36
+ user=get_value(CredentialsApiKey.USER, kwargs),
37
37
  password=get_value(CredentialsApiKey.PASSWORD, kwargs),
38
38
  )
39
39
  self._session = requests.Session()
@@ -91,7 +91,7 @@ class ApiClient:
91
91
  def _login(self) -> str:
92
92
  url = self._url("session")
93
93
  payload = {
94
- "username": self._credentials.username,
94
+ "username": self._credentials.user,
95
95
  "password": self._credentials.password,
96
96
  }
97
97
  response = self._session.post(url, json=payload)
@@ -6,13 +6,13 @@ from .....utils import from_env
6
6
 
7
7
  class CredentialsApiKey(Enum):
8
8
  BASE_URL = "base_url"
9
- USERNAME = "username"
9
+ USER = "user"
10
10
  PASSWORD = "password"
11
11
 
12
12
 
13
13
  CREDENTIALS_ENV: Dict[CredentialsApiKey, str] = {
14
14
  CredentialsApiKey.BASE_URL: "CASTOR_METABASE_API_BASE_URL",
15
- CredentialsApiKey.USERNAME: "CASTOR_METABASE_API_USERNAME",
15
+ CredentialsApiKey.USER: "CASTOR_METABASE_API_USERNAME",
16
16
  CredentialsApiKey.PASSWORD: "CASTOR_METABASE_API_PASSWORD",
17
17
  }
18
18
 
@@ -30,13 +30,13 @@ def get_value(key: CredentialsApiKey, kwargs: dict) -> str:
30
30
  class CredentialsApi:
31
31
  """ValueObject for the credentials"""
32
32
 
33
- def __init__(self, base_url: str, username: str, password: str):
33
+ def __init__(self, base_url: str, user: str, password: str):
34
34
  self.base_url = base_url
35
- self.username = username
35
+ self.user = user
36
36
  self.password = password
37
37
 
38
38
  def to_dict(self, hide: bool = False) -> Dict[str, str]:
39
- safe = (CredentialsApiKey.BASE_URL, CredentialsApiKey.USERNAME)
39
+ safe = (CredentialsApiKey.BASE_URL, CredentialsApiKey.USER)
40
40
  unsafe = (CredentialsApiKey.PASSWORD,)
41
41
 
42
42
  def val(k: CredentialsApiKey, v: str) -> str:
@@ -37,7 +37,7 @@ class DbClient:
37
37
  port=get_value(CredentialsDbKey.PORT, kwargs),
38
38
  database=get_value(CredentialsDbKey.DATABASE, kwargs),
39
39
  schema=get_value(CredentialsDbKey.SCHEMA, kwargs),
40
- username=get_value(CredentialsDbKey.USERNAME, kwargs),
40
+ user=get_value(CredentialsDbKey.USER, kwargs),
41
41
  password=get_value(CredentialsDbKey.PASSWORD, kwargs),
42
42
  )
43
43
  self.encryption_secret_key = kwargs.get(
@@ -9,7 +9,7 @@ class CredentialsDbKey(Enum):
9
9
  PORT = "port"
10
10
  DATABASE = "database"
11
11
  SCHEMA = "schema"
12
- USERNAME = "username"
12
+ USER = "user"
13
13
  PASSWORD = "password"
14
14
 
15
15
 
@@ -18,7 +18,7 @@ CREDENTIALS_ENV: Dict[CredentialsDbKey, str] = {
18
18
  CredentialsDbKey.PORT: "CASTOR_METABASE_DB_PORT",
19
19
  CredentialsDbKey.DATABASE: "CASTOR_METABASE_DB_DATABASE",
20
20
  CredentialsDbKey.SCHEMA: "CASTOR_METABASE_DB_SCHEMA",
21
- CredentialsDbKey.USERNAME: "CASTOR_METABASE_DB_USERNAME",
21
+ CredentialsDbKey.USER: "CASTOR_METABASE_DB_USERNAME",
22
22
  CredentialsDbKey.PASSWORD: "CASTOR_METABASE_DB_PASSWORD",
23
23
  }
24
24
 
@@ -42,14 +42,14 @@ class CredentialsDb:
42
42
  port: str,
43
43
  database: str,
44
44
  schema: str,
45
- username: str,
45
+ user: str,
46
46
  password: str,
47
47
  ):
48
48
  self.host = host
49
49
  self.port = port
50
50
  self.database = database
51
51
  self.schema = schema
52
- self.username = username
52
+ self.user = user
53
53
  self.password = password
54
54
 
55
55
  def to_dict(self, hide: bool = False) -> Dict[str, str]:
@@ -58,7 +58,7 @@ class CredentialsDb:
58
58
  CredentialsDbKey.PORT,
59
59
  CredentialsDbKey.DATABASE,
60
60
  CredentialsDbKey.SCHEMA,
61
- CredentialsDbKey.USERNAME,
61
+ CredentialsDbKey.USER,
62
62
  )
63
63
  unsafe = (CredentialsDbKey.PASSWORD,)
64
64
 
@@ -86,13 +86,13 @@ class BigQueryClient(SqlalchemyClient):
86
86
  """
87
87
  Returns distinct (project_id, region) available for the given GCP client
88
88
  """
89
- return set(
89
+ return {
90
90
  (ds.project, ds._properties["location"])
91
91
  for ds in self._list_datasets()
92
- )
92
+ }
93
93
 
94
94
  def get_datasets(self) -> Set[Tuple[str, str]]:
95
95
  """
96
96
  Returns distinct (project_id, dataset_id) available for the given GCP client
97
97
  """
98
- return set((ds.project, ds.dataset_id) for ds in self._list_datasets())
98
+ return {(ds.project, ds.dataset_id) for ds in self._list_datasets()}
@@ -38,7 +38,7 @@ def _credentials(params: dict) -> dict:
38
38
  """extract GCP credentials"""
39
39
  path = params.get("credentials") or from_env(BIGQUERY_CREDENTIALS)
40
40
  logger.info(f"Credentials fetched from {path}")
41
- with open(path) as file:
41
+ with open(path, "r") as file:
42
42
  return cast(dict, json.load(file))
43
43
 
44
44
 
@@ -34,7 +34,7 @@ def _use(connection: Connection, resource: UseResource, name: str):
34
34
  DON'T COPY THIS CODE FOR ANOTHER PURPOSE
35
35
  """
36
36
  target = resource.value
37
- if not re.fullmatch("[\w_-]+", name):
37
+ if not re.fullmatch(r"[\w_-]+", name):
38
38
  raise NameError(f"{target} name invalid {name}")
39
39
  command = f'USE {target} "{name}"'
40
40
  logger.info(f"executing {command}")
@@ -3,7 +3,7 @@ requires = ["setuptools>=61.2"]
3
3
 
4
4
  [tool.poetry]
5
5
  name = "castor-extractor"
6
- version = "0.3.4"
6
+ version = "0.3.7"
7
7
  description = "Extract your metadata assets."
8
8
  authors = ["Castor <support@castordoc.com>"]
9
9
  license = "EULA"
@@ -130,7 +130,7 @@ entry_points = \
130
130
 
131
131
  setup_kwargs = {
132
132
  'name': 'castor-extractor',
133
- 'version': '0.3.4',
133
+ 'version': '0.3.7',
134
134
  'description': 'Extract your metadata assets.',
135
135
  'long_description': '# Castor Extractor <img src="https://app.castordoc.com/images/castor_icon_dark.svg" width=30 />\n\nThis library contains utilities to extract your metadata assets into `JSON` or `CSV` files, on your local machine.\nAfter extraction, those files can be pushed to Castor for ingestion.\n\n- Visualization assets are typically:\n - `dashboards`\n - `users`\n - `folders`\n - ...\n\n- Warehouse assets are typically:\n - `databases`\n - `schemas`\n - `tables`\n - `columns`\n - `queries`\n - ...\n\nIt also embeds utilities to help you push your metadata to Castor:\n\n- `File Checker` to validate your [generic](https://docs.castordoc.com/integrations/data-warehouses/generic-warehouse) CSV files before pushing to Castor\n- `Uploader` to push extracted files to our Google-Cloud-Storage (GCS)\n\n# Table of contents\n\n- [Castor Extractor ](#castor-extractor-)\n- [Table of contents](#table-of-contents)\n- [Installation](#installation)\n - [Create castor-env](#create-castor-env)\n - [PIP install](#pip-install)\n - [Create the output directory](#create-the-output-directory)\n- [Contact](#contact)\n\n# Installation\n\nRequirements: **python3.8+**\n<img src="https://upload.wikimedia.org/wikipedia/commons/c/c3/Python-logo-notext.svg" width=20 />\n\n## Create castor-env\n\nWe advise to create a dedicated [Python environment](https://docs.python.org/3/library/venv.html).\n\nHere\'s an example using `Pyenv` and Python `3.8.12`:\n\n- Install Pyenv\n\n```bash\nbrew install pyenv\nbrew install pyenv-virtualenv\n```\n\n- [optional] Update your `.bashrc` if you encounter this [issue](https://stackoverflow.com/questions/45577194/failed-to-activate-virtualenv-with-pyenv/45578839)\n\n```bash\neval "$(pyenv init -)"\neval "$(pyenv init --path)"\neval "$(pyenv virtualenv-init -)"\n```\n\n- [optional] Install python 3.8+\n\n```bash\npyenv versions # check your local python installations\n\npyenv install -v 3.8.12 # if none of the installed versions satisfy requirements 8+\n```\n\n- Create your virtual env\n\n```bash\npyenv virtualenv 3.8.12 castor-env # create a dedicated env\npyenv shell castor-env # activate the environment\n\n# optional checks\npython --version # should be `3.8.12`\npyenv version # should be `castor-env`\n```\n\n## PIP install\n\n⚠️ `castor-env` must be created AND activated first.\n\n```bash\npyenv shell castor-env\n(castor-env) $ # this means the environment is now active\n```\n\nℹ️ please upgrade `PIP` before installing Castor.\n\n```\npip install --upgrade pip\n```\n\nRun the following command to install `castor-extractor`:\n\n```\npip install castor-extractor\n```\n\nDepending on your use-case, you can also install one of the following `extras`:\n\n```\npip install castor-extractor[looker]\npip install castor-extractor[tableau]\npip install castor-extractor[metabase]\npip install castor-extractor[qlik]\npip install castor-extractor[bigquery]\npip install castor-extractor[redshift]\npip install castor-extractor[snowflake]\n```\n\n## Create the output directory\n\n```bash\nmkdir /tmp/castor\n```\n\nYou will provide this path in `extraction` scripts as following:\n\n```\ncastor-extract-bigquery --output=/tmp/castor\n```\n\nAlternatively, you can also set the following `ENV` in your `bashrc`:\n\n```bash\nexport CASTOR_OUTPUT_DIRECTORY="/tmp/castor"\n````\n\n# Contact\n\nFor any questions or bug report, contact us at [support@castordoc.com](mailto:support@castordoc.com)\n\n[Castor](https://castordoc.com) helps you find, understand, use your data assets\n',
136
136
  'author': 'Castor',