Completed
Push — master ( 55df2f...e17347 )
by Daniel
16s queued 12s
created

extractor   A

Complexity

Total Complexity 0

Size/Duplication

Total Lines 109
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 86
dl 0
loc 109
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 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