29 lines
757 B
Python
29 lines
757 B
Python
def parse_like_term(term):
|
|
"""
|
|
Parse search term into (operation, term) tuple. Recognizes operators
|
|
in the beginning of the search term. Case insensitive is the default.
|
|
|
|
* = case sensitive (can precede other operators)
|
|
^ = starts with
|
|
= = exact
|
|
|
|
:param term:
|
|
Search term
|
|
"""
|
|
case_sensitive = term.startswith('*')
|
|
if case_sensitive:
|
|
term = term[1:]
|
|
# apply operators
|
|
if term.startswith('^'):
|
|
oper = 'startswith'
|
|
term = term[1:]
|
|
elif term.startswith('='):
|
|
oper = 'exact'
|
|
term = term[1:]
|
|
else:
|
|
oper = 'contains'
|
|
# add case insensitive flag
|
|
if not case_sensitive:
|
|
oper = 'i' + oper
|
|
return oper, term
|