icsDataValidation 1.0.439__py3-none-any.whl → 1.0.441__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.
@@ -524,7 +524,7 @@ class SnowflakeService:
524
524
 
525
525
  if 'Arithmetic overflow' in err_msg[2]:
526
526
  # re-calculate queries with bool_cast_before_sum=True in case of error
527
- query_checksums = self.create_checksum_statement(
527
+ query_checksums = self._get_checksum_statement(
528
528
  object=object,
529
529
  column_intersections=column_intersections,
530
530
  where_clause=where_clause,
@@ -587,7 +587,7 @@ class SQLServerService:
587
587
 
588
588
  if 'Arithmetic overflow' in err_msg[2]:
589
589
  # re-calculate queries with bool_cast_before_sum=True in case of error
590
- query_checksums = self.create_checksum_statement(
590
+ query_checksums = self._get_checksum_statement(
591
591
  object=object,
592
592
  column_intersections=column_intersections,
593
593
  where_clause=where_clause,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: icsDataValidation
3
- Version: 1.0.439
3
+ Version: 1.0.441
4
4
  Summary: Add your description here
5
5
  Author-email: initions <ICSMC_EXT_PYPIORG@accenture.com>
6
6
  License: MIT
@@ -27,8 +27,8 @@ icsDataValidation/services/database_services/databricks_hive_metastore_service.p
27
27
  icsDataValidation/services/database_services/databricks_unity_catalog_service.py,sha256=8iV75kvtQsGPdC35m89jO5s0ZQDekPdRVPYGbdCAPVI,70835
28
28
  icsDataValidation/services/database_services/exasol_service.py,sha256=LdjU8mM77zTmNmhJPQrgQO-HwAZv0C0seYMDjuWU9BQ,11153
29
29
  icsDataValidation/services/database_services/oracle_service.py,sha256=Ejxi0HBRF_c0xWY4wEsw8L8Rb5FMRf9cjQbhz8kerIA,31805
30
- icsDataValidation/services/database_services/snowflake_service.py,sha256=hygxlqvLw-6PLJFoATsp5zHup4vcuGAOvEAzgkLBkXw,68657
31
- icsDataValidation/services/database_services/sqlserver_service.py,sha256=6FD6vp8K3bMkfQSaCLuPEtR3KMc0IsvVAybRDwsg3Po,43303
30
+ icsDataValidation/services/database_services/snowflake_service.py,sha256=8uJm8psd3A_SHfu4Ci3GP0bpWj6ctKACoknJuqwiBaE,68655
31
+ icsDataValidation/services/database_services/sqlserver_service.py,sha256=cF2z4QzUz20C_D2bpL3gOX5atgPWqGjMt8DVg6QVPog,43301
32
32
  icsDataValidation/services/database_services/teradata_service.py,sha256=2x7onntG5E1qqw65HXUmFwcrYmT5I8HSS3eWXIhTfiw,40252
33
33
  icsDataValidation/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
34
  icsDataValidation/utils/file_util.py,sha256=ZTMB1sTnIIdffg9tEJRCFQQ5SG8Fksc5ie1PM4gHXG4,3432
@@ -36,21 +36,21 @@ icsDataValidation/utils/logger_util.py,sha256=xS48_FFMot_hyQgJY8DUeRTn5jpdvRt5QI
36
36
  icsDataValidation/utils/pandas_util.py,sha256=D_g7Xw7BIS2E-1ZhJIvp62K5xuKjIkj-7TxH4HN_8SI,6505
37
37
  icsDataValidation/utils/parallelization_util.py,sha256=6P0YcQLmunW_fHR4f5-kdncZbOlxxqKyk6ZAFQQEd2k,2088
38
38
  icsDataValidation/utils/sql_util.py,sha256=0c-BInElSsRmXUedfLP_h9Wsiscv9aic7IIc5f15Uzo,396
39
- tests/snowflake_service/test_create_checksums.py,sha256=ifXxuNk7RHg5haTznBDsnJM9lrxXyBssVICn_oWkgj8,5397
39
+ tests/snowflake_service/test_create_checksums.py,sha256=XE3VU11LPiMS_NG-cxNSpWwR1Ett5i0GTlzehB3Md4o,5376
40
40
  tests/snowflake_service/test_create_pandas_df_from_group_by.py,sha256=7ZF-RbloV6kZTirWdBRNkpfhNeER7vOQE83BGILbXHk,17013
41
41
  tests/snowflake_service/test_create_pandas_df_from_sample.py,sha256=z3-G_cctDttL7SR8eUep421xGBo54t3duWjeHpzt7LI,16794
42
42
  tests/snowflake_service/test_get_checksum_statement.py,sha256=U9IZqjr5YzwGKcVU6Q4h1l1G-CbwX0STQeFdEvOqV0c,8313
43
43
  tests/snowflake_service/test_get_column_clause.py,sha256=5ZIMvElXWfnjBUrYaEMDFzIpEcMO4oXJEoO82QObTz0,11019
44
44
  tests/snowflake_service/test_get_countnulls_statement.py,sha256=l1hah4oVKp983IdWUfO08ojgmgy6hmfVopn6xW1cXu4,4254
45
45
  tests/snowflake_service/test_get_in_clause.py,sha256=z0IkJhh1XSQ6rIB0VL1RBc616i1BvXjzJqZ6_ijfToU,2442
46
- tests/sqlserver_service/test_create_checksums.py,sha256=aknl9JzfDCHomIYlNcnp-zNYoinJcZ-rgTGUJoVC4Zs,5557
46
+ tests/sqlserver_service/test_create_checksums.py,sha256=7wRzuM6Gd8MWNjjjjVSYWlKcBuSVu7LLfBHHm4ZFyxY,5482
47
47
  tests/sqlserver_service/test_create_pandas_df_from_group_by.py,sha256=hFZCyHep3jiVdrFGQF3eWugXK2tCv75E-WkGoU_-JsY,15071
48
48
  tests/sqlserver_service/test_create_pandas_df_from_sample.py,sha256=d4XG4O6JcXIW1JlA2E9hJw_FXlH6zRkQP_K6lUWUOl0,10818
49
49
  tests/sqlserver_service/test_get_checksum_statement.py,sha256=IZq1lwS5IEoBqNcioLq1w8mjRuCTq6Uwc27xD9OD8PA,5422
50
50
  tests/sqlserver_service/test_get_column_clause.py,sha256=JKgglx_KJTbPeVfmSMdbl2wiSwu3_R6fZs7a36LlO0Q,6232
51
51
  tests/sqlserver_service/test_get_countnulls_statement.py,sha256=ZwowVsdAuYAMeGgTk4puJMDDXlETJngTygeesqsKv7w,4003
52
52
  tests/sqlserver_service/test_get_in_clause.py,sha256=Ee4kAZdbxMQ_evlJscV8DwKtjbuEeRYUt2PaxZHLoXA,3160
53
- icsdatavalidation-1.0.439.dist-info/METADATA,sha256=afSxru9XnlnPI6SzukmWri68IQ95ExYuN6_s9VzxT-Q,661
54
- icsdatavalidation-1.0.439.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
55
- icsdatavalidation-1.0.439.dist-info/top_level.txt,sha256=y0PjCpmJ_Vhc0QB0SgXxxcRSR7__mQV5rmFyfQc60nA,24
56
- icsdatavalidation-1.0.439.dist-info/RECORD,,
53
+ icsdatavalidation-1.0.441.dist-info/METADATA,sha256=DD89djkuvSY3-pCVqdgFPDrUgb80PeW4ShLoFZRKHwI,661
54
+ icsdatavalidation-1.0.441.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
55
+ icsdatavalidation-1.0.441.dist-info/top_level.txt,sha256=y0PjCpmJ_Vhc0QB0SgXxxcRSR7__mQV5rmFyfQc60nA,24
56
+ icsdatavalidation-1.0.441.dist-info/RECORD,,
@@ -29,7 +29,7 @@ class TestCreateChecksumsParametrized:
29
29
 
30
30
  @pytest.mark.parametrize(
31
31
  "column_intersections,where_clause,numeric_scale,execute_behavior," \
32
- "expected_columns,expected_errors,expect_retry,expected_execute_calls",
32
+ "expected_columns,expected_errors,expect_retry",
33
33
  [
34
34
  ( # success path
35
35
  ['amount', 'name'],
@@ -46,8 +46,7 @@ class TestCreateChecksumsParametrized:
46
46
  'NAME': ['COUNTDISTINCT', 3, 0]
47
47
  },
48
48
  [],
49
- False,
50
- 1
49
+ False
51
50
  ),
52
51
  ( # arithmetic overflow triggers retry
53
52
  ['amount'],
@@ -63,8 +62,7 @@ class TestCreateChecksumsParametrized:
63
62
  'AMOUNT': ['SUM', 5, 0]
64
63
  },
65
64
  [],
66
- True,
67
- 2
65
+ True
68
66
  ),
69
67
  ( # non-overflow error surfaces in TESTATM_ERRORS
70
68
  ['amount'],
@@ -75,8 +73,7 @@ class TestCreateChecksumsParametrized:
75
73
  },
76
74
  {},
77
75
  [['ERROR', 'checksum_sql', 'Some other error']],
78
- False,
79
- 1
76
+ False
80
77
  ),
81
78
  ],
82
79
  )
@@ -90,20 +87,20 @@ class TestCreateChecksumsParametrized:
90
87
  execute_behavior,
91
88
  expected_columns,
92
89
  expected_errors,
93
- expect_retry,
94
- expected_execute_calls
90
+ expect_retry
95
91
  ):
96
92
  """Test create_checksums behavior across success, retry, and error scenarios."""
97
- snowflake_service.create_checksum_statement = MagicMock(return_value='checksum_retry_sql')
98
-
99
93
  with patch.object(snowflake_service, '_get_checksum_statement', return_value='checksum_sql') as mock_checksum_stmt, \
100
94
  patch.object(snowflake_service, '_get_countnulls_statement', return_value='countnulls_sql') as mock_countnulls_stmt, \
101
95
  patch.object(snowflake_service, 'execute_queries') as mock_execute:
102
96
 
103
- if 'side_effect' in execute_behavior:
104
- mock_execute.side_effect = execute_behavior['side_effect']
97
+ side_effect = execute_behavior.get('side_effect')
98
+ if side_effect is not None:
99
+ mock_execute.side_effect = side_effect
100
+ expected_call_count = len(side_effect) if isinstance(side_effect, list) else 1
105
101
  else:
106
102
  mock_execute.return_value = execute_behavior['return_value']
103
+ expected_call_count = 1
107
104
 
108
105
  result = snowflake_service.create_checksums(
109
106
  object=mock_database_object,
@@ -114,14 +111,22 @@ class TestCreateChecksumsParametrized:
114
111
  enclose_column_by_double_quotes=False
115
112
  )
116
113
 
117
- mock_checksum_stmt.assert_called_once_with(
118
- object=mock_database_object,
119
- column_intersections=column_intersections,
120
- where_clause=where_clause,
121
- exclude_columns=[],
122
- numeric_scale=numeric_scale,
123
- enclose_column_by_double_quotes=False
124
- )
114
+ checksum_calls = mock_checksum_stmt.call_args_list
115
+ base_kwargs = {
116
+ 'object': mock_database_object,
117
+ 'column_intersections': column_intersections,
118
+ 'where_clause': where_clause,
119
+ 'exclude_columns': [],
120
+ 'numeric_scale': numeric_scale,
121
+ 'enclose_column_by_double_quotes': False
122
+ }
123
+ assert checksum_calls[0].kwargs == base_kwargs
124
+ if expect_retry:
125
+ assert len(checksum_calls) == 2
126
+ retry_kwargs = {**base_kwargs, 'bool_cast_before_sum': True}
127
+ assert checksum_calls[1].kwargs == retry_kwargs
128
+ else:
129
+ assert len(checksum_calls) == 1
125
130
  mock_countnulls_stmt.assert_called_once_with(
126
131
  object=mock_database_object,
127
132
  column_intersections=column_intersections,
@@ -129,14 +134,7 @@ class TestCreateChecksumsParametrized:
129
134
  exclude_columns=[],
130
135
  enclose_column_by_double_quotes=False
131
136
  )
132
- assert mock_execute.call_count == expected_execute_calls
133
-
134
- if expect_retry:
135
- snowflake_service.create_checksum_statement.assert_called_once()
136
- retry_kwargs = snowflake_service.create_checksum_statement.call_args.kwargs
137
- assert retry_kwargs['bool_cast_before_sum'] is True
138
- else:
139
- snowflake_service.create_checksum_statement.assert_not_called()
137
+ assert mock_execute.call_count == expected_call_count
140
138
 
141
139
  for column, expected in expected_columns.items():
142
140
  assert result[column] == expected
@@ -103,7 +103,6 @@ class TestCreateChecksumsParametrized:
103
103
  expected_execute_calls
104
104
  ):
105
105
  """Test create_checksums behavior across success, retry, and error scenarios."""
106
- sqlserver_service.create_checksum_statement = MagicMock(return_value='checksum_retry_sql')
107
106
 
108
107
  with patch.object(sqlserver_service, '_get_checksum_statement', return_value='checksum_sql') as mock_checksum_stmt, \
109
108
  patch.object(sqlserver_service, '_get_countnulls_statement', return_value='countnulls_sql') as mock_countnulls_stmt, \
@@ -123,13 +122,21 @@ class TestCreateChecksumsParametrized:
123
122
  enclose_column_by_double_quotes=False
124
123
  )
125
124
 
126
- mock_checksum_stmt.assert_called_once_with(
127
- object=mock_database_object,
128
- column_intersections=column_intersections,
129
- where_clause=where_clause,
130
- exclude_columns=[],
131
- numeric_scale=numeric_scale
132
- )
125
+ checksum_calls = mock_checksum_stmt.call_args_list
126
+ base_kwargs = {
127
+ 'object': mock_database_object,
128
+ 'column_intersections': column_intersections,
129
+ 'where_clause': where_clause,
130
+ 'exclude_columns': [],
131
+ 'numeric_scale': numeric_scale
132
+ }
133
+ assert checksum_calls[0].kwargs == base_kwargs
134
+ if expect_retry:
135
+ assert len(checksum_calls) == 2
136
+ retry_kwargs = {**base_kwargs, 'bool_cast_before_sum': True}
137
+ assert checksum_calls[1].kwargs == retry_kwargs
138
+ else:
139
+ assert len(checksum_calls) == 1
133
140
  mock_countnulls_stmt.assert_called_once_with(
134
141
  object=mock_database_object,
135
142
  column_intersections=column_intersections,
@@ -138,13 +145,6 @@ class TestCreateChecksumsParametrized:
138
145
  )
139
146
  assert mock_execute.call_count == expected_execute_calls
140
147
 
141
- if expect_retry:
142
- sqlserver_service.create_checksum_statement.assert_called_once()
143
- retry_kwargs = sqlserver_service.create_checksum_statement.call_args.kwargs
144
- assert retry_kwargs['bool_cast_before_sum'] is True
145
- else:
146
- sqlserver_service.create_checksum_statement.assert_not_called()
147
-
148
148
  for column, expected in expected_columns.items():
149
149
  assert result[column] == expected
150
150