Mercurial > kallithea
comparison rhodecode/controllers/admin/admin.py @ 3072:86e087bd75ce beta
fixed tests, made the journal filter consistent accross different databases
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Fri, 07 Dec 2012 01:04:17 +0100 |
parents | cc7eedb5323c |
children | a5f0bc867edc 10b4e34841a4 |
comparison
equal
deleted
inserted
replaced
3071:7b0c19b00629 | 3072:86e087bd75ce |
---|---|
28 from pylons import request, tmpl_context as c, url | 28 from pylons import request, tmpl_context as c, url |
29 from sqlalchemy.orm import joinedload | 29 from sqlalchemy.orm import joinedload |
30 from webhelpers.paginate import Page | 30 from webhelpers.paginate import Page |
31 from whoosh.qparser.default import QueryParser | 31 from whoosh.qparser.default import QueryParser |
32 from whoosh import query | 32 from whoosh import query |
33 from sqlalchemy.sql.expression import or_, and_ | 33 from sqlalchemy.sql.expression import or_, and_, func |
34 | 34 |
35 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator | 35 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator |
36 from rhodecode.lib.base import BaseController, render | 36 from rhodecode.lib.base import BaseController, render |
37 from rhodecode.model.db import UserLog, User | 37 from rhodecode.model.db import UserLog, User |
38 from rhodecode.lib.utils2 import safe_int, remove_prefix, remove_suffix | 38 from rhodecode.lib.utils2 import safe_int, remove_prefix, remove_suffix |
61 | 61 |
62 def wildcard_handler(col, wc_term): | 62 def wildcard_handler(col, wc_term): |
63 if wc_term.startswith('*') and not wc_term.endswith('*'): | 63 if wc_term.startswith('*') and not wc_term.endswith('*'): |
64 #postfix == endswith | 64 #postfix == endswith |
65 wc_term = remove_prefix(wc_term, prefix='*') | 65 wc_term = remove_prefix(wc_term, prefix='*') |
66 return getattr(col, 'endswith')(wc_term) | 66 return func.lower(col).endswith(wc_term) |
67 elif wc_term.startswith('*') and wc_term.endswith('*'): | 67 elif wc_term.startswith('*') and wc_term.endswith('*'): |
68 #wildcard == ilike | 68 #wildcard == ilike |
69 wc_term = remove_prefix(wc_term, prefix='*') | 69 wc_term = remove_prefix(wc_term, prefix='*') |
70 wc_term = remove_suffix(wc_term, suffix='*') | 70 wc_term = remove_suffix(wc_term, suffix='*') |
71 return getattr(col, 'contains')(wc_term) | 71 return func.lower(col).contains(wc_term) |
72 | 72 |
73 def get_filterion(field, val, term): | 73 def get_filterion(field, val, term): |
74 | 74 |
75 if field == 'repository': | 75 if field == 'repository': |
76 field = getattr(UserLog, 'repository_name') | 76 field = getattr(UserLog, 'repository_name') |
86 | 86 |
87 #sql filtering | 87 #sql filtering |
88 if isinstance(term, query.Wildcard): | 88 if isinstance(term, query.Wildcard): |
89 return wildcard_handler(field, val) | 89 return wildcard_handler(field, val) |
90 elif isinstance(term, query.Prefix): | 90 elif isinstance(term, query.Prefix): |
91 return field.startswith(val) | 91 return func.lower(field).startswith(func.lower(val)) |
92 elif isinstance(term, query.DateRange): | 92 elif isinstance(term, query.DateRange): |
93 return and_(field >= val[0], field <= val[1]) | 93 return and_(field >= val[0], field <= val[1]) |
94 return field == val | 94 return func.lower(field) == func.lower(val) |
95 | 95 |
96 if isinstance(qry, (query.And, query.Term, query.Prefix, query.Wildcard, | 96 if isinstance(qry, (query.And, query.Term, query.Prefix, query.Wildcard, |
97 query.DateRange)): | 97 query.DateRange)): |
98 if not isinstance(qry, query.And): | 98 if not isinstance(qry, query.And): |
99 qry = [qry] | 99 qry = [qry] |