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]