-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconditions.py
More file actions
66 lines (49 loc) · 2.38 KB
/
conditions.py
File metadata and controls
66 lines (49 loc) · 2.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
class BasicCondition:
compare_operators = ('=', '!=', '>', '>=', '<', '<=', 'LIKE')
logic_operators = ['AND', 'OR']
def __init__(self, field_name, value=None, compare_operator=None, logic_operator='AND'):
super().__init__()
self.field_name = field_name
self._value = value
self.logic_operator = logic_operator
self.compare_operator = compare_operator
@property
def value(self):
return self._value
@value.setter
def value(self, value):
self._value = value
def get_query_str(self, include_logic_operator=True):
query = self.logic_operator + ' ' if include_logic_operator else ''
query += '{field_name} {cmp_op} ? '.format(field_name=self.field_name, cmp_op=self.compare_operator)
return query
def add_values(self, params:list):
params.append(self.value)
class BetweenCondition(BasicCondition):
def __init__(self, field_name, value_l, value_r, logic_operator='AND'):
super().__init__(field_name, logic_operator=logic_operator)
self.value_l = value_l
self.value_r = value_r
@property
def value(self):
return self.value_l, self.value_r
def get_query_str(self, include_logic_operator=True):
query = self.logic_operator + ' ' if include_logic_operator else ''
query += '(? < {field_name} and {field_name} < ?) '.format(field_name=self.field_name)
return query
def add_values(self, params:list):
params.append(self.value_l)
params.append(self.value_r)
class InCondition(BasicCondition):
def __init__(self, field_name, value=None, compare_operator=None, logic_operator='AND'):
super().__init__(field_name, value, compare_operator, logic_operator)
self.compare_operator = 'IN'
def get_query_str(self, include_logic_operator=True):
query = self.logic_operator + ' ' if include_logic_operator else ''
value_list = ', '.join(['?' for v in self.value])
query += '{field_name} {cmp_op} ({v_list})'.format(field_name=self.field_name, cmp_op=self.compare_operator, v_list=value_list)
return query
def add_values(self, params:list):
params.extend(self.value)
def create_conditions(field_names, values, compare_operators, logic_operators):
return [condition for condition in map(BasicCondition, field_names, values, compare_operators, logic_operators)]