Files
deb-python-sqlalchemy-utils/sqlalchemy_utils/operators.py
Konsta Vesterinen 478e92fd34 Remove futile import
2014-01-14 09:33:27 +02:00

51 lines
1.2 KiB
Python

import sqlalchemy as sa
class CaseInsensitiveComparator(sa.Unicode.Comparator):
@classmethod
def lowercase_arg(cls, func):
def operation(self, other, **kwargs):
if other is None:
return getattr(sa.Unicode.Comparator, func)(
self, other, **kwargs
)
return getattr(sa.Unicode.Comparator, func)(
self, sa.func.lower(other), **kwargs
)
return operation
def in_(self, other):
if isinstance(other, list) or isinstance(other, tuple):
other = map(sa.func.lower, other)
return sa.Unicode.Comparator.in_(self, other)
def notin_(self, other):
if isinstance(other, list) or isinstance(other, tuple):
other = map(sa.func.lower, other)
return sa.Unicode.Comparator.notin_(self, other)
string_operator_funcs = [
'__eq__',
'__ne__',
'__lt__',
'__le__',
'__gt__',
'__ge__',
'concat',
'contains',
'ilike',
'like',
'notlike',
'notilike',
'startswith',
'endswith',
]
for func in string_operator_funcs:
setattr(
CaseInsensitiveComparator,
func,
CaseInsensitiveComparator.lowercase_arg(func)
)