better output

This commit is contained in:
randogoth 2023-06-06 19:09:07 +03:00
parent 076504a5f6
commit ef12ef0091
2 changed files with 50 additions and 33 deletions

View file

@ -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 []