3 'mk_search_conditions',
4 'search_authors', 'search_books', 'search_extensions',
5 'search_genres', 'search_languages',
8 from sqlobject.sqlbuilder import AND, func
9 from .db import Author, Book, Extension, Genre, Language
12 def _mk_search_conditions_with_operator(table, case_sensitive, comparison_op,
16 for column, value in values.items():
18 getattr(getattr(table.q, column), comparison_op)(value))
19 for expr, value in expressions:
21 getattr(expr, comparison_op)(value))
23 for column, value in values.items():
26 getattr(table.q, column)), comparison_op)(value.lower()))
27 for expr, value in expressions:
29 getattr(func.lower(expr), comparison_op)(value.lower()))
33 _search_conditions_dict = {
34 'start': 'startswith',
35 'substring': 'contains',
40 def mk_search_conditions(table, search_type, case_sensitive, values,
42 return _mk_search_conditions_with_operator(
43 table, case_sensitive, _search_conditions_dict[search_type],
47 def _search(table, search_type, case_sensitive, values,
48 expressions, orderBy=None):
49 conditions = mk_search_conditions(
50 table, search_type, case_sensitive, values, expressions)
51 return table.select(AND(*conditions), orderBy=orderBy)
54 def search_authors(search_type, case_sensitive, values,
55 expressions, orderBy=None):
56 return _search(Author, search_type, case_sensitive, values,
60 def search_books(search_type, case_sensitive, values, orderBy=None):
61 return _search(Book, search_type, case_sensitive, values,
65 def search_extensions(search_type, case_sensitive, values, orderBy=None):
66 return _search(Extension, search_type, case_sensitive, values,
70 def search_genres(search_type, case_sensitive, values, orderBy=None):
71 return _search(Genre, search_type, case_sensitive, values,
75 def search_languages(search_type, case_sensitive, values, orderBy=None):
76 return _search(Language, search_type, case_sensitive, values,