Passed
Push — master ( aa0f28...584873 )
by Daniel
01:01
created

ParameterHandling.special_case_string()   A

Complexity

Conditions 3

Size

Total Lines 10
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 10
dl 0
loc 10
rs 9.9
c 0
b 0
f 0
cc 3
nop 3
1
2
# standard Python packages
3
from datetime import datetime as ClassDT
4
from datetime import timedelta
5
6
# Custom classes specific to this package
7
from sources.data_extractor.BasicNeeds import BasicNeeds
8
9
10
class ParameterHandling:
11
    lcl_c_bn = None
12
13
    def __init__(self):
14
        self.lcl_c_bn = BasicNeeds()
15
16
    def build_parameters(self, local_logger, query_session_parameters, in_parameter_rules):
17
        local_logger.debug('Seen Parameters are: ' + str(query_session_parameters))
18
        parameters_type = type(query_session_parameters)
19
        local_logger.debug('Parameters type is ' + str(parameters_type))
20
        if str(parameters_type) == "<class 'dict'>":
21
            tp = tuple(query_session_parameters.values())
22
        elif str(parameters_type) == "<class 'list'>":
23
            tp = tuple(query_session_parameters)
24
        else:
25
            local_logger.error('Unknown parameter type (expected either Dictionary or List)')
26
            exit(1)
27
        local_logger.debug('Initial Tuple for Parameters is: ' + str(tp))
0 ignored issues
show
introduced by
The variable tp does not seem to be defined for all execution paths.
Loading history...
28
        return self.stringify_parameters(local_logger, tp, in_parameter_rules)
29
30
    def calculate_date_from_expression(self, local_logger, expression_parts):
31
        final_string = ''
32
        current_date = ClassDT.today()
33
        if expression_parts[1] == 'CYCW':
34
            if len(expression_parts) >= 3:
35
                current_date = current_date + timedelta(weeks=int(expression_parts[2]))
36
            week_iso_num = ClassDT.isocalendar(current_date)[1]
37
            final_string = str(ClassDT.isocalendar(current_date)[0])\
38
                           + self.lcl_c_bn.fn_numbers_with_leading_zero(str(week_iso_num), 2)
39
        else:
40
            local_logger.error('Unknown expression encountered '
41
                               + str(expression_parts[1]) + '...')
42
            exit(1)
43
        return final_string
44
45
    def stringify_parameters(self, local_logger, tuple_parameters, given_parameter_rules):
46
        working_list = []
47
        for ndx, crt_parameter in enumerate(tuple_parameters):
48
            current_parameter_type = str(type(crt_parameter))
49
            working_list.append(ndx)
50
            if current_parameter_type == "<class 'str'>":
51
                local_logger.debug('Current Parameter is STR and has the value: ' + crt_parameter)
52
                working_list[ndx] = self.special_case_string(local_logger, crt_parameter)
53
            elif current_parameter_type in ("<class 'list'>", "<class 'dict'>"):
54
                prefix = current_parameter_type.replace("<class '").replace("'>")
55
                local_logger.debug('Current Parameter is ' + prefix.upper()
56
                                   + ' and has the value: ' + str(crt_parameter))
57
                working_list[ndx] = given_parameter_rules[prefix + '-values-prefix'] \
58
                                    + given_parameter_rules[prefix + '-values-glue']\
59
                                        .join(crt_parameter) \
60
                                    + given_parameter_rules[prefix + '-values-suffix']
61
        final_tuple = tuple(working_list)
62
        local_logger.debug('Final Tuple for Parameters is: ' + str(final_tuple))
63
        return final_tuple
64
65
    def special_case_string(self, local_logger, crt_parameter):
66
        resulted_parameter_value = crt_parameter
67
        if len(crt_parameter) > 14 and crt_parameter[:15] == 'CalculatedDate_':
68
            parameter_value_parts = crt_parameter.split('_')
69
            resulted_parameter_value = self.calculate_date_from_expression(local_logger,
70
                                                                           parameter_value_parts)
71
            local_logger.debug('Current Parameter is STR '
72
                               + 'and has been re-interpreted as value: '
73
                               + str(crt_parameter))
74
        return resulted_parameter_value
75