Skip to content

Commit dbe78fb

Browse files
committed
add changeset support in fulltext search
1 parent 8962448 commit dbe78fb

File tree

2 files changed

+42
-8
lines changed

2 files changed

+42
-8
lines changed

CHANGES.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
1.7.2 (unreleased)
22
------------------
33

4-
- Nothing changed yet.
4+
- add changeset support in fulltext search [amleczko]
55

66

77
1.7.1 (2013-04-23)

por/dashboard/search.py

+41-7
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,17 @@ def searchable_tracs(request):
4141

4242
class SearchSchema(colander.MappingSchema):
4343
tracs = colander.SchemaNode(deform.Set(allow_empty=True),
44-
widget=ChosenMultipleWidget(css_class='trac-select',
45-
placeholder=u'Select tracs'),
44+
widget=ChosenMultipleWidget(placeholder=u'Select tracs'),
45+
missing=colander.null,
46+
title=u'')
47+
realms = colander.SchemaNode(deform.Set(allow_empty=True),
48+
widget=ChosenMultipleWidget(placeholder=u'Select realms',
49+
values=[('', ''),
50+
('ticket', 'Ticket'),
51+
('wiki', 'Wiki'),
52+
('changeset','Changeset')]),
4653
missing=colander.null,
4754
title=u'')
48-
4955
searchable = colander.SchemaNode(typ=colander.String(),
5056
title=u'',
5157
widget = deform.widget.TextInputWidget(
@@ -71,7 +77,6 @@ def search(request):
7177
if not controls:
7278
return {'form': form.render(),
7379
'results':[]}
74-
7580
try:
7681
appstruct = form.validate(controls)
7782
except deform.ValidationFailure as e:
@@ -114,10 +119,11 @@ def search(request):
114119

115120
class FullTextSearch(object):
116121

117-
def __init__(self, request, tracs=None, searchable=None):
122+
def __init__(self, request, tracs=None, searchable=None, realms=None):
118123
self.request = request
119124
self.viewable_tracs = list(tracs)
120125
self.searchable = searchable.split(' ') # always a sequence
126+
self.realms = list(realms)
121127
self.solr_endpoint = request.registry.settings.get('por.solr')
122128

123129
@property
@@ -169,13 +175,32 @@ def query_exclude(items):
169175
else:
170176
return query_include(self.viewable_tracs)
171177

178+
def _build_realm_filter(self, si):
179+
180+
Q = si.query().Q
181+
182+
def query(items):
183+
if len(items) > 2:
184+
return Q(realm=items.pop()) | query(items)
185+
elif len(items) == 2:
186+
return Q(realm=items.pop()) | Q(realm=items.pop())
187+
elif len(items) == 1:
188+
return Q(realm=items.pop())
189+
else:
190+
return ""
191+
return query(self.realms)
192+
172193
def _do_search(self, sort_by=None):
173194
si = SolrInterface(self.solr_endpoint)
174195
query = si.query().field_limit(score=True)
175196

176197
for searchterm in self.searchable:
177198
query = query.query(searchterm)
178199

200+
realm_query = self._build_realm_filter(si)
201+
if realm_query:
202+
query = query.filter(realm_query)
203+
179204
trac_query = self._build_trac_filter(si)
180205
if trac_query:
181206
query = query.filter(trac_query)
@@ -218,7 +243,12 @@ class FullTextSearchObject(object):
218243
def __init__(self, project, realm, id=None, score=None,
219244
title=None, author=None, changed=None, created=None,
220245
oneline=None, involved=None, popularity=None, comments=None,
221-
solr_highlights=None , **kwarg):
246+
parent_id=None, solr_highlights=None , **kwarg):
247+
248+
if not involved:
249+
involved = ()
250+
if not author:
251+
author = ()
222252
self.project = project
223253
self.author = ', '.join(author + involved)
224254
self.created = created
@@ -230,6 +260,7 @@ def __init__(self, project, realm, id=None, score=None,
230260
self._oneline = oneline
231261
self.id = id
232262
self.score = score
263+
self.parent_id = parent_id
233264

234265
@property
235266
def title(self):
@@ -252,4 +283,7 @@ def oneline(self):
252283
return bleach.clean(text, ['span'], ['class'], strip=True)
253284

254285
def href(self):
255-
return "trac/%s/%s/%s" % (self.project, self.realm, self.id)
286+
if self.realm == 'changeset':
287+
return "trac/%s/%s/%s/%s" % (self.project, self.realm, self.id, self.parent_id)
288+
else:
289+
return "trac/%s/%s/%s" % (self.project, self.realm, self.id)

0 commit comments

Comments
 (0)