extractor   A
last analyzed

Complexity

Total Complexity 0

Size/Duplication

Total Lines 92
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 69
dl 0
loc 92
rs 10
c 0
b 0
f 0
wmc 0
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