dcs-sdk 1.6.7__tar.gz → 1.6.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/PKG-INFO +12 -20
  2. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/README.md +11 -19
  3. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/__version__.py +1 -1
  4. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/data_diff/data_differ.py +8 -2
  5. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/utils/utils.py +20 -19
  6. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/pyproject.toml +1 -1
  7. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/__init__.py +0 -0
  8. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/__main__.py +0 -0
  9. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/abcs/__init__.py +0 -0
  10. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/abcs/compiler.py +0 -0
  11. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/abcs/database_types.py +0 -0
  12. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/config.py +0 -0
  13. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/__init__.py +0 -0
  14. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/_connect.py +0 -0
  15. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/base.py +0 -0
  16. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/bigquery.py +0 -0
  17. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/clickhouse.py +0 -0
  18. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/databricks.py +0 -0
  19. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/duckdb.py +0 -0
  20. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/mssql.py +0 -0
  21. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/mysql.py +0 -0
  22. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/oracle.py +0 -0
  23. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/postgresql.py +0 -0
  24. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/presto.py +0 -0
  25. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/redis.py +0 -0
  26. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/redshift.py +0 -0
  27. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/snowflake.py +0 -0
  28. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/sybase.py +0 -0
  29. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/trino.py +0 -0
  30. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/databases/vertica.py +0 -0
  31. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/diff_tables.py +0 -0
  32. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/errors.py +0 -0
  33. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/format.py +0 -0
  34. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/hashdiff_tables.py +0 -0
  35. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/info_tree.py +0 -0
  36. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/joindiff_tables.py +0 -0
  37. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/lexicographic_space.py +0 -0
  38. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/parse_time.py +0 -0
  39. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/py.typed +0 -0
  40. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/queries/__init__.py +0 -0
  41. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/queries/api.py +0 -0
  42. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/queries/ast_classes.py +0 -0
  43. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/queries/base.py +0 -0
  44. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/queries/extras.py +0 -0
  45. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/query_utils.py +0 -0
  46. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/schema.py +0 -0
  47. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/table_segment.py +0 -0
  48. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/thread_utils.py +0 -0
  49. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/utils.py +0 -0
  50. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/data_diff/version.py +0 -0
  51. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/__init__.py +0 -0
  52. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/__main__.py +0 -0
  53. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/__version__.py +0 -0
  54. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/cli/__init__.py +0 -0
  55. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/cli/cli.py +0 -0
  56. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/__init__.py +0 -0
  57. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/common/__init__.py +0 -0
  58. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/common/errors.py +0 -0
  59. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/common/models/__init__.py +0 -0
  60. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/common/models/configuration.py +0 -0
  61. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/common/models/dashboard.py +0 -0
  62. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/common/models/data_source_resource.py +0 -0
  63. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/common/models/metric.py +0 -0
  64. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/common/models/profile.py +0 -0
  65. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/common/models/validation.py +0 -0
  66. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/common/models/widget.py +0 -0
  67. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/configuration/__init__.py +0 -0
  68. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/configuration/config_loader.py +0 -0
  69. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/configuration/configuration_parser.py +0 -0
  70. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/configuration/configuration_parser_arc.py +0 -0
  71. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/datasource/__init__.py +0 -0
  72. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/datasource/base.py +0 -0
  73. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/datasource/file_datasource.py +0 -0
  74. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/datasource/manager.py +0 -0
  75. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/datasource/search_datasource.py +0 -0
  76. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/datasource/sql_datasource.py +0 -0
  77. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/inspect.py +0 -0
  78. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/logger/__init__.py +0 -0
  79. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/logger/base.py +0 -0
  80. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/logger/default_logger.py +0 -0
  81. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/metric/__init__.py +0 -0
  82. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/metric/base.py +0 -0
  83. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/metric/combined_metric.py +0 -0
  84. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/metric/custom_metric.py +0 -0
  85. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/metric/manager.py +0 -0
  86. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/metric/numeric_metric.py +0 -0
  87. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/metric/reliability_metric.py +0 -0
  88. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/profiling/__init__.py +0 -0
  89. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/profiling/datasource_profiling.py +0 -0
  90. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/profiling/numeric_field_profiling.py +0 -0
  91. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/profiling/text_field_profiling.py +0 -0
  92. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/repository/__init__.py +0 -0
  93. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/repository/metric_repository.py +0 -0
  94. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/utils/__init__.py +0 -0
  95. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/utils/log.py +0 -0
  96. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/utils/tracking.py +0 -0
  97. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/utils/utils.py +0 -0
  98. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/validation/__init__.py +0 -0
  99. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/validation/base.py +0 -0
  100. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/validation/completeness_validation.py +0 -0
  101. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/validation/custom_query_validation.py +0 -0
  102. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/validation/manager.py +0 -0
  103. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/validation/numeric_validation.py +0 -0
  104. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/validation/reliability_validation.py +0 -0
  105. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/validation/uniqueness_validation.py +0 -0
  106. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/core/validation/validity_validation.py +0 -0
  107. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/__init__.py +0 -0
  108. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/__init__.py +0 -0
  109. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/azure_blob.py +0 -0
  110. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/bigquery.py +0 -0
  111. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/databricks.py +0 -0
  112. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/db2.py +0 -0
  113. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/elasticsearch.py +0 -0
  114. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/mssql.py +0 -0
  115. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/mysql.py +0 -0
  116. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/opensearch.py +0 -0
  117. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/oracle.py +0 -0
  118. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/postgres.py +0 -0
  119. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/redshift.py +0 -0
  120. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/snowflake.py +0 -0
  121. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/spark_df.py +0 -0
  122. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/databases/sybase.py +0 -0
  123. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/storage/__init__.py +0 -0
  124. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/storage/local_file.py +0 -0
  125. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/utils/__init__.py +0 -0
  126. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/integrations/utils/utils.py +0 -0
  127. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/report/__init__.py +0 -0
  128. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/report/dashboard.py +0 -0
  129. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/report/models.py +0 -0
  130. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/report/static/assets/fonts/DMSans-Bold.ttf +0 -0
  131. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/report/static/assets/fonts/DMSans-Medium.ttf +0 -0
  132. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/report/static/assets/fonts/DMSans-Regular.ttf +0 -0
  133. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/report/static/assets/fonts/DMSans-SemiBold.ttf +0 -0
  134. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/report/static/assets/images/docs.svg +0 -0
  135. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/report/static/assets/images/github.svg +0 -0
  136. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/report/static/assets/images/logo.svg +0 -0
  137. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/report/static/assets/images/slack.svg +0 -0
  138. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/report/static/index.js +0 -0
  139. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_core/report/static/index.js.LICENSE.txt +0 -0
  140. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/__init__.py +0 -0
  141. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/__main__.py +0 -0
  142. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/cli/__init__.py +0 -0
  143. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/cli/cli.py +0 -0
  144. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/__init__.py +0 -0
  145. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/config/__init__.py +0 -0
  146. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/config/config_loader.py +0 -0
  147. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/data_diff/__init__.py +0 -0
  148. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/rules/__init__.py +0 -0
  149. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/rules/rules_mappping.py +0 -0
  150. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/rules/rules_repository.py +0 -0
  151. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/rules/schema_rules.py +0 -0
  152. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/utils/__init__.py +0 -0
  153. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/utils/serializer.py +0 -0
  154. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/utils/similarity_score/__init__.py +0 -0
  155. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/utils/similarity_score/base_provider.py +0 -0
  156. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/utils/similarity_score/cosine_similarity_provider.py +0 -0
  157. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/utils/similarity_score/jaccard_provider.py +0 -0
  158. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/utils/similarity_score/levenshtein_distance_provider.py +0 -0
  159. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/utils/table.py +0 -0
  160. {dcs_sdk-1.6.7 → dcs_sdk-1.6.9}/dcs_sdk/sdk/utils/themes.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dcs-sdk
3
- Version: 1.6.7
3
+ Version: 1.6.9
4
4
  Summary: SDK for DataChecks
5
5
  Author: Waterdip Labs
6
6
  Author-email: hello@waterdip.ai
@@ -86,12 +86,11 @@ Requires-Dist: vertica-python (>=1.4.0) ; extra == "vertica" or extra == "all-db
86
86
  Description-Content-Type: text/markdown
87
87
 
88
88
  <h1 align="center">
89
- DCS SDK v1.6.7
89
+ DCS SDK v1.6.9
90
90
  </h1>
91
91
 
92
92
  > SDK for DataChecks
93
93
 
94
-
95
94
  ## Installation
96
95
 
97
96
  > Python version `>=3.10,<3.13`
@@ -108,24 +107,19 @@ $ pip install dcs-sdk[all-dbs]
108
107
 
109
108
  | Database | Code Name | Supported |
110
109
  | ----------------- | ------------ | --------- |
111
- | PostgreSQL | `postgres` | ✅ |
112
- | Snowflake | `snowflake` | ✅ |
113
- | Trino | `trino` | ✅ |
114
- | Databricks | `databricks` | ✅ |
115
- | Oracle | `oracle` | ✅ |
116
- | MSSQL | `mssql` | ✅ |
117
- | MySQL | `mysql` | ✅ |
118
- | SAP Sybase IQ/ASE | `sybase` | ✅ |
119
- | File | `file` | ✅ |
120
- | BigQuery | `bigquery` | ✅ |
121
-
122
-
123
-
110
+ | PostgreSQL | `postgres` | ✅ |
111
+ | Snowflake | `snowflake` | ✅ |
112
+ | Trino | `trino` | ✅ |
113
+ | Databricks | `databricks` | ✅ |
114
+ | Oracle | `oracle` | ✅ |
115
+ | MSSQL | `mssql` | ✅ |
116
+ | MySQL | `mysql` | ✅ |
117
+ | SAP Sybase IQ/ASE | `sybase` | ✅ |
118
+ | File | `file` | ✅ |
119
+ | BigQuery | `bigquery` | ✅ |
124
120
 
125
121
  ## Available Commands
126
122
 
127
-
128
-
129
123
  | Option | Short Option | Required | Default | Description | Example |
130
124
  | :-----------: | :----------: | :------: | :-------------: | :------------------------------------------------: | :------------------------------------------------------------------------------------------------------: |
131
125
  | --config-path | -C | **Yes** | None | Specify the file path for the configuration | dcs-sdk run --config-path config.yaml --compare comp_name |
@@ -138,8 +132,6 @@ $ pip install dcs-sdk[all-dbs]
138
132
  | --report-path | | No | dcs_report.html | Specify the file path for HTML report | dcs-sdk run --config-path config.yaml --compare comp_name --html-report --report-path table.html |
139
133
  | --table | | No | False | Display Comparison in table format | dcs-sdk run --config-path config.yaml --compare comp_name --html-report --report-path table.html --table |
140
134
 
141
-
142
-
143
135
  ### Example Command [CLI]
144
136
 
145
137
  ```sh
@@ -1,10 +1,9 @@
1
1
  <h1 align="center">
2
- DCS SDK v1.6.7
2
+ DCS SDK v1.6.9
3
3
  </h1>
4
4
 
5
5
  > SDK for DataChecks
6
6
 
7
-
8
7
  ## Installation
9
8
 
10
9
  > Python version `>=3.10,<3.13`
@@ -21,24 +20,19 @@ $ pip install dcs-sdk[all-dbs]
21
20
 
22
21
  | Database | Code Name | Supported |
23
22
  | ----------------- | ------------ | --------- |
24
- | PostgreSQL | `postgres` | ✅ |
25
- | Snowflake | `snowflake` | ✅ |
26
- | Trino | `trino` | ✅ |
27
- | Databricks | `databricks` | ✅ |
28
- | Oracle | `oracle` | ✅ |
29
- | MSSQL | `mssql` | ✅ |
30
- | MySQL | `mysql` | ✅ |
31
- | SAP Sybase IQ/ASE | `sybase` | ✅ |
32
- | File | `file` | ✅ |
33
- | BigQuery | `bigquery` | ✅ |
34
-
35
-
36
-
23
+ | PostgreSQL | `postgres` | ✅ |
24
+ | Snowflake | `snowflake` | ✅ |
25
+ | Trino | `trino` | ✅ |
26
+ | Databricks | `databricks` | ✅ |
27
+ | Oracle | `oracle` | ✅ |
28
+ | MSSQL | `mssql` | ✅ |
29
+ | MySQL | `mysql` | ✅ |
30
+ | SAP Sybase IQ/ASE | `sybase` | ✅ |
31
+ | File | `file` | ✅ |
32
+ | BigQuery | `bigquery` | ✅ |
37
33
 
38
34
  ## Available Commands
39
35
 
40
-
41
-
42
36
  | Option | Short Option | Required | Default | Description | Example |
43
37
  | :-----------: | :----------: | :------: | :-------------: | :------------------------------------------------: | :------------------------------------------------------------------------------------------------------: |
44
38
  | --config-path | -C | **Yes** | None | Specify the file path for the configuration | dcs-sdk run --config-path config.yaml --compare comp_name |
@@ -51,8 +45,6 @@ $ pip install dcs-sdk[all-dbs]
51
45
  | --report-path | | No | dcs_report.html | Specify the file path for HTML report | dcs-sdk run --config-path config.yaml --compare comp_name --html-report --report-path table.html |
52
46
  | --table | | No | False | Display Comparison in table format | dcs-sdk run --config-path config.yaml --compare comp_name --html-report --report-path table.html --table |
53
47
 
54
-
55
-
56
48
  ### Example Command [CLI]
57
49
 
58
50
  ```sh
@@ -12,4 +12,4 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- __version__ = "1.6.7"
15
+ __version__ = "1.6.9"
@@ -267,6 +267,10 @@ class DBTableDiffer:
267
267
  ) from e
268
268
 
269
269
  except Exception as e:
270
+ self.cleanup_duckdb(
271
+ src=self.config.source.filepath,
272
+ target=self.config.target.filepath,
273
+ )
270
274
  raise RuntimeError(f"process_duckdb failed for {'source' if is_source else 'target'}: {e}") from e
271
275
 
272
276
  def _prepare_source_table(self) -> Optional[str]:
@@ -785,8 +789,10 @@ class DBTableDiffer:
785
789
  with suppress(Exception):
786
790
  db_connection.close()
787
791
 
788
- safe_close(self.table1.database)
789
- safe_close(self.table2.database)
792
+ if hasattr(self.table1, "database"):
793
+ safe_close(self.table1.database)
794
+ if hasattr(self.table2, "database"):
795
+ safe_close(self.table2.database)
790
796
 
791
797
  if self.source_db:
792
798
  self.source_db.drop_view_from_db(
@@ -158,7 +158,8 @@ def chunk_load_to_pandas(queue: Queue, result_df: list, timeout: float = 2.0):
158
158
  break
159
159
 
160
160
  try:
161
- df = pd.concat([df, pd.read_csv(io.BytesIO(data))], ignore_index=True)
161
+ chunk = pd.read_csv(io.BytesIO(data), dtype=str)
162
+ df = pd.concat([df, chunk], ignore_index=True)
162
163
  except Exception as e:
163
164
  logger.error(f"[ERROR] Failed to read CSV chunk: {e}")
164
165
  continue
@@ -232,21 +233,25 @@ def duck_db_load_pd_to_table(config: Comparison, is_source: bool = False, df: pd
232
233
  table_name = config.source.table if is_source else config.target.table
233
234
 
234
235
  conn = duckdb.connect(database=duck_db_file_name, read_only=False)
236
+ if is_source:
237
+ config.source.filepath = duck_db_file_name
238
+ else:
239
+ config.target.filepath = duck_db_file_name
235
240
 
236
241
  conn.register("df_view", df)
237
242
 
238
243
  conn.execute(
239
244
  f"""
240
- CREATE OR REPLACE TABLE {table_name} AS
245
+ CREATE OR REPLACE TABLE "{table_name}" AS
241
246
  SELECT * FROM df_view;
242
247
  """
243
248
  )
244
249
 
245
250
  if pk_cols and len(pk_cols) > 0:
246
- pk_cols_str = ", ".join(pk_cols)
251
+ quoted_pk_cols = ", ".join([f'"{col}"' for col in pk_cols])
247
252
  conn.execute(
248
253
  f"""
249
- CREATE INDEX idx_{table_name} ON {table_name} ({pk_cols_str});
254
+ CREATE INDEX "idx_{table_name}" ON "{table_name}" ({quoted_pk_cols});
250
255
  """
251
256
  )
252
257
 
@@ -254,7 +259,7 @@ def duck_db_load_pd_to_table(config: Comparison, is_source: bool = False, df: pd
254
259
  view_name = f"{table_name}_query"
255
260
  conn.execute(
256
261
  f"""
257
- CREATE VIEW {view_name} AS {query};
262
+ CREATE VIEW "{view_name}" AS {query};
258
263
  """
259
264
  )
260
265
 
@@ -265,10 +270,6 @@ def duck_db_load_pd_to_table(config: Comparison, is_source: bool = False, df: pd
265
270
  logger.error(f"Error in loading CSV to DuckDB: {e}")
266
271
  return False
267
272
 
268
- if is_source:
269
- config.source.filepath = duck_db_file_name
270
- else:
271
- config.target.filepath = duck_db_file_name
272
273
  return True
273
274
 
274
275
 
@@ -298,6 +299,12 @@ def duck_db_load_csv_to_table(config: Comparison, path, is_source: bool = False)
298
299
  try:
299
300
  table_name = generate_table_name(csv_file)
300
301
  conn = duckdb.connect(database=duck_db_file_name, read_only=False)
302
+ if is_source:
303
+ config.source.filepath = duck_db_file_name
304
+ config.source.table = table_name
305
+ else:
306
+ config.target.filepath = duck_db_file_name
307
+ config.target.table = table_name
301
308
  conn.execute(
302
309
  """
303
310
  CREATE OR REPLACE TABLE {} AS SELECT * FROM read_csv('{}',HEADER=True, UNION_BY_NAME=True, nullstr='NULL', all_varchar=True, IGNORE_ERRORS=TRUE);
@@ -307,14 +314,14 @@ def duck_db_load_csv_to_table(config: Comparison, path, is_source: bool = False)
307
314
  )
308
315
 
309
316
  if pk_cols and len(pk_cols) > 0:
310
- pk_cols_str = ", ".join(pk_cols)
317
+ quoted_pk_cols = ", ".join(['"{}"'.format(col) for col in pk_cols])
311
318
  conn.execute(
312
319
  """
313
- CREATE INDEX idx_{} ON {} ({});
320
+ CREATE INDEX "idx_{}" ON "{}" ({});
314
321
  """.format(
315
322
  table_name,
316
323
  table_name,
317
- pk_cols_str,
324
+ quoted_pk_cols,
318
325
  )
319
326
  )
320
327
 
@@ -322,7 +329,7 @@ def duck_db_load_csv_to_table(config: Comparison, path, is_source: bool = False)
322
329
  table_name = f"{table_name}_query"
323
330
  conn.execute(
324
331
  """
325
- CREATE VIEW {} AS {};
332
+ CREATE VIEW "{}" AS {};
326
333
  """.format(
327
334
  table_name, query
328
335
  )
@@ -332,12 +339,6 @@ def duck_db_load_csv_to_table(config: Comparison, path, is_source: bool = False)
332
339
  logger.error(f"Error in loading CSV to DuckDB: {e}")
333
340
  return False
334
341
 
335
- if is_source:
336
- config.source.filepath = duck_db_file_name
337
- config.source.table = table_name
338
- else:
339
- config.target.filepath = duck_db_file_name
340
- config.target.table = table_name
341
342
  return True
342
343
 
343
344
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "dcs-sdk"
3
- version = "1.6.7"
3
+ version = "1.6.9"
4
4
  description = "SDK for DataChecks"
5
5
  authors = ["Waterdip Labs <hello@waterdip.ai>"]
6
6
  readme = "README.md"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes