in src/ab/plugins/db/dao.py [0:0]
def gen_where(self, conditions):
# conditions = and_(*[self.table.c[key] == val for key, val in conditions.items()])
where = []
for key_operator, val in conditions.items():
if ':' in key_operator:
key, operator = key_operator.split(':')
else:
key = key_operator
operator = 'eq'
if operator == 'eq':
where.append(self.table.c[key] == val)
elif operator == 'ne':
where.append(self.table.c[key] != val)
elif operator == 'gte':
where.append(self.table.c[key] >= val)
elif operator == 'lte':
where.append(self.table.c[key] <= val)
elif operator == 'gt':
where.append(self.table.c[key] > val)
elif operator == 'lt':
where.append(self.table.c[key] < val)
elif operator == 'contains':
where.append(self.table.c[key].like('%{val}%'.format(val=val)))
elif operator == 'startswith':
where.append(self.table.c[key].like('{val}%'.format(val=val)))
elif operator == 'is':
if val == 'null':
where.append(self.table.c[key].is_(None))
else:
raise AlgorithmException(data='unknown is operand: ' + val)
elif operator == 'isnot':
if val == 'null':
where.append(self.table.c[key].isnot(None))
else:
raise AlgorithmException(data='unknown isnot operand: ' + val)
else:
raise AlgorithmException(data='unknown operator: ' + operator)
if self.global_filter:
where.append(text(self.global_filter))
return and_(*where)