castor-extractor 0.21.9__tar.gz → 0.22.1__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 (444) hide show
  1. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/CHANGELOG.md +8 -0
  2. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/PKG-INFO +13 -6
  3. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/file_check.py +1 -2
  4. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/file_checker/column.py +5 -5
  5. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/file_checker/file.py +7 -7
  6. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/file_checker/file_test.py +2 -2
  7. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/file_checker/templates/generic_warehouse.py +4 -6
  8. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/confluence/client/client.py +2 -1
  9. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/confluence/extract.py +3 -2
  10. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/notion/client/client.py +3 -2
  11. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/notion/extract.py +3 -2
  12. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/quality/soda/client/client.py +2 -1
  13. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/quality/soda/client/pagination.py +1 -3
  14. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/types.py +3 -3
  15. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/uploader/env.py +2 -2
  16. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/uploader/upload.py +4 -3
  17. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/uploader/utils.py +1 -1
  18. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/__init__.py +1 -0
  19. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/abstract.py +2 -1
  20. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/api/auth.py +2 -2
  21. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/api/auth_test.py +2 -2
  22. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/api/client.py +3 -3
  23. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/api/pagination.py +3 -2
  24. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/api/safe_request.py +5 -5
  25. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/collection.py +7 -11
  26. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/dbt/client.py +3 -3
  27. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/dbt/client_test.py +2 -2
  28. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/deprecate.py +1 -2
  29. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/files.py +5 -5
  30. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/formatter.py +5 -4
  31. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/json_stream_write.py +2 -1
  32. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/object.py +2 -1
  33. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/pager/pager.py +2 -4
  34. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/pager/pager_on_id.py +2 -1
  35. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/pager/pager_on_id_test.py +5 -5
  36. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/pager/pager_test.py +3 -3
  37. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/retry.py +4 -3
  38. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/retry_test.py +2 -3
  39. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/safe.py +3 -3
  40. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/salesforce/client.py +2 -1
  41. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/salesforce/credentials.py +1 -3
  42. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/store.py +2 -1
  43. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/string.py +2 -2
  44. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/string_test.py +1 -3
  45. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/time.py +4 -0
  46. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/time_test.py +8 -1
  47. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/type.py +3 -2
  48. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/validation.py +4 -4
  49. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/write.py +2 -2
  50. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/domo/client/client.py +8 -7
  51. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/domo/client/credentials.py +2 -2
  52. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/domo/client/endpoints.py +2 -2
  53. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/domo/extract.py +3 -2
  54. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/api/client.py +17 -16
  55. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/api/utils.py +2 -2
  56. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/assets.py +1 -3
  57. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/extract.py +4 -3
  58. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/fields.py +3 -3
  59. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/multithreading.py +3 -3
  60. castor_extractor-0.22.1/castor_extractor/visualization/looker_studio/__init__.py +6 -0
  61. castor_extractor-0.22.1/castor_extractor/visualization/looker_studio/assets.py +6 -0
  62. castor_extractor-0.22.1/castor_extractor/visualization/looker_studio/client/__init__.py +3 -0
  63. castor_extractor-0.22.1/castor_extractor/visualization/looker_studio/client/admin_sdk_client.py +90 -0
  64. castor_extractor-0.22.1/castor_extractor/visualization/looker_studio/client/client.py +37 -0
  65. castor_extractor-0.22.1/castor_extractor/visualization/looker_studio/client/credentials.py +20 -0
  66. castor_extractor-0.22.1/castor_extractor/visualization/looker_studio/client/endpoints.py +18 -0
  67. castor_extractor-0.22.1/castor_extractor/visualization/looker_studio/client/enums.py +8 -0
  68. castor_extractor-0.22.1/castor_extractor/visualization/looker_studio/client/looker_studio_api_client.py +102 -0
  69. castor_extractor-0.22.1/castor_extractor/visualization/looker_studio/client/pagination.py +31 -0
  70. castor_extractor-0.22.1/castor_extractor/visualization/looker_studio/client/scopes.py +6 -0
  71. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/assets.py +1 -3
  72. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/api/client.py +8 -7
  73. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/extract.py +3 -2
  74. castor_extractor-0.22.1/castor_extractor/visualization/metabase/types.py +1 -0
  75. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/mode/client/client.py +6 -6
  76. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/mode/extract.py +2 -2
  77. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/powerbi/assets.py +1 -3
  78. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/powerbi/client/client.py +12 -11
  79. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/powerbi/client/credentials.py +3 -3
  80. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/powerbi/client/endpoints.py +2 -2
  81. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/powerbi/extract.py +3 -2
  82. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/assets.py +1 -3
  83. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/client/constants.py +1 -3
  84. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/client/engine/error.py +1 -3
  85. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/client/master.py +3 -3
  86. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/client/rest.py +12 -12
  87. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/extract.py +4 -3
  88. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/salesforce_reporting/client/rest.py +3 -2
  89. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/salesforce_reporting/client/soql.py +1 -3
  90. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/salesforce_reporting/extract.py +3 -2
  91. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/sigma/client/client.py +9 -8
  92. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/sigma/client/credentials.py +1 -3
  93. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/sigma/extract.py +3 -2
  94. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/assets.py +1 -2
  95. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/client/client.py +1 -2
  96. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/client/client_utils.py +3 -2
  97. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/client/credentials.py +3 -3
  98. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/client/safe_mode.py +1 -2
  99. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/extract.py +2 -2
  100. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/gql_fields.py +3 -3
  101. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tsc_fields.py +1 -2
  102. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/types.py +3 -3
  103. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau_revamp/client/client_metadata_api.py +3 -2
  104. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau_revamp/client/client_rest_api.py +3 -3
  105. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau_revamp/client/client_tsc.py +3 -2
  106. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau_revamp/client/gql_queries.py +1 -3
  107. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau_revamp/client/rest_fields.py +1 -3
  108. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau_revamp/extract.py +2 -2
  109. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/thoughtspot/client/client.py +3 -2
  110. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/thoughtspot/client/utils.py +1 -1
  111. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/thoughtspot/extract.py +3 -2
  112. castor_extractor-0.22.1/castor_extractor/warehouse/__init__.py +0 -0
  113. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/abstract/asset.py +4 -5
  114. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/abstract/extract.py +4 -3
  115. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/abstract/query.py +4 -4
  116. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/client.py +8 -8
  117. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/extract.py +1 -1
  118. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/query.py +2 -2
  119. castor_extractor-0.22.1/castor_extractor/warehouse/bigquery/types.py +2 -0
  120. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/api_client.py +15 -14
  121. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/client.py +16 -16
  122. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/extract.py +4 -4
  123. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/format.py +12 -12
  124. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/lineage.py +11 -11
  125. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/pagination.py +2 -2
  126. castor_extractor-0.22.1/castor_extractor/warehouse/databricks/types.py +8 -0
  127. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/utils.py +5 -4
  128. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/mysql/query.py +2 -2
  129. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/postgres/query.py +2 -2
  130. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/client.py +1 -1
  131. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/query.py +2 -2
  132. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/salesforce/client.py +8 -8
  133. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/salesforce/extract.py +3 -4
  134. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/salesforce/format.py +19 -11
  135. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/salesforce/format_test.py +24 -10
  136. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/query.py +5 -5
  137. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/sqlserver/client.py +1 -1
  138. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/sqlserver/query.py +2 -2
  139. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/pyproject.toml +9 -8
  140. castor_extractor-0.21.9/castor_extractor/commands/__init__.py +0 -3
  141. castor_extractor-0.21.9/castor_extractor/visualization/metabase/types.py +0 -3
  142. castor_extractor-0.21.9/castor_extractor/warehouse/bigquery/types.py +0 -4
  143. castor_extractor-0.21.9/castor_extractor/warehouse/databricks/types.py +0 -8
  144. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/Dockerfile +0 -0
  145. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/DockerfileUsage.md +0 -0
  146. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/LICENCE +0 -0
  147. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/README.md +0 -0
  148. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/__init__.py +0 -0
  149. {castor_extractor-0.21.9/castor_extractor/knowledge → castor_extractor-0.22.1/castor_extractor/commands}/__init__.py +0 -0
  150. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_bigquery.py +0 -0
  151. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_confluence.py +0 -0
  152. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_databricks.py +0 -0
  153. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_domo.py +0 -0
  154. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_looker.py +0 -0
  155. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_metabase_api.py +0 -0
  156. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_metabase_db.py +0 -0
  157. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_mode.py +0 -0
  158. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_mysql.py +0 -0
  159. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_notion.py +0 -0
  160. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_postgres.py +0 -0
  161. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_powerbi.py +0 -0
  162. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_qlik.py +0 -0
  163. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_redshift.py +0 -0
  164. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_salesforce.py +0 -0
  165. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_salesforce_reporting.py +0 -0
  166. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_sigma.py +0 -0
  167. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_snowflake.py +0 -0
  168. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_sqlserver.py +0 -0
  169. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_tableau.py +0 -0
  170. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/extract_thoughtspot.py +0 -0
  171. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/commands/upload.py +0 -0
  172. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/file_checker/__init__.py +0 -0
  173. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/file_checker/column_test.py +0 -0
  174. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/file_checker/constants.py +0 -0
  175. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/file_checker/enums.py +0 -0
  176. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/file_checker/file_test_users.csv +0 -0
  177. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/file_checker/file_test_users_valid.csv +0 -0
  178. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/file_checker/templates/__init__.py +0 -0
  179. {castor_extractor-0.21.9/castor_extractor/quality → castor_extractor-0.22.1/castor_extractor/knowledge}/__init__.py +0 -0
  180. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/confluence/__init__.py +0 -0
  181. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/confluence/assets.py +0 -0
  182. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/confluence/client/__init__.py +0 -0
  183. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/confluence/client/credentials.py +0 -0
  184. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/confluence/client/endpoints.py +0 -0
  185. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/confluence/client/pagination.py +0 -0
  186. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/notion/__init__.py +0 -0
  187. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/notion/assets.py +0 -0
  188. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/notion/client/__init__.py +0 -0
  189. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/notion/client/client_test.py +0 -0
  190. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/notion/client/constants.py +0 -0
  191. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/notion/client/credentials.py +0 -0
  192. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/notion/client/endpoints.py +0 -0
  193. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/knowledge/notion/client/pagination.py +0 -0
  194. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/logger.py +0 -0
  195. {castor_extractor-0.21.9/castor_extractor/visualization → castor_extractor-0.22.1/castor_extractor/quality}/__init__.py +0 -0
  196. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/quality/soda/__init__.py +0 -0
  197. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/quality/soda/assets.py +0 -0
  198. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/quality/soda/client/__init__.py +0 -0
  199. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/quality/soda/client/credentials.py +0 -0
  200. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/quality/soda/client/endpoints.py +0 -0
  201. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/uploader/__init__.py +0 -0
  202. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/uploader/constant.py +0 -0
  203. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/uploader/env_test.py +0 -0
  204. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/uploader/settings.py +0 -0
  205. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/uploader/upload_test.py +0 -0
  206. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/argument_parser.py +0 -0
  207. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/argument_parser_test.py +0 -0
  208. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/__init__.py +0 -0
  209. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/api/__init__.py +0 -0
  210. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/api/client_test.py +0 -0
  211. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/api/pagination_test.py +0 -0
  212. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/api/safe_request_test.py +0 -0
  213. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/api/utils.py +0 -0
  214. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/api/utils_test.py +0 -0
  215. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/postgres.py +0 -0
  216. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/query.py +0 -0
  217. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/uri.py +0 -0
  218. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/client/uri_test.py +0 -0
  219. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/collection_test.py +0 -0
  220. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/constants.py +0 -0
  221. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/dbt/__init__.py +0 -0
  222. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/dbt/assets.py +0 -0
  223. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/dbt/credentials.py +0 -0
  224. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/env.py +0 -0
  225. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/files_test.py +0 -0
  226. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/formatter_test.csv +0 -0
  227. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/formatter_test.json +0 -0
  228. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/formatter_test.py +0 -0
  229. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/load.py +0 -0
  230. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/object_test.py +0 -0
  231. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/pager/__init__.py +0 -0
  232. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/safe_test.py +0 -0
  233. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/salesforce/__init__.py +0 -0
  234. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/salesforce/client_test.py +0 -0
  235. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/salesforce/constants.py +0 -0
  236. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/salesforce/credentials_test.py +0 -0
  237. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/salesforce/pagination.py +0 -0
  238. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/utils/validation_test.py +0 -0
  239. {castor_extractor-0.21.9/castor_extractor/visualization/tableau/tests → castor_extractor-0.22.1/castor_extractor/visualization}/__init__.py +0 -0
  240. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/domo/__init__.py +0 -0
  241. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/domo/assets.py +0 -0
  242. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/domo/client/__init__.py +0 -0
  243. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/domo/client/pagination.py +0 -0
  244. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/domo/client/pagination_test.py +0 -0
  245. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/__init__.py +0 -0
  246. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/api/__init__.py +0 -0
  247. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/api/client_test.py +0 -0
  248. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/api/constants.py +0 -0
  249. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/api/credentials.py +0 -0
  250. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/api/extraction_parameters.py +0 -0
  251. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/api/sdk.py +0 -0
  252. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/api/sdk_test.py +0 -0
  253. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/constant.py +0 -0
  254. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/constants.py +0 -0
  255. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/looker/fields_test.py +0 -0
  256. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/__init__.py +0 -0
  257. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/__init__.py +0 -0
  258. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/api/__init__.py +0 -0
  259. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/api/client_test.py +0 -0
  260. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/api/credentials.py +0 -0
  261. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/db/__init__.py +0 -0
  262. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/db/client.py +0 -0
  263. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/db/credentials.py +0 -0
  264. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/db/queries/.sqlfluff +0 -0
  265. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/db/queries/base_url.sql +0 -0
  266. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/db/queries/card.sql +0 -0
  267. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/db/queries/collection.sql +0 -0
  268. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/db/queries/dashboard.sql +0 -0
  269. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/db/queries/dashboard_cards.sql +0 -0
  270. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/db/queries/database.sql +0 -0
  271. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/db/queries/table.sql +0 -0
  272. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/db/queries/user.sql +0 -0
  273. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/decryption.py +0 -0
  274. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/decryption_test.py +0 -0
  275. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/client/shared.py +0 -0
  276. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/metabase/errors.py +0 -0
  277. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/mode/__init__.py +0 -0
  278. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/mode/assets.py +0 -0
  279. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/mode/client/__init__.py +0 -0
  280. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/mode/client/client_test.json +0 -0
  281. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/mode/client/client_test.py +0 -0
  282. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/mode/client/constants.py +0 -0
  283. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/mode/client/credentials.py +0 -0
  284. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/mode/errors.py +0 -0
  285. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/powerbi/__init__.py +0 -0
  286. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/powerbi/client/__init__.py +0 -0
  287. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/powerbi/client/authentication.py +0 -0
  288. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/powerbi/client/client_test.py +0 -0
  289. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/powerbi/client/constants.py +0 -0
  290. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/powerbi/client/credentials_test.py +0 -0
  291. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/powerbi/client/pagination.py +0 -0
  292. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/__init__.py +0 -0
  293. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/client/__init__.py +0 -0
  294. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/client/engine/__init__.py +0 -0
  295. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/client/engine/client.py +0 -0
  296. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/client/engine/constants.py +0 -0
  297. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/client/engine/credentials.py +0 -0
  298. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/client/engine/error_test.py +0 -0
  299. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/client/engine/json_rpc.py +0 -0
  300. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/client/engine/json_rpc_test.py +0 -0
  301. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/client/engine/websocket.py +0 -0
  302. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/qlik/client/rest_test.py +0 -0
  303. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/salesforce_reporting/__init__.py +0 -0
  304. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/salesforce_reporting/assets.py +0 -0
  305. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/salesforce_reporting/client/__init__.py +0 -0
  306. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/sigma/__init__.py +0 -0
  307. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/sigma/assets.py +0 -0
  308. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/sigma/client/__init__.py +0 -0
  309. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/sigma/client/endpoints.py +0 -0
  310. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/sigma/client/pagination.py +0 -0
  311. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/__init__.py +0 -0
  312. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/client/__init__.py +0 -0
  313. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/client/project.py +0 -0
  314. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/constants.py +0 -0
  315. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/errors.py +0 -0
  316. {castor_extractor-0.21.9/castor_extractor/visualization/tableau/tests/unit → castor_extractor-0.22.1/castor_extractor/visualization/tableau/tests}/__init__.py +0 -0
  317. {castor_extractor-0.21.9/castor_extractor/visualization/tableau/tests/unit/graphql → castor_extractor-0.22.1/castor_extractor/visualization/tableau/tests/unit}/__init__.py +0 -0
  318. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/assets/graphql/metadata/metadata_1_get.json +0 -0
  319. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/assets/graphql/metadata/metadata_2_get.json +0 -0
  320. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/auth.xml +0 -0
  321. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/project_get.xml +0 -0
  322. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/user_get.xml +0 -0
  323. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/view_get_usage.xml +0 -0
  324. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/assets/rest_api/workbook_get.xml +0 -0
  325. {castor_extractor-0.21.9/castor_extractor/visualization/tableau/tests/unit/rest_api → castor_extractor-0.22.1/castor_extractor/visualization/tableau/tests/unit/graphql}/__init__.py +0 -0
  326. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/graphql/paginated_object_test.py +0 -0
  327. {castor_extractor-0.21.9/castor_extractor/warehouse → castor_extractor-0.22.1/castor_extractor/visualization/tableau/tests/unit/rest_api}/__init__.py +0 -0
  328. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/rest_api/auth_test.py +0 -0
  329. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/rest_api/credentials_test.py +0 -0
  330. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/rest_api/projects_test.py +0 -0
  331. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/rest_api/usages_test.py +0 -0
  332. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/rest_api/users_test.py +0 -0
  333. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/rest_api/workbooks_test.py +0 -0
  334. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/utils/__init__.py +0 -0
  335. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/tests/unit/utils/env_key.py +0 -0
  336. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau/usage.py +0 -0
  337. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau_revamp/__init__.py +0 -0
  338. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau_revamp/assets.py +0 -0
  339. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau_revamp/client/__init__.py +0 -0
  340. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau_revamp/client/client.py +0 -0
  341. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau_revamp/client/credentials.py +0 -0
  342. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau_revamp/client/errors.py +0 -0
  343. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/tableau_revamp/constants.py +0 -0
  344. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/thoughtspot/__init__.py +0 -0
  345. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/thoughtspot/assets.py +0 -0
  346. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/thoughtspot/client/__init__.py +0 -0
  347. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/thoughtspot/client/credentials.py +0 -0
  348. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/thoughtspot/client/endpoints.py +0 -0
  349. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/visualization/thoughtspot/client/utils_test.py +0 -0
  350. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/abstract/__init__.py +0 -0
  351. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/abstract/asset_test.py +0 -0
  352. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/abstract/time_filter.py +0 -0
  353. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/abstract/time_filter_test.py +0 -0
  354. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/__init__.py +0 -0
  355. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/client_test.py +0 -0
  356. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/credentials.py +0 -0
  357. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/queries/.sqlfluff +0 -0
  358. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/queries/column.sql +0 -0
  359. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/queries/cte/sharded.sql +0 -0
  360. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/queries/database.sql +0 -0
  361. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/queries/query.sql +0 -0
  362. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/queries/schema.sql +0 -0
  363. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/queries/table.sql +0 -0
  364. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/queries/table_with_tags.sql +0 -0
  365. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/queries/user.sql +0 -0
  366. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/bigquery/queries/view_ddl.sql +0 -0
  367. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/__init__.py +0 -0
  368. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/api_client_test.py +0 -0
  369. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/client_test.py +0 -0
  370. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/credentials.py +0 -0
  371. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/endpoints.py +0 -0
  372. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/format_test.py +0 -0
  373. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/lineage_test.py +0 -0
  374. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/sql_client.py +0 -0
  375. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/test_constants.py +0 -0
  376. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/databricks/utils_test.py +0 -0
  377. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/mysql/__init__.py +0 -0
  378. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/mysql/client.py +0 -0
  379. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/mysql/client_test.py +0 -0
  380. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/mysql/extract.py +0 -0
  381. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/mysql/queries/.sqlfluff +0 -0
  382. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/mysql/queries/column.sql +0 -0
  383. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/mysql/queries/database.sql +0 -0
  384. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/mysql/queries/query.sql +0 -0
  385. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/mysql/queries/schema.sql +0 -0
  386. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/mysql/queries/table.sql +0 -0
  387. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/mysql/queries/user.sql +0 -0
  388. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/mysql/queries/view_ddl.sql +0 -0
  389. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/postgres/__init__.py +0 -0
  390. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/postgres/extract.py +0 -0
  391. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/postgres/queries/.sqlfluff +0 -0
  392. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/postgres/queries/column.sql +0 -0
  393. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/postgres/queries/database.sql +0 -0
  394. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/postgres/queries/group.sql +0 -0
  395. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/postgres/queries/schema.sql +0 -0
  396. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/postgres/queries/table.sql +0 -0
  397. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/postgres/queries/user.sql +0 -0
  398. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/__init__.py +0 -0
  399. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/client_test.py +0 -0
  400. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/extract.py +0 -0
  401. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/extract_test.py +0 -0
  402. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/queries/.sqlfluff +0 -0
  403. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/queries/column.sql +0 -0
  404. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/queries/database.sql +0 -0
  405. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/queries/group.sql +0 -0
  406. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/queries/query.sql +0 -0
  407. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/queries/query_serverless.sql +0 -0
  408. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/queries/schema.sql +0 -0
  409. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/queries/table.sql +0 -0
  410. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/queries/table_freshness.sql +0 -0
  411. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/queries/user.sql +0 -0
  412. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/redshift/queries/view_ddl.sql +0 -0
  413. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/salesforce/__init__.py +0 -0
  414. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/salesforce/constants.py +0 -0
  415. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/salesforce/pagination.py +0 -0
  416. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/salesforce/soql.py +0 -0
  417. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/__init__.py +0 -0
  418. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/client.py +0 -0
  419. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/client_test.py +0 -0
  420. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/credentials.py +0 -0
  421. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/credentials_test.py +0 -0
  422. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/extract.py +0 -0
  423. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/queries/.sqlfluff +0 -0
  424. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/queries/column.sql +0 -0
  425. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/queries/column_lineage.sql +0 -0
  426. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/queries/database.sql +0 -0
  427. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/queries/function.sql +0 -0
  428. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/queries/grant_to_role.sql +0 -0
  429. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/queries/grant_to_user.sql +0 -0
  430. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/queries/query.sql +0 -0
  431. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/queries/role.sql +0 -0
  432. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/queries/schema.sql +0 -0
  433. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/queries/table.sql +0 -0
  434. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/queries/user.sql +0 -0
  435. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/snowflake/queries/view_ddl.sql +0 -0
  436. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/sqlserver/__init__.py +0 -0
  437. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/sqlserver/extract.py +0 -0
  438. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/sqlserver/queries/.sqlfluff +0 -0
  439. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/sqlserver/queries/column.sql +0 -0
  440. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/sqlserver/queries/database.sql +0 -0
  441. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/sqlserver/queries/schema.sql +0 -0
  442. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/sqlserver/queries/table.sql +0 -0
  443. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/sqlserver/queries/user.sql +0 -0
  444. {castor_extractor-0.21.9 → castor_extractor-0.22.1}/castor_extractor/warehouse/synapse/queries/column.sql +0 -0
@@ -1,6 +1,14 @@
1
1
 
2
2
  # Changelog
3
3
 
4
+ ## 0.22.1 - 2024-12-05
5
+
6
+ * Salesforce: deduplicate tables
7
+
8
+ ## 0.22.0 - 2024-12-04
9
+
10
+ * Stop supporting python3.8
11
+
4
12
  ## 0.21.9 - 2024-12-04
5
13
 
6
14
  * Tableau: fix handling of timeout retry
@@ -1,16 +1,15 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: castor-extractor
3
- Version: 0.21.9
3
+ Version: 0.22.1
4
4
  Summary: Extract your metadata assets.
5
5
  Home-page: https://www.castordoc.com/
6
6
  License: EULA
7
7
  Author: Castor
8
8
  Author-email: support@castordoc.com
9
- Requires-Python: >=3.8,<3.13
9
+ Requires-Python: >=3.9,<3.13
10
10
  Classifier: License :: Other/Proprietary License
11
11
  Classifier: Operating System :: OS Independent
12
12
  Classifier: Programming Language :: Python :: 3
13
- Classifier: Programming Language :: Python :: 3.8
14
13
  Classifier: Programming Language :: Python :: 3.9
15
14
  Classifier: Programming Language :: Python :: 3.10
16
15
  Classifier: Programming Language :: Python :: 3.11
@@ -20,6 +19,7 @@ Provides-Extra: bigquery
20
19
  Provides-Extra: databricks
21
20
  Provides-Extra: dbt
22
21
  Provides-Extra: looker
22
+ Provides-Extra: lookerstudio
23
23
  Provides-Extra: metabase
24
24
  Provides-Extra: mysql
25
25
  Provides-Extra: postgres
@@ -32,6 +32,7 @@ Provides-Extra: tableau
32
32
  Requires-Dist: cryptography (>=43.0.0,<44.0.0) ; extra == "snowflake"
33
33
  Requires-Dist: databricks-sql-connector (>=3.2.0,<4.0.0) ; extra == "databricks" or extra == "all"
34
34
  Requires-Dist: google-api-core (>=2.1.1,<3.0.0)
35
+ Requires-Dist: google-api-python-client (>=2.121.0,<3.0.0) ; extra == "lookerstudio" or extra == "all"
35
36
  Requires-Dist: google-auth (>=2,<3)
36
37
  Requires-Dist: google-cloud-core (>=2.1.0,<3.0.0)
37
38
  Requires-Dist: google-cloud-storage (>=2,<3)
@@ -39,10 +40,8 @@ Requires-Dist: google-resumable-media (>=2.0.3,<3.0.0)
39
40
  Requires-Dist: googleapis-common-protos (>=1.53.0,<2.0.0)
40
41
  Requires-Dist: looker-sdk (>=24.16.0,<24.17.0) ; extra == "looker" or extra == "all"
41
42
  Requires-Dist: msal (>=1.20.0,<2.0.0) ; extra == "powerbi" or extra == "all"
42
- Requires-Dist: numpy (<1.25) ; (python_version >= "3.8" and python_version < "3.9") and (extra == "bigquery" or extra == "databricks" or extra == "all")
43
43
  Requires-Dist: numpy (<2) ; extra == "bigquery" or extra == "databricks" or extra == "all"
44
44
  Requires-Dist: numpy (>=1.26) ; (python_version >= "3.12" and python_version < "3.13") and (extra == "bigquery" or extra == "databricks" or extra == "all")
45
- Requires-Dist: pandas (<2.1) ; (python_version >= "3.8" and python_version < "3.9") and (extra == "databricks" or extra == "all")
46
45
  Requires-Dist: pandas (>=2.1) ; (python_version >= "3.12" and python_version < "3.13") and (extra == "databricks" or extra == "all")
47
46
  Requires-Dist: psycopg2-binary (>=2.0.0,<3.0.0) ; extra == "metabase" or extra == "postgres" or extra == "redshift" or extra == "all"
48
47
  Requires-Dist: pycryptodome (>=3.0.0,<4.0.0) ; extra == "metabase" or extra == "all"
@@ -52,7 +51,7 @@ Requires-Dist: pymssql (>=2.2.11,<3.0.0) ; extra == "sqlserver" or extra == "all
52
51
  Requires-Dist: pymysql[rsa] (>=1.1.0,<2.0.0) ; extra == "mysql" or extra == "all"
53
52
  Requires-Dist: python-dateutil (>=2.0.0,<=3.0.0)
54
53
  Requires-Dist: requests (>=2.0.0,<3.0.0)
55
- Requires-Dist: setuptools (>=75.3.0,<75.4.0)
54
+ Requires-Dist: setuptools (>=75.6)
56
55
  Requires-Dist: snowflake-connector-python (>=3.4.0,<4.0.0) ; extra == "snowflake" or extra == "all"
57
56
  Requires-Dist: snowflake-sqlalchemy (!=1.2.5,<2.0.0) ; extra == "snowflake" or extra == "all"
58
57
  Requires-Dist: sqlalchemy (>=1.4,<1.5)
@@ -208,6 +207,14 @@ For any questions or bug report, contact us at [support@castordoc.com](mailto:su
208
207
 
209
208
  # Changelog
210
209
 
210
+ ## 0.22.1 - 2024-12-05
211
+
212
+ * Salesforce: deduplicate tables
213
+
214
+ ## 0.22.0 - 2024-12-04
215
+
216
+ * Stop supporting python3.8
217
+
211
218
  ## 0.21.9 - 2024-12-04
212
219
 
213
220
  * Tableau: fix handling of timeout retry
@@ -1,7 +1,6 @@
1
1
  import logging
2
2
  import os
3
3
  from argparse import ArgumentParser
4
- from typing import Set
5
4
 
6
5
  from castor_extractor import file_checker # type: ignore
7
6
  from castor_extractor.utils import ( # type: ignore
@@ -15,7 +14,7 @@ logger = logging.getLogger(__name__)
15
14
 
16
15
  WarehouseTemplate = file_checker.GenericWarehouseFileTemplate
17
16
 
18
- Ids = Set[str]
17
+ Ids = set[str]
19
18
  _ID_KEY = "id"
20
19
 
21
20
 
@@ -1,11 +1,11 @@
1
- from typing import Callable, Dict, Optional, Set
1
+ from typing import Callable, Optional
2
2
 
3
3
  from dateutil.parser import parse
4
4
 
5
5
  from ..utils import string_to_tuple
6
6
  from .enums import DataType, Issue
7
7
 
8
- _CONVERTERS: Dict[DataType, Callable] = {
8
+ _CONVERTERS: dict[DataType, Callable] = {
9
9
  DataType.DATETIME: parse,
10
10
  DataType.FLOAT: float,
11
11
  DataType.INTEGER: int,
@@ -29,13 +29,13 @@ class ColumnChecker:
29
29
  data_type: DataType = DataType.STRING,
30
30
  is_mandatory: bool = True,
31
31
  is_unique: bool = False,
32
- foreign: Optional[Set[str]] = None,
33
- enum_values: Optional[Set[str]] = None,
32
+ foreign: Optional[set[str]] = None,
33
+ enum_values: Optional[set[str]] = None,
34
34
  ):
35
35
  self.data_type = data_type
36
36
  self.is_mandatory = is_mandatory
37
37
  self.is_unique = is_unique
38
- self.occurrences: Set[str] = set()
38
+ self.occurrences: set[str] = set()
39
39
  self.foreign = foreign
40
40
  self.enum_values = enum_values
41
41
 
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Dict, Iterable, Iterator, Set
2
+ from collections.abc import Iterable, Iterator
3
3
 
4
4
  from .column import ColumnChecker
5
5
  from .enums import Issue
@@ -8,8 +8,8 @@ logger = logging.getLogger(__name__)
8
8
 
9
9
  _SEPARATOR = f"{30 * '-'}\n"
10
10
 
11
- FileTemplate = Dict[str, ColumnChecker] # column_name, column_checker
12
- IssueCounter = Dict[Issue, int] # occurrences per type of issue
11
+ FileTemplate = dict[str, ColumnChecker] # column_name, column_checker
12
+ IssueCounter = dict[Issue, int] # occurrences per type of issue
13
13
 
14
14
 
15
15
  class FileCheckerResults:
@@ -22,7 +22,7 @@ class FileCheckerResults:
22
22
  self.total_rows: int = 0
23
23
  self.valid_rows: int = 0
24
24
  self.counter: IssueCounter = {issue: 0 for issue in Issue}
25
- self.indices: Set[int] = set()
25
+ self.indices: set[int] = set()
26
26
 
27
27
  def summary(self) -> str:
28
28
  """
@@ -67,7 +67,7 @@ class FileCheckerRun:
67
67
 
68
68
  def __init__(
69
69
  self,
70
- content: Iterable[Dict],
70
+ content: Iterable[dict],
71
71
  template: FileTemplate,
72
72
  file_name: str,
73
73
  verbose: bool = False,
@@ -128,7 +128,7 @@ class FileCheckerRun:
128
128
  header += f"{str(k):<20} {str(v):<100}\n"
129
129
  self.logger.info(header + _SEPARATOR + issue_log + _SEPARATOR)
130
130
 
131
- def occurrences(self, name: str) -> Set[str]:
131
+ def occurrences(self, name: str) -> set[str]:
132
132
  """
133
133
  Return values of the given column, provided:
134
134
  - the column exists in the template
@@ -158,7 +158,7 @@ class FileCheckerRun:
158
158
  for _ in self.valid_rows():
159
159
  pass
160
160
 
161
- def valid_rows(self) -> Iterator[Dict]:
161
+ def valid_rows(self) -> Iterator[dict]:
162
162
  """
163
163
  Reads the file content and yields only valid rows.
164
164
  - Invalid rows are ignored
@@ -1,6 +1,6 @@
1
1
  import csv
2
2
  import os
3
- from typing import Dict, Iterator
3
+ from collections.abc import Iterator
4
4
 
5
5
  from .column import ColumnChecker
6
6
  from .enums import DataType, Issue
@@ -10,7 +10,7 @@ _TEST_FILE = "file_test_users.csv"
10
10
  _TEST_FILE_VALID = "file_test_users_valid.csv"
11
11
 
12
12
 
13
- def _content(path: str) -> Iterator[Dict]:
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
16
  yield from csv.DictReader(csvfile)
@@ -1,5 +1,3 @@
1
- from typing import Set
2
-
3
1
  from ..column import ColumnChecker
4
2
  from ..constants import TABLE_TYPES
5
3
  from ..enums import DataType
@@ -23,7 +21,7 @@ class GenericWarehouseFileTemplate:
23
21
  }
24
22
 
25
23
  @staticmethod
26
- def schema(database_ids: Set[str]) -> FileTemplate:
24
+ def schema(database_ids: set[str]) -> FileTemplate:
27
25
  return {
28
26
  "id": ColumnChecker(is_unique=True),
29
27
  "database_id": ColumnChecker(foreign=database_ids),
@@ -33,7 +31,7 @@ class GenericWarehouseFileTemplate:
33
31
  }
34
32
 
35
33
  @staticmethod
36
- def table(schema_ids: Set[str]) -> FileTemplate:
34
+ def table(schema_ids: set[str]) -> FileTemplate:
37
35
  return {
38
36
  "id": ColumnChecker(is_unique=True),
39
37
  "schema_id": ColumnChecker(foreign=schema_ids),
@@ -44,7 +42,7 @@ class GenericWarehouseFileTemplate:
44
42
  }
45
43
 
46
44
  @staticmethod
47
- def column(table_ids: Set[str]) -> FileTemplate:
45
+ def column(table_ids: set[str]) -> FileTemplate:
48
46
  return {
49
47
  "id": ColumnChecker(is_unique=True),
50
48
  "table_id": ColumnChecker(foreign=table_ids),
@@ -58,7 +56,7 @@ class GenericWarehouseFileTemplate:
58
56
  }
59
57
 
60
58
  @staticmethod
61
- def query(database_ids: Set[str], user_ids: Set[str]) -> FileTemplate:
59
+ def query(database_ids: set[str], user_ids: set[str]) -> FileTemplate:
62
60
  return {
63
61
  "database_id": ColumnChecker(foreign=database_ids),
64
62
  "query_text": ColumnChecker(),
@@ -1,6 +1,7 @@
1
+ from collections.abc import Iterator
1
2
  from functools import partial
2
3
  from http import HTTPStatus
3
- from typing import Iterator, Optional
4
+ from typing import Optional
4
5
 
5
6
  from ....utils import (
6
7
  APIClient,
@@ -1,5 +1,6 @@
1
1
  import logging
2
- from typing import Iterable, Iterator, Tuple, Union
2
+ from collections.abc import Iterable, Iterator
3
+ from typing import Union
3
4
 
4
5
  from ...utils import (
5
6
  OUTPUT_DIR,
@@ -18,7 +19,7 @@ logger = logging.getLogger(__name__)
18
19
 
19
20
  def iterate_all_data(
20
21
  client: ConfluenceClient,
21
- ) -> Iterable[Tuple[ConfluenceAsset, Union[list, Iterator, dict]]]:
22
+ ) -> Iterable[tuple[ConfluenceAsset, Union[list, Iterator, dict]]]:
22
23
  """Iterate over the extracted data from Confluence"""
23
24
 
24
25
  logger.info("Extracting USERS from API")
@@ -1,6 +1,7 @@
1
+ from collections.abc import Iterator
1
2
  from functools import partial
2
3
  from http import HTTPStatus
3
- from typing import Dict, Iterator, Optional
4
+ from typing import Optional
4
5
 
5
6
  from ....utils import APIClient, BearerAuth, RequestSafeMode, fetch_all_pages
6
7
  from ..assets import NotionAsset
@@ -23,7 +24,7 @@ NOTION_BASE_HEADERS = {
23
24
  NOTION_DEFAULT_TIMEOUT_S = 180
24
25
 
25
26
 
26
- def _search_filter(asset: str) -> Dict[str, Dict[str, str]]:
27
+ def _search_filter(asset: str) -> dict[str, dict[str, str]]:
27
28
  return {"filter": {"value": asset, "property": "object"}}
28
29
 
29
30
 
@@ -1,5 +1,6 @@
1
1
  import logging
2
- from typing import Iterable, Iterator, Tuple, Union
2
+ from collections.abc import Iterable, Iterator
3
+ from typing import Union
3
4
 
4
5
  from ...utils import (
5
6
  OUTPUT_DIR,
@@ -18,7 +19,7 @@ logger = logging.getLogger(__name__)
18
19
 
19
20
  def iterate_all_data(
20
21
  client: NotionClient,
21
- ) -> Iterable[Tuple[NotionAsset, Union[list, Iterator, dict]]]:
22
+ ) -> Iterable[tuple[NotionAsset, Union[list, Iterator, dict]]]:
22
23
  """Iterate over the extracted data from Notion"""
23
24
 
24
25
  logger.info("Extracting USERS from API")
@@ -1,5 +1,6 @@
1
+ from collections.abc import Iterator
1
2
  from functools import partial
2
- from typing import Callable, Iterator
3
+ from typing import Callable
3
4
 
4
5
  from ....utils import (
5
6
  APIClient,
@@ -1,12 +1,10 @@
1
- from typing import List
2
-
3
1
  from ....utils import PaginationModel
4
2
 
5
3
  _CLOUD_FIRST_PAGE = 0
6
4
 
7
5
 
8
6
  class SodaCloudPagination(PaginationModel):
9
- content: List[dict]
7
+ content: list[dict]
10
8
  last: bool
11
9
 
12
10
  def is_last(self) -> bool:
@@ -1,6 +1,6 @@
1
1
  from abc import ABC
2
2
  from enum import Enum
3
- from typing import Literal, Set, TypedDict
3
+ from typing import Literal, TypedDict
4
4
 
5
5
 
6
6
  class CsvOptions(TypedDict):
@@ -34,7 +34,7 @@ class ExternalAsset(Enum):
34
34
  __metaclass__ = ABC
35
35
 
36
36
  @classproperty
37
- def optional(cls) -> Set["ExternalAsset"]:
37
+ def optional(cls) -> set["ExternalAsset"]:
38
38
  """
39
39
  Returns the assets that are not necessarily extracted/pushed.
40
40
  Example:
@@ -46,7 +46,7 @@ class ExternalAsset(Enum):
46
46
  return set()
47
47
 
48
48
  @classproperty
49
- def mandatory(cls) -> Set["ExternalAsset"]:
49
+ def mandatory(cls) -> set["ExternalAsset"]:
50
50
  """
51
51
  Returns the assets that must always be provided.
52
52
  """
@@ -1,5 +1,5 @@
1
1
  import os
2
- from typing import Optional, Tuple
2
+ from typing import Optional
3
3
 
4
4
  from .constant import (
5
5
  DEFAULT_RETRY,
@@ -27,7 +27,7 @@ def _parse_int(value: Optional[str], default: int) -> int:
27
27
  return default
28
28
 
29
29
 
30
- def get_blob_env() -> Tuple[float, int]:
30
+ def get_blob_env() -> tuple[float, int]:
31
31
  """
32
32
  Retrieve timeout and retries values. It look for environment variables
33
33
  first and return default value otherwise
@@ -1,8 +1,9 @@
1
1
  #!/usr/bin/env python3
2
2
  import logging
3
3
  import ntpath
4
+ from collections.abc import Iterable
4
5
  from datetime import datetime
5
- from typing import Dict, Iterable, Optional, Tuple
6
+ from typing import Optional
6
7
  from uuid import UUID
7
8
 
8
9
  import requests
@@ -32,7 +33,7 @@ def _path_and_url(
32
33
  source_id: UUID,
33
34
  file_type: FileType,
34
35
  file_path: str,
35
- ) -> Tuple[str, str]:
36
+ ) -> tuple[str, str]:
36
37
  now = datetime.utcnow()
37
38
  timestamp = int(now.timestamp())
38
39
  filename = ntpath.basename(file_path)
@@ -48,7 +49,7 @@ def _path_and_url(
48
49
  return path, url
49
50
 
50
51
 
51
- def _headers(token: str) -> Dict:
52
+ def _headers(token: str) -> dict:
52
53
  return {
53
54
  "Authorization": f"Token {token}",
54
55
  "Accept": "text/csv, application/json",
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
  import os
3
- from typing import Iterator
3
+ from collections.abc import Iterator
4
4
 
5
5
  logger = logging.getLogger(__name__)
6
6
 
@@ -45,6 +45,7 @@ from .time import (
45
45
  current_timestamp,
46
46
  date_after,
47
47
  format_date,
48
+ format_rfc_3339_date,
48
49
  past_date,
49
50
  timestamp_ms,
50
51
  yesterday,
@@ -1,5 +1,6 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import Iterator, Optional, cast
2
+ from collections.abc import Iterator
3
+ from typing import Optional, cast
3
4
 
4
5
  from sqlalchemy import text
5
6
  from sqlalchemy.engine import Connection, ResultProxy, create_engine
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
  from abc import ABC, abstractmethod
3
- from typing import Dict, Optional, Union
3
+ from typing import Optional, Union
4
4
 
5
5
  from requests.auth import AuthBase, HTTPBasicAuth
6
6
 
@@ -33,7 +33,7 @@ class CustomAuth(AuthBase, ABC):
33
33
  pass
34
34
 
35
35
  @abstractmethod
36
- def _authentication_header(self) -> Dict[str, str]:
36
+ def _authentication_header(self) -> dict[str, str]:
37
37
  pass
38
38
 
39
39
  def __call__(self, r):
@@ -1,4 +1,4 @@
1
- from typing import Dict, Optional
1
+ from typing import Optional
2
2
 
3
3
  from .auth import BasicAuth, BearerAuth, CustomAuth
4
4
 
@@ -9,7 +9,7 @@ class _MockRequest:
9
9
 
10
10
 
11
11
  class _CustomAuth(CustomAuth):
12
- def _authentication_header(self) -> Dict[str, str]:
12
+ def _authentication_header(self) -> dict[str, str]:
13
13
  return {"custom-token": "token"}
14
14
 
15
15
 
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
  from http import HTTPStatus
3
- from typing import Callable, Dict, Literal, Optional, Tuple
3
+ from typing import Callable, Literal, Optional
4
4
 
5
5
  import requests
6
6
  from requests import Response
@@ -12,7 +12,7 @@ from .utils import build_url
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14
 
15
- Headers = Optional[Dict[str, str]]
15
+ Headers = Optional[dict[str, str]]
16
16
 
17
17
  # https://requests.readthedocs.io/en/latest/api/#requests.request
18
18
  HttpMethod = Literal["GET", "OPTIONS", "HEAD", "POST", "PUT", "PATCH", "DELETE"]
@@ -27,7 +27,7 @@ def _generate_payloads(
27
27
  params: Optional[dict],
28
28
  data: Optional[dict],
29
29
  pagination_params: Optional[dict],
30
- ) -> Tuple[Optional[dict], Optional[dict]]:
30
+ ) -> tuple[Optional[dict], Optional[dict]]:
31
31
  _pagination_params = pagination_params or {}
32
32
 
33
33
  if method == "GET":
@@ -1,9 +1,10 @@
1
1
  import logging
2
2
  from abc import abstractmethod
3
+ from collections.abc import Iterator
3
4
  from enum import Enum
4
5
  from functools import partial
5
6
  from time import sleep
6
- from typing import Callable, Iterator, Optional, Type, Union
7
+ from typing import Callable, Optional, Union
7
8
 
8
9
  from pydantic import BaseModel
9
10
 
@@ -56,7 +57,7 @@ class PaginationModel(BaseModel):
56
57
 
57
58
  def fetch_all_pages(
58
59
  request: Callable,
59
- pagination_model: Type[PaginationModel],
60
+ pagination_model: type[PaginationModel],
60
61
  rate_limit: Optional[int] = None,
61
62
  ) -> Iterator:
62
63
  """
@@ -1,11 +1,11 @@
1
1
  import logging
2
- from typing import Any, Callable, List, Optional, Tuple, Union
2
+ from typing import Any, Callable, Optional, Union
3
3
 
4
4
  from requests import HTTPError, Response
5
5
 
6
6
  logger = logging.getLogger(__name__)
7
7
 
8
- ResponseJson = Union[dict, List[dict]]
8
+ ResponseJson = Union[dict, list[dict]]
9
9
 
10
10
 
11
11
  class RequestSafeMode:
@@ -21,11 +21,11 @@ class RequestSafeMode:
21
21
  def __init__(
22
22
  self,
23
23
  max_errors: Union[int, float] = 0,
24
- status_codes: Tuple[int, ...] = (),
24
+ status_codes: tuple[int, ...] = (),
25
25
  ):
26
26
  self.max_errors = max_errors
27
- self.status_codes: List[int] = list(status_codes)
28
- self.status_codes_caught: List[int] = []
27
+ self.status_codes: list[int] = list(status_codes)
28
+ self.status_codes_caught: list[int] = []
29
29
 
30
30
  def catch_response(self, exception: HTTPError, status_code: int):
31
31
  if int(status_code) not in self.status_codes:
@@ -1,11 +1,7 @@
1
1
  from collections import defaultdict
2
+ from collections.abc import Iterable, Sequence
2
3
  from typing import (
3
4
  Any,
4
- Dict,
5
- Iterable,
6
- List,
7
- Sequence,
8
- Set,
9
5
  TypeVar,
10
6
  )
11
7
 
@@ -15,9 +11,9 @@ from .type import Getter
15
11
  T = TypeVar("T")
16
12
 
17
13
 
18
- def group_by(identifier: Getter, elements: Sequence) -> Dict[Any, List]:
14
+ def group_by(identifier: Getter, elements: Sequence) -> dict[Any, list]:
19
15
  """Groups the elements by the given key"""
20
- groups: Dict[Any, List] = defaultdict(list)
16
+ groups: dict[Any, list] = defaultdict(list)
21
17
  for element in elements:
22
18
  key = getproperty(element, identifier)
23
19
  groups[key].append(element)
@@ -25,7 +21,7 @@ def group_by(identifier: Getter, elements: Sequence) -> Dict[Any, List]:
25
21
  return groups
26
22
 
27
23
 
28
- def mapping_from_rows(rows: List[Dict], key: Any, value: Any) -> Dict:
24
+ def mapping_from_rows(rows: list[dict], key: Any, value: Any) -> dict:
29
25
  """
30
26
  Create a dictionary mapping from a list of dictionaries using specified keys for mapping.
31
27
 
@@ -68,13 +64,13 @@ def empty_iterator():
68
64
  def deduplicate(
69
65
  identifier: Getter,
70
66
  elements: Iterable[T],
71
- ) -> List[T]:
67
+ ) -> list[T]:
72
68
  """
73
69
  Remove duplicates in the given elements, using the specified identifier
74
70
  Only the first occurrence is kept.
75
71
  """
76
- deduplicated: List[T] = []
77
- processed: Set[Any] = set()
72
+ deduplicated: list[T] = []
73
+ processed: set[Any] = set()
78
74
 
79
75
  for element in elements:
80
76
  key = getproperty(element, identifier)
@@ -3,7 +3,7 @@ import logging
3
3
  from dataclasses import dataclass
4
4
  from datetime import datetime
5
5
  from enum import Enum
6
- from typing import Literal, Optional, Set, Tuple
6
+ from typing import Literal, Optional
7
7
 
8
8
  import requests
9
9
  from dateutil.parser import parse
@@ -92,7 +92,7 @@ class DbtClient:
92
92
  result = self._call(url=self._account_url)
93
93
  return result[0]["id"]
94
94
 
95
- def list_job_identifiers(self) -> Set[int]:
95
+ def list_job_identifiers(self) -> set[int]:
96
96
  """
97
97
  Return the IDs of all non-deleted jobs for this account
98
98
  https://docs.getdbt.com/dbt-cloud/api-v2-legacy#tag/Jobs/operation/listJobsForAccount
@@ -104,7 +104,7 @@ class DbtClient:
104
104
  def last_run(
105
105
  self,
106
106
  job_id: Optional[int] = None,
107
- finished_at_range: Optional[Tuple[datetime, datetime]] = None,
107
+ finished_at_range: Optional[tuple[datetime, datetime]] = None,
108
108
  ) -> Optional[DbtRun]:
109
109
  """
110
110
  Extract the last successful run id, optionally filtered on a given datetime range
@@ -1,6 +1,6 @@
1
1
  import json
2
2
  from datetime import datetime, timedelta
3
- from typing import Optional, Tuple, Union
3
+ from typing import Optional, Union
4
4
  from unittest.mock import MagicMock, patch
5
5
 
6
6
  import pytest
@@ -21,7 +21,7 @@ _RECENT_DATE_STR = "2023-10-06 05:09:31.731991+00:00"
21
21
  def _assert_called_with(
22
22
  mocked_call: MagicMock,
23
23
  job_id: Union[int, str],
24
- date_range: Optional[Tuple[datetime, datetime]] = None,
24
+ date_range: Optional[tuple[datetime, datetime]] = None,
25
25
  ) -> None:
26
26
  url = "https://cloud.getdbt.com/api/v2/accounts/40/runs/"
27
27
  params = {
@@ -1,10 +1,9 @@
1
1
  import logging
2
2
  import sys
3
3
  import warnings
4
- from typing import Tuple
5
4
 
6
5
 
7
- def deprecate_python(min_version_supported: Tuple[int, ...]):
6
+ def deprecate_python(min_version_supported: tuple[int, ...]):
8
7
  """raises a warning if python version < min_version_supported"""
9
8
 
10
9
  python_version = (