icsDataValidation 1.0.358__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.
- icsDataValidation/configuration.py +19 -0
- icsDataValidation/connection_setups/__init__.py +0 -0
- icsDataValidation/connection_setups/azure_connection_setup.py +19 -0
- icsDataValidation/connection_setups/databricks_connection_setup.py +28 -0
- icsDataValidation/connection_setups/exasol_connection_setup.py +17 -0
- icsDataValidation/connection_setups/oracle_connection_setup.py +26 -0
- icsDataValidation/connection_setups/snowflake_connection_setup.py +35 -0
- icsDataValidation/connection_setups/teradata_connection_setup.py +18 -0
- icsDataValidation/core/__init__.py +0 -0
- icsDataValidation/core/database_objects.py +18 -0
- icsDataValidation/core/object_comparison.py +239 -0
- icsDataValidation/input_parameters/__init__.py +0 -0
- icsDataValidation/input_parameters/testing_tool_params.py +81 -0
- icsDataValidation/main.py +250 -0
- icsDataValidation/output_parameters/__init__.py +0 -0
- icsDataValidation/output_parameters/result_params.py +94 -0
- icsDataValidation/services/__init__.py +0 -0
- icsDataValidation/services/comparison_service.py +582 -0
- icsDataValidation/services/database_services/__init__.py +0 -0
- icsDataValidation/services/database_services/azure_service.py +320 -0
- icsDataValidation/services/database_services/databricks_hive_metastore_service.py +1694 -0
- icsDataValidation/services/database_services/databricks_unity_catalog_service.py +1379 -0
- icsDataValidation/services/database_services/exasol_service.py +261 -0
- icsDataValidation/services/database_services/oracle_service.py +713 -0
- icsDataValidation/services/database_services/snowflake_service.py +1100 -0
- icsDataValidation/services/database_services/teradata_service.py +665 -0
- icsDataValidation/services/initialization_service.py +103 -0
- icsDataValidation/services/result_service.py +573 -0
- icsDataValidation/services/system_service.py +61 -0
- icsDataValidation/services/testset_service.py +257 -0
- icsDataValidation/utils/__init__.py +0 -0
- icsDataValidation/utils/file_util.py +96 -0
- icsDataValidation/utils/logger_util.py +96 -0
- icsDataValidation/utils/pandas_util.py +159 -0
- icsDataValidation/utils/parallelization_util.py +52 -0
- icsDataValidation/utils/sql_util.py +14 -0
- icsDataValidation-1.0.358.dist-info/METADATA +21 -0
- icsDataValidation-1.0.358.dist-info/RECORD +40 -0
- icsDataValidation-1.0.358.dist-info/WHEEL +5 -0
- icsDataValidation-1.0.358.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import concurrent.futures
|
|
2
|
+
import logging
|
|
3
|
+
import functools
|
|
4
|
+
|
|
5
|
+
from typing import List
|
|
6
|
+
from icsDataValidation.utils.logger_util import configure_dev_ops_logger
|
|
7
|
+
|
|
8
|
+
logger = logging.getLogger('Parallelization_Util')
|
|
9
|
+
logger.setLevel(logging.INFO)
|
|
10
|
+
configure_dev_ops_logger(logger)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def get_parallelization_groups(objects: list, max_number_of_threads: int) -> List[List]:
|
|
14
|
+
"""
|
|
15
|
+
Split list of objects into n sublists of preferably same length - with n being the number of threads.
|
|
16
|
+
The number of threads n is either the input parameter max_number_of_threads or the number of objects.
|
|
17
|
+
"""
|
|
18
|
+
n_objects = len(objects)
|
|
19
|
+
|
|
20
|
+
if max_number_of_threads > n_objects:
|
|
21
|
+
number_of_threads = n_objects
|
|
22
|
+
else:
|
|
23
|
+
number_of_threads = max_number_of_threads
|
|
24
|
+
|
|
25
|
+
if not number_of_threads==0:
|
|
26
|
+
k, m = divmod(n_objects, number_of_threads)
|
|
27
|
+
object_groups = [
|
|
28
|
+
objects[i * k + min(i, m) : (i + 1) * k + min(i + 1, m)]
|
|
29
|
+
for i in range(number_of_threads)
|
|
30
|
+
]
|
|
31
|
+
else:
|
|
32
|
+
object_groups=[]
|
|
33
|
+
|
|
34
|
+
return object_groups, number_of_threads
|
|
35
|
+
|
|
36
|
+
def execute_func_in_parallel(function, objects: list, max_number_of_threads: int, *function_args) -> list:
|
|
37
|
+
"""
|
|
38
|
+
Execute a function in parallel. Takes list of objects as input and splits it in object_groups of preferably equal length.
|
|
39
|
+
The number of threads is equal to the number of object_groups.
|
|
40
|
+
If the function has arguments they can be passed as additional arguments.
|
|
41
|
+
"""
|
|
42
|
+
object_groups, number_of_threads = get_parallelization_groups(objects=objects, max_number_of_threads=max_number_of_threads)
|
|
43
|
+
|
|
44
|
+
logger.info(f"Parallelization of function '{function.__name__ }' with number of threads: {number_of_threads}")
|
|
45
|
+
|
|
46
|
+
result_groups = []
|
|
47
|
+
if number_of_threads>0:
|
|
48
|
+
with concurrent.futures.ThreadPoolExecutor(max_workers=number_of_threads) as pool:
|
|
49
|
+
partial_function = functools.partial(function, *function_args)
|
|
50
|
+
for result_group in pool.map(partial_function, object_groups):
|
|
51
|
+
result_groups.extend(result_group)
|
|
52
|
+
return result_groups
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
def parse_filter(filter_list:list)->str:
|
|
4
|
+
"""
|
|
5
|
+
Retrieve a where-filter in SQL-Syntax from a list of defined conditions.
|
|
6
|
+
"""
|
|
7
|
+
if filter_list != []:
|
|
8
|
+
where_clause = "WHERE "
|
|
9
|
+
for filter_condition in filter_list:
|
|
10
|
+
where_clause += f"({filter_condition}) AND "
|
|
11
|
+
where_clause = where_clause[:-4]
|
|
12
|
+
else:
|
|
13
|
+
where_clause = ""
|
|
14
|
+
return where_clause
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
|
+
Name: icsDataValidation
|
|
3
|
+
Version: 1.0.358
|
|
4
|
+
Summary: Add your description here
|
|
5
|
+
Home-page: https://initions.com/
|
|
6
|
+
Author: initions
|
|
7
|
+
Author-email: ICSMC_EXT_PYPIORG@accenture.com
|
|
8
|
+
License: MIT
|
|
9
|
+
Requires-Python: >=3.11
|
|
10
|
+
Requires-Dist: azure-storage-blob==12.13.1
|
|
11
|
+
Requires-Dist: boto3==1.26.154
|
|
12
|
+
Requires-Dist: cloe-util-snowflake-connector==1.0.5
|
|
13
|
+
Requires-Dist: databricks-sdk==0.29.0
|
|
14
|
+
Requires-Dist: databricks-sql-connector==3.0.1
|
|
15
|
+
Requires-Dist: numpy==1.26.3
|
|
16
|
+
Requires-Dist: oracledb==2.5.0
|
|
17
|
+
Requires-Dist: pandas==2.2.2
|
|
18
|
+
Requires-Dist: pyexasol==0.24.0
|
|
19
|
+
Requires-Dist: pyodbc
|
|
20
|
+
Requires-Dist: python-dotenv>=1.0.1
|
|
21
|
+
Requires-Dist: teradatasql==17.20.0.10
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
icsDataValidation/configuration.py,sha256=HOFjmC8_e2nvoItndMtJQQA1MR5aCgZGeF1AwY_FvjE,477
|
|
2
|
+
icsDataValidation/main.py,sha256=nmbFM8Epf4-Nhd9ArH31wT7Yx0MSjIHxX93zPke1ArA,12498
|
|
3
|
+
icsDataValidation/connection_setups/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
icsDataValidation/connection_setups/azure_connection_setup.py,sha256=gvTyctG63olZWfFH-qNHcuInMYWcJGWeLpdzciFvZwc,725
|
|
5
|
+
icsDataValidation/connection_setups/databricks_connection_setup.py,sha256=dNEBum-8R-TUW2SCEk3CaNtCr_gLFvn456KBlENpgJU,1220
|
|
6
|
+
icsDataValidation/connection_setups/exasol_connection_setup.py,sha256=RfCUsL6G-NaOW-qNK-3SfHcljbRaKD6fDIHXkNQhClk,590
|
|
7
|
+
icsDataValidation/connection_setups/oracle_connection_setup.py,sha256=D-4ucC1ChE4HYm93ECIEg_yBOrn1NkknxFBgFRGFmWs,978
|
|
8
|
+
icsDataValidation/connection_setups/snowflake_connection_setup.py,sha256=IgEhni4Q0oYGh2QzptpyfEUvUt3cVO28jNSGg11cxyI,1778
|
|
9
|
+
icsDataValidation/connection_setups/teradata_connection_setup.py,sha256=fIpuxz-FTqFK2vSMSuokqU9sdJkaJ4UP5piY_zIbj5k,624
|
|
10
|
+
icsDataValidation/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
+
icsDataValidation/core/database_objects.py,sha256=2oaDaVQajSYI_HJjJy1pmc6FsoK_wMfwgu6ZgEcFvow,523
|
|
12
|
+
icsDataValidation/core/object_comparison.py,sha256=OEz5m1pp_PbIWyM5998iB5obFKYdJEqDo9Z0Hpj7o4A,14988
|
|
13
|
+
icsDataValidation/input_parameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
+
icsDataValidation/input_parameters/testing_tool_params.py,sha256=6LkqEaH3vaeCn6d1b3jYIwlXAXIRclxLzcXdsmlkc9M,6731
|
|
15
|
+
icsDataValidation/output_parameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
+
icsDataValidation/output_parameters/result_params.py,sha256=5Mk9L9zWaxUqcKwLZQ539lVUp0b0s-YUmSA3PBgbqfs,2833
|
|
17
|
+
icsDataValidation/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
icsDataValidation/services/comparison_service.py,sha256=x8RjZs2bgYDHFueq5ysNADY1cC6rYBf6eDyCsF-_w84,42705
|
|
19
|
+
icsDataValidation/services/initialization_service.py,sha256=AHbJrq_LjMPFoeOJC2pi2ZZ1xkL8njSZn38psc3do60,6687
|
|
20
|
+
icsDataValidation/services/result_service.py,sha256=edD6aejIi5P7qDNHKnN46KrN5tfzwqnw5TB35SvFAWU,28396
|
|
21
|
+
icsDataValidation/services/system_service.py,sha256=GSkSPNG5PlLWchwlYM5H-1FMtuCNwpXcyZZOUB_0stU,3228
|
|
22
|
+
icsDataValidation/services/testset_service.py,sha256=k1wRjI4Ltw9fylek9iW8N6DvnXn13wf6IJ703qQDMEc,15363
|
|
23
|
+
icsDataValidation/services/database_services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
+
icsDataValidation/services/database_services/azure_service.py,sha256=VTdaT6is_4MMbK9wBJMSJLRFKVRVG-0btjp7dw4izJg,16338
|
|
25
|
+
icsDataValidation/services/database_services/databricks_hive_metastore_service.py,sha256=7UwRazJSPx4A_5wmf9_wt39bHpuyugMQ5HxN6BQAp0w,87581
|
|
26
|
+
icsDataValidation/services/database_services/databricks_unity_catalog_service.py,sha256=INA8rd3KW_jAplNagGa9tEON3dyOufcIAPOOdmc0Mrc,70259
|
|
27
|
+
icsDataValidation/services/database_services/exasol_service.py,sha256=7LYnRScO3DxBmuSN0HmTgsFc2el-Ii3A9jgGsXSJVU8,11074
|
|
28
|
+
icsDataValidation/services/database_services/oracle_service.py,sha256=60unwWlHm520ioFmz0y2K8ApwZrruf9iB0ojjQx0IWc,31523
|
|
29
|
+
icsDataValidation/services/database_services/snowflake_service.py,sha256=EYOZjkjeh0CMGApef-LWoXP4JeJzhAG_qUCqpwOQ9ek,61021
|
|
30
|
+
icsDataValidation/services/database_services/teradata_service.py,sha256=Rf0xzcZGEbooq3r2Rfe2fCahTm2Xw4uznQa8vyWoyqM,40169
|
|
31
|
+
icsDataValidation/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
|
+
icsDataValidation/utils/file_util.py,sha256=ZTMB1sTnIIdffg9tEJRCFQQ5SG8Fksc5ie1PM4gHXG4,3432
|
|
33
|
+
icsDataValidation/utils/logger_util.py,sha256=xS48_FFMot_hyQgJY8DUeRTn5jpdvRt5QI6bvlV1jCY,3647
|
|
34
|
+
icsDataValidation/utils/pandas_util.py,sha256=D_g7Xw7BIS2E-1ZhJIvp62K5xuKjIkj-7TxH4HN_8SI,6505
|
|
35
|
+
icsDataValidation/utils/parallelization_util.py,sha256=6P0YcQLmunW_fHR4f5-kdncZbOlxxqKyk6ZAFQQEd2k,2088
|
|
36
|
+
icsDataValidation/utils/sql_util.py,sha256=0c-BInElSsRmXUedfLP_h9Wsiscv9aic7IIc5f15Uzo,396
|
|
37
|
+
icsDataValidation-1.0.358.dist-info/METADATA,sha256=GD_MvcW_v96MzD1qZzY7PJspDVtvGjaCpPGLdW3OyjE,24605
|
|
38
|
+
icsDataValidation-1.0.358.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
39
|
+
icsDataValidation-1.0.358.dist-info/top_level.txt,sha256=BqWUGJb4J7ZybpDMeuGHxEHGHwXXJEIURd9pBybHzTM,18
|
|
40
|
+
icsDataValidation-1.0.358.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
icsDataValidation
|