better output
This commit is contained in:
parent
076504a5f6
commit
ef12ef0091
2 changed files with 50 additions and 33 deletions
76
orvani.py
76
orvani.py
|
|
@ -218,13 +218,13 @@ class OrvaniTag:
|
|||
"""
|
||||
Returns an index object with query results and optionally saves a cached index
|
||||
|
||||
search (str): the search query
|
||||
path (str): the root context for the search and index
|
||||
filter (str): limit the search to a context
|
||||
exact (bool): exact search match if True, otherwise partial match
|
||||
recursive (bool): if True also searches all subfolder contexts
|
||||
cache (bool): if True loads index from cache file if exists, writes it if it doesn't exist
|
||||
|
||||
search (str): the search query
|
||||
|
||||
"""
|
||||
if path == '':
|
||||
path = './'
|
||||
|
|
@ -255,42 +255,52 @@ class OrvaniTag:
|
|||
'index' : self.INDEX,
|
||||
'found' : []
|
||||
}
|
||||
query = self.__context(search)
|
||||
ret = self.__context([' '])
|
||||
ret['note'] = []
|
||||
for ctx in self.CTX.keys():
|
||||
for context in self.INDEX[ctx]:
|
||||
if filter and not filter == ctx:
|
||||
continue
|
||||
for q in query[ctx]:
|
||||
if search[0]:
|
||||
query = self.__context(search)
|
||||
ret = self.__context([' '])
|
||||
ret['note'] = []
|
||||
for ctx in self.CTX.keys():
|
||||
for context in self.INDEX[ctx]:
|
||||
if filter and not filter == ctx:
|
||||
continue
|
||||
for q in query[ctx]:
|
||||
if exact:
|
||||
if q == context:
|
||||
if self.INDEX[ctx][context] not in ret[ctx]:
|
||||
ret[ctx] += self.INDEX[ctx][context]
|
||||
else:
|
||||
if q in context:
|
||||
if self.INDEX[ctx][context] not in ret[ctx]:
|
||||
ret[ctx] += self.INDEX[ctx][context]
|
||||
if exact:
|
||||
if q == context:
|
||||
if self.INDEX[ctx][context] not in ret[ctx]:
|
||||
ret[ctx] += self.INDEX[ctx][context]
|
||||
if 'note' in query and query['note'] == context:
|
||||
if self.INDEX[ctx][context] not in ret['note']:
|
||||
ret['note'] += self.INDEX[ctx][context]
|
||||
else:
|
||||
if q in context:
|
||||
if self.INDEX[ctx][context] not in ret[ctx]:
|
||||
ret[ctx] += self.INDEX[ctx][context]
|
||||
if exact:
|
||||
if 'note' in query and query['note'] == context:
|
||||
if self.INDEX[ctx][context] not in ret['note']:
|
||||
ret['note'] += self.INDEX[ctx][context]
|
||||
else:
|
||||
if 'note' in query and query['note'] in context:
|
||||
if self.INDEX[ctx][context] not in ret['note']:
|
||||
ret['note'] += self.INDEX[ctx][context]
|
||||
ret[ctx] = list(set(ret[ctx]))
|
||||
ret['note'] = list(set(ret['note']))
|
||||
if len(search) > 1:
|
||||
result['found'] = sorted(list(set(self.__intersect(ret))), key=lambda x: x.count('/'))
|
||||
if 'note' in query and query['note'] in context:
|
||||
if self.INDEX[ctx][context] not in ret['note']:
|
||||
ret['note'] += self.INDEX[ctx][context]
|
||||
ret[ctx] = list(set(ret[ctx]))
|
||||
ret['note'] = list(set(ret['note']))
|
||||
if len(search) > 1:
|
||||
result['found'] = sorted(list(set(self.__intersect(ret))), key=lambda x: x.count('/'))
|
||||
else:
|
||||
min = []
|
||||
for sublist in ret.values():
|
||||
min += sublist
|
||||
result['found'] = min
|
||||
return result
|
||||
else:
|
||||
min = []
|
||||
for sublist in ret.values():
|
||||
min += sublist
|
||||
result['found'] = min
|
||||
return result
|
||||
result['found'] = sorted(self.INDEX['files'].keys(), key=lambda x: x.count('/'))
|
||||
return result
|
||||
|
||||
def __intersect(self, result: dict):
|
||||
"""
|
||||
Returns an intersection of two search queries
|
||||
|
||||
result (dict): dict with search result lists to be intersected
|
||||
|
||||
"""
|
||||
mresult = {key: value for key, value in result.items() if value}
|
||||
if len(mresult) < 2:
|
||||
return []
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue