1
|
|
|
"""
|
2
|
|
|
Facilitates moving files from a specified directory and matching pattern to a destination directory
|
3
|
|
|
"""
|
4
|
|
|
# package to facilitate operating system operations
|
5
|
|
|
import os
|
6
|
|
|
|
7
|
|
|
# Custom classes specific to this package
|
8
|
|
|
from project_locale.localizations_common import LocalizationsCommon
|
9
|
|
|
from db_extractor.ManageSettings import ManageSettings
|
10
|
|
|
from db_extractor.ExtractNeeds import ExtractNeeds
|
11
|
|
|
|
12
|
|
|
# get current script name
|
13
|
|
|
SCRIPT_NAME = os.path.basename(__file__).replace('.py', '')
|
14
|
|
|
|
15
|
|
|
# main execution logic
|
16
|
|
|
if __name__ == '__main__':
|
17
|
|
|
# instantiate Localizations Common class
|
18
|
|
|
class_lc = LocalizationsCommon()
|
19
|
|
|
# ensure all compiled localization files are in place (as needed for localized messages later)
|
20
|
|
|
class_lc.run_localization_compile()
|
21
|
|
|
# establish localization language to use
|
22
|
|
|
language_to_use = class_lc.get_region_language_to_use_from_operating_system()
|
23
|
|
|
# instantiate Manage Settings class
|
24
|
|
|
c_ms = ManageSettings()
|
25
|
|
|
# instantiate Logger class
|
26
|
|
|
c_en = ExtractNeeds(SCRIPT_NAME, language_to_use)
|
27
|
|
|
# load script configuration
|
28
|
|
|
c_en.load_configuration()
|
29
|
|
|
# initiate Logging sequence
|
30
|
|
|
c_en.initiate_logger_and_timer()
|
31
|
|
|
# reflect title and input parameters given values in the log
|
32
|
|
|
c_en.class_clam.listing_parameter_values(
|
33
|
|
|
c_en.class_ln.logger, c_en.timer, 'Database Extractor',
|
34
|
|
|
c_en.config['input_options'][SCRIPT_NAME], c_en.parameters)
|
35
|
|
|
# loading extracting sequence details
|
36
|
|
|
c_en.load_extraction_sequence_and_dependencies()
|
37
|
|
|
# validation of the extraction sequence file
|
38
|
|
|
if c_en.class_bnfe.validate_all_json_files(
|
39
|
|
|
c_en.class_ln.logger, c_en.timer, c_en.file_extract_sequence):
|
40
|
|
|
# cycling through the configurations
|
41
|
|
|
for seq_idx, crt_sequence in enumerate(c_en.file_extract_sequence):
|
42
|
|
|
can_proceed = c_en.class_bnfe.validate_all_json_files_current(
|
43
|
|
|
c_en.class_ln.logger, c_en.timer, crt_sequence, seq_idx,
|
44
|
|
|
c_en.source_systems, c_en.user_credentials)
|
45
|
|
|
if c_en.class_bn.fn_evaluate_dict_values(can_proceed):
|
46
|
|
|
c_en.class_dbt.connect_to_database(
|
47
|
|
|
c_en.class_ln.logger, c_en.timer, c_en.class_bnfe.connection_details)
|
48
|
|
|
if c_en.class_dbt.connection is not None:
|
49
|
|
|
# instantiate DB connection handler
|
50
|
|
|
cursor = c_en.class_dbt.connection.cursor()
|
51
|
|
|
for crt_query in crt_sequence['queries']:
|
52
|
|
|
can_proceed_q = c_en.class_bnfe.validate_extraction_query(
|
53
|
|
|
c_en.class_ln.logger, c_en.timer, crt_query)
|
54
|
|
|
if can_proceed_q:
|
55
|
|
|
the_query = c_en.load_query(crt_query)
|
56
|
|
|
for crt_session in crt_query['sessions']:
|
57
|
|
|
dict__hierarchy = c_en.pack_three_levels(
|
58
|
|
|
crt_session, crt_query, crt_sequence)
|
59
|
|
|
crt_session['start-iso-weekday'] = \
|
60
|
|
|
c_en.class_ph.set_default_starting_weekday(dict__hierarchy)
|
61
|
|
|
dict__hierarchy = c_en.pack_three_levels(
|
62
|
|
|
crt_session, crt_query, crt_sequence)
|
63
|
|
|
if 'parameters' in crt_session:
|
64
|
|
|
crt_session['parameters-handling-rules'] = \
|
65
|
|
|
c_en.set_default_parameter_rules(dict__hierarchy)
|
66
|
|
|
can_proceed_ses = \
|
67
|
|
|
c_en.class_bnfe.validate_query_session(
|
68
|
|
|
c_en.class_ln.logger, crt_session)
|
69
|
|
|
crt_session['extract-behaviour'] = \
|
70
|
|
|
c_ms.fn_set_extract_behaviour(crt_session)
|
71
|
|
|
dict__hierarchy = c_en.pack_three_levels(
|
72
|
|
|
crt_session, crt_query, crt_sequence)
|
73
|
|
|
extraction_required = \
|
74
|
|
|
c_en.evaluate_if_extraction_is_required(dict__hierarchy)
|
75
|
|
|
if can_proceed_ses and extraction_required:
|
76
|
|
|
dict_prepared = {
|
77
|
|
|
'query': the_query,
|
78
|
|
|
'session': crt_session,
|
79
|
|
|
}
|
80
|
|
|
stats = c_en.extract_query_to_result_set(
|
81
|
|
|
c_en.class_ln.logger, cursor, dict_prepared)
|
82
|
|
|
if stats['rows_counted'] > 0:
|
83
|
|
|
dict__hierarchy = c_en.pack_three_levels(
|
84
|
|
|
crt_session, crt_query, crt_sequence)
|
85
|
|
|
c_en.result_set_to_disk_file(
|
86
|
|
|
c_en.class_ln.logger, stats, dict__hierarchy)
|
87
|
|
|
c_en.close_cursor(c_en.class_ln.logger, cursor)
|
88
|
|
|
c_en.close_connection(c_en.class_ln.logger)
|
89
|
|
|
# just final message
|
90
|
|
|
c_en.class_bn.fn_final_message(c_en.class_ln.logger, c_en.parameters.output_log_file,
|
91
|
|
|
c_en.timer.timers.total(SCRIPT_NAME))
|
92
|
|
|
|