def gen_where()

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)