dcs-sdk 1.6.8__py3-none-any.whl → 1.6.9__py3-none-any.whl

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.
dcs_sdk/__version__.py CHANGED
@@ -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.8"
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(
@@ -233,21 +233,25 @@ def duck_db_load_pd_to_table(config: Comparison, is_source: bool = False, df: pd
233
233
  table_name = config.source.table if is_source else config.target.table
234
234
 
235
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
236
240
 
237
241
  conn.register("df_view", df)
238
242
 
239
243
  conn.execute(
240
244
  f"""
241
- CREATE OR REPLACE TABLE {table_name} AS
245
+ CREATE OR REPLACE TABLE "{table_name}" AS
242
246
  SELECT * FROM df_view;
243
247
  """
244
248
  )
245
249
 
246
250
  if pk_cols and len(pk_cols) > 0:
247
- pk_cols_str = ", ".join(pk_cols)
251
+ quoted_pk_cols = ", ".join([f'"{col}"' for col in pk_cols])
248
252
  conn.execute(
249
253
  f"""
250
- CREATE INDEX idx_{table_name} ON {table_name} ({pk_cols_str});
254
+ CREATE INDEX "idx_{table_name}" ON "{table_name}" ({quoted_pk_cols});
251
255
  """
252
256
  )
253
257
 
@@ -255,7 +259,7 @@ def duck_db_load_pd_to_table(config: Comparison, is_source: bool = False, df: pd
255
259
  view_name = f"{table_name}_query"
256
260
  conn.execute(
257
261
  f"""
258
- CREATE VIEW {view_name} AS {query};
262
+ CREATE VIEW "{view_name}" AS {query};
259
263
  """
260
264
  )
261
265
 
@@ -266,10 +270,6 @@ def duck_db_load_pd_to_table(config: Comparison, is_source: bool = False, df: pd
266
270
  logger.error(f"Error in loading CSV to DuckDB: {e}")
267
271
  return False
268
272
 
269
- if is_source:
270
- config.source.filepath = duck_db_file_name
271
- else:
272
- config.target.filepath = duck_db_file_name
273
273
  return True
274
274
 
275
275
 
@@ -299,6 +299,12 @@ def duck_db_load_csv_to_table(config: Comparison, path, is_source: bool = False)
299
299
  try:
300
300
  table_name = generate_table_name(csv_file)
301
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
302
308
  conn.execute(
303
309
  """
304
310
  CREATE OR REPLACE TABLE {} AS SELECT * FROM read_csv('{}',HEADER=True, UNION_BY_NAME=True, nullstr='NULL', all_varchar=True, IGNORE_ERRORS=TRUE);
@@ -308,14 +314,14 @@ def duck_db_load_csv_to_table(config: Comparison, path, is_source: bool = False)
308
314
  )
309
315
 
310
316
  if pk_cols and len(pk_cols) > 0:
311
- pk_cols_str = ", ".join(pk_cols)
317
+ quoted_pk_cols = ", ".join(['"{}"'.format(col) for col in pk_cols])
312
318
  conn.execute(
313
319
  """
314
- CREATE INDEX idx_{} ON {} ({});
320
+ CREATE INDEX "idx_{}" ON "{}" ({});
315
321
  """.format(
316
322
  table_name,
317
323
  table_name,
318
- pk_cols_str,
324
+ quoted_pk_cols,
319
325
  )
320
326
  )
321
327
 
@@ -323,7 +329,7 @@ def duck_db_load_csv_to_table(config: Comparison, path, is_source: bool = False)
323
329
  table_name = f"{table_name}_query"
324
330
  conn.execute(
325
331
  """
326
- CREATE VIEW {} AS {};
332
+ CREATE VIEW "{}" AS {};
327
333
  """.format(
328
334
  table_name, query
329
335
  )
@@ -333,12 +339,6 @@ def duck_db_load_csv_to_table(config: Comparison, path, is_source: bool = False)
333
339
  logger.error(f"Error in loading CSV to DuckDB: {e}")
334
340
  return False
335
341
 
336
- if is_source:
337
- config.source.filepath = duck_db_file_name
338
- config.source.table = table_name
339
- else:
340
- config.target.filepath = duck_db_file_name
341
- config.target.table = table_name
342
342
  return True
343
343
 
344
344
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dcs-sdk
3
- Version: 1.6.8
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.8
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
@@ -133,14 +133,14 @@ dcs_core/report/static/index.js,sha256=p4wvku-zlXi0y4gWeSzV1amY0s4mjtUq2QsezARLV
133
133
  dcs_core/report/static/index.js.LICENSE.txt,sha256=bBDZBJVEDrqjCi7sfoF8CchjFn3hdcbNkP7ub7kbcXQ,201041
134
134
  dcs_sdk/__init__.py,sha256=RkfhRKLXEForLCs4rZkTf0qc_b0TokSggSAcKI4yfZg,610
135
135
  dcs_sdk/__main__.py,sha256=Qn8stIaQGrdLjHQ-H7xO0T-brtq5RWZoWU9QvqoarV8,683
136
- dcs_sdk/__version__.py,sha256=sFz5TIfT8CPd_5meGnOcu6HHSYeHzkBf8FK68f4xbvU,633
136
+ dcs_sdk/__version__.py,sha256=iSCeuxA5501nrospfk7ajv7gQWKLpPSH4npFVobI-gY,633
137
137
  dcs_sdk/cli/__init__.py,sha256=RkfhRKLXEForLCs4rZkTf0qc_b0TokSggSAcKI4yfZg,610
138
138
  dcs_sdk/cli/cli.py,sha256=jaO52UrMWLafcF_yhqllPkmYSTuO2sksFi30fYFdAB4,4406
139
139
  dcs_sdk/sdk/__init__.py,sha256=skrZcgWWJBL6NXTUERywJ3qRJRemgpDXyW7lPg1FJk8,2107
140
140
  dcs_sdk/sdk/config/__init__.py,sha256=RkfhRKLXEForLCs4rZkTf0qc_b0TokSggSAcKI4yfZg,610
141
141
  dcs_sdk/sdk/config/config_loader.py,sha256=ZbSGQ56LsHv4_mxNhYrf6eoegO2R4PaqAs8iAghU73M,22435
142
142
  dcs_sdk/sdk/data_diff/__init__.py,sha256=RkfhRKLXEForLCs4rZkTf0qc_b0TokSggSAcKI4yfZg,610
143
- dcs_sdk/sdk/data_diff/data_differ.py,sha256=00lKfGU4xMeXuS_Wpvjf-TAgMiZ7r5_bv1EQsv1EdjQ,39050
143
+ dcs_sdk/sdk/data_diff/data_differ.py,sha256=3uef0ED5TzMmXcJYx3OZtmS-K4tj_yjlsvkD9aoIFOc,39296
144
144
  dcs_sdk/sdk/rules/__init__.py,sha256=_BkKcE_jfdDQI_ECdOamJaefMKEXrKpYjPpnBQXl_Xs,657
145
145
  dcs_sdk/sdk/rules/rules_mappping.py,sha256=fxakVkf7B2cVkYSO946LTim_HmMsl6lBDBqZjTTsSPI,1292
146
146
  dcs_sdk/sdk/rules/rules_repository.py,sha256=x0Rli-wdnHAmXm5526go_qC3P-eFRt-4L7fs4hNqC-g,7564
@@ -154,8 +154,8 @@ dcs_sdk/sdk/utils/similarity_score/jaccard_provider.py,sha256=Jd0TvIGOULNTsiCL_F
154
154
  dcs_sdk/sdk/utils/similarity_score/levenshtein_distance_provider.py,sha256=puAWPnoWfNo4BN4-kXIUHrtrt5jLv3Vkw_NfHvjYrn4,1185
155
155
  dcs_sdk/sdk/utils/table.py,sha256=X8HxdYTWyx_oVrBWPsXlmA-xJKXXDBW9RrhlWNqA1As,18224
156
156
  dcs_sdk/sdk/utils/themes.py,sha256=Meo2Yldv4uyPpEqI7qdA28Aa6sxtwUU1dLKKm4QavjM,1403
157
- dcs_sdk/sdk/utils/utils.py,sha256=1QsHT1Rg1LTfZDskuESrk8DfL34a_71RgCt-ceNftIE,16317
158
- dcs_sdk-1.6.8.dist-info/METADATA,sha256=-20PhrAQqYbjGBwAgA032BxOxu7DIY244iAxJMb-ZvE,7670
159
- dcs_sdk-1.6.8.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
160
- dcs_sdk-1.6.8.dist-info/entry_points.txt,sha256=XhODNz7UccgPOyklXgp7pIfTTXArd6-V0mImjhnhwto,80
161
- dcs_sdk-1.6.8.dist-info/RECORD,,
157
+ dcs_sdk/sdk/utils/utils.py,sha256=a9QGEVL8L7asbJm_VBwgKvJQknsvuqWS0uTUaHsDPiY,16463
158
+ dcs_sdk-1.6.9.dist-info/METADATA,sha256=Od43VgAhrNLKIICnGJ3nSzmuUYJzHl7miH6OSysVE9U,7652
159
+ dcs_sdk-1.6.9.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
160
+ dcs_sdk-1.6.9.dist-info/entry_points.txt,sha256=XhODNz7UccgPOyklXgp7pIfTTXArd6-V0mImjhnhwto,80
161
+ dcs_sdk-1.6.9.dist-info/RECORD,,