1
|
|
|
"""
|
2
|
|
|
Facilitates moving files from a specified directory and matching pattern to a destination directory
|
3
|
|
|
"""
|
4
|
|
|
# package to facilitate operating system locale detection
|
5
|
|
|
import locale
|
6
|
|
|
# package to facilitate operating system operations
|
7
|
|
|
import os
|
8
|
|
|
# package to facilitate multiple operation system operations
|
9
|
|
|
import platform
|
10
|
|
|
|
11
|
|
|
# Custom classes specific to this package
|
12
|
|
|
from db_extractor.ExtractNeeds import ExtractNeeds
|
13
|
|
|
|
14
|
|
|
# get current script name
|
15
|
|
|
SCRIPT_NAME = os.path.basename(__file__).replace('.py', '')
|
16
|
|
|
|
17
|
|
|
# main execution logic
|
18
|
|
|
if __name__ == '__main__':
|
19
|
|
|
python_binary = 'python'
|
20
|
|
|
if platform.system() == 'Windows':
|
21
|
|
|
python_binary += '.exe'
|
22
|
|
|
os.system(python_binary + ' ' + os.path.join(os.path.normpath(os.path.dirname(__file__)),
|
23
|
|
|
'localizations_compile.py'))
|
24
|
|
|
locale_implemented = [
|
25
|
|
|
'en_US',
|
26
|
|
|
'it_IT',
|
27
|
|
|
'ro_RO',
|
28
|
|
|
]
|
29
|
|
|
try:
|
30
|
|
|
region_language = locale.getdefaultlocale('LC_ALL')
|
31
|
|
|
if region_language[0] not in locale_implemented:
|
32
|
|
|
language_to_use = locale_implemented[0]
|
33
|
|
|
else:
|
34
|
|
|
language_to_use = region_language[0]
|
35
|
|
|
except ValueError as err:
|
36
|
|
|
language_to_use = locale_implemented[0]
|
37
|
|
|
# instantiate Logger class
|
38
|
|
|
c_en = ExtractNeeds(SCRIPT_NAME, language_to_use)
|
39
|
|
|
# load script configuration
|
40
|
|
|
c_en.load_configuration()
|
41
|
|
|
# initiate Logging sequence
|
42
|
|
|
c_en.initiate_logger_and_timer()
|
43
|
|
|
# reflect title and input parameters given values in the log
|
44
|
|
|
c_en.class_clam.listing_parameter_values(
|
45
|
|
|
c_en.class_ln.logger, c_en.timer, 'Database Extractor',
|
46
|
|
|
c_en.config['input_options'][SCRIPT_NAME], c_en.parameters)
|
47
|
|
|
# loading extracting sequence details
|
48
|
|
|
c_en.load_extraction_sequence_and_dependencies()
|
49
|
|
|
# validation of the extraction sequence file
|
50
|
|
|
if c_en.class_bnfe.validate_all_json_files(
|
51
|
|
|
c_en.class_ln.logger, c_en.timer, c_en.file_extract_sequence):
|
52
|
|
|
# cycling through the configurations
|
53
|
|
|
for seq_idx, crt_sequence in enumerate(c_en.file_extract_sequence):
|
54
|
|
|
can_proceed = \
|
55
|
|
|
c_en.class_bnfe.validate_all_json_files_current(
|
56
|
|
|
c_en.class_ln.logger, c_en.timer, crt_sequence, seq_idx,
|
57
|
|
|
c_en.source_systems, c_en.user_credentials)
|
58
|
|
|
if c_en.class_bn.fn_evaluate_dict_values(can_proceed):
|
59
|
|
|
c_en.class_dbt.connect_to_database(
|
60
|
|
|
c_en.class_ln.logger, c_en.timer, c_en.class_bnfe.connection_details)
|
61
|
|
|
if c_en.class_dbt.connection is not None:
|
62
|
|
|
# instantiate DB connection handler
|
63
|
|
|
cursor = c_en.class_dbt.connection.cursor()
|
64
|
|
|
for crt_query in crt_sequence['queries']:
|
65
|
|
|
can_proceed_q = \
|
66
|
|
|
c_en.class_bnfe.validate_extraction_query(
|
67
|
|
|
c_en.class_ln.logger, c_en.timer, crt_query)
|
68
|
|
|
if can_proceed_q:
|
69
|
|
|
the_query = c_en.load_query(crt_query)
|
70
|
|
|
for crt_session in crt_query['sessions']:
|
71
|
|
|
dict__child__parent__grand_parent = c_en.pack_three_levels(
|
72
|
|
|
crt_session, crt_query, crt_sequence)
|
73
|
|
|
crt_session['start-iso-weekday'] = \
|
74
|
|
|
c_en.set_default_starting_weekday(
|
75
|
|
|
dict__child__parent__grand_parent)
|
76
|
|
|
dict__child__parent__grand_parent = c_en.pack_three_levels(
|
77
|
|
|
crt_session, crt_query, crt_sequence)
|
78
|
|
|
if 'parameters' in crt_session:
|
79
|
|
|
crt_session['parameters-handling-rules'] = \
|
80
|
|
|
c_en.set_default_parameter_rules(
|
81
|
|
|
dict__child__parent__grand_parent)
|
82
|
|
|
can_proceed_ses = \
|
83
|
|
|
c_en.class_bnfe.validate_query_session(
|
84
|
|
|
c_en.class_ln.logger, crt_session)
|
85
|
|
|
crt_session['extract-behaviour'] = \
|
86
|
|
|
c_en.class_bnfe.fn_set_extract_behaviour(crt_session)
|
87
|
|
|
dict__child__parent__grand_parent = c_en.pack_three_levels(
|
88
|
|
|
crt_session, crt_query, crt_sequence)
|
89
|
|
|
extraction_required = c_en.evaluate_if_extraction_is_required(
|
90
|
|
|
dict__child__parent__grand_parent)
|
91
|
|
|
if can_proceed_ses and extraction_required:
|
92
|
|
|
dict_prepared = {
|
93
|
|
|
'query': the_query,
|
94
|
|
|
'session': crt_session,
|
95
|
|
|
}
|
96
|
|
|
stats = c_en.extract_query_to_result_set(
|
97
|
|
|
c_en.class_ln.logger, cursor, dict_prepared)
|
98
|
|
|
if stats['rows_counted'] > 0:
|
99
|
|
|
dict__child__parent__grand_parent = c_en.pack_three_levels(
|
100
|
|
|
crt_session, crt_query, crt_sequence)
|
101
|
|
|
c_en.result_set_to_disk_file(
|
102
|
|
|
c_en.class_ln.logger, stats,
|
103
|
|
|
dict__child__parent__grand_parent)
|
104
|
|
|
c_en.close_cursor(c_en.class_ln.logger, cursor)
|
105
|
|
|
c_en.close_connection(c_en.class_ln.logger)
|
106
|
|
|
# just final message
|
107
|
|
|
c_en.class_bn.fn_final_message(c_en.class_ln.logger, c_en.parameters.output_log_file,
|
108
|
|
|
c_en.timer.timers.total(SCRIPT_NAME))
|
109
|
|
|
|