in Allura/allura/lib/solr.py [0:0]
def search(self, q, fq=None, **kw):
if q is None:
q = '' # shlex will hang on None
# Parse query
preds = []
q_parts = shlex_split(q)
if fq:
q_parts += fq
for part in q_parts:
if part in ('&&', 'AND'):
continue
if part in ('||', 'OR'):
log.warning(f"MockSOLR doesn't implement OR yet; treating as AND. q={q} fq={fq}")
continue
if ':' in part:
field, value = part.split(':', 1)
if value.startswith('(') and value.endswith(')'):
value = value[1:-1]
preds.append((field, value))
else:
preds.append(('text', part))
result = self.MockHits()
for obj in self.db.values():
for field, value in preds:
neg = False
if field[0] in ('!', '-'):
neg = True
field = field[1:]
if field == 'text' or field.endswith('_t'):
if (value not in str(obj.get(field, ''))) ^ neg:
break
elif field.endswith('_b'):
if (asbool(value) != obj.get(field, False)) ^ neg:
break
else:
if (value != str(obj.get(field, ''))) ^ neg:
break
else:
result.append(obj)
if asbool(kw.get('hl')):
result.highlighting = {}
return result