From ef12ef00917449ee62fc6f0a8b1807d7cfd25010 Mon Sep 17 00:00:00 2001 From: randogoth Date: Tue, 6 Jun 2023 19:09:07 +0300 Subject: [PATCH] better output --- .context.yaml | 7 +++++ orvani.py | 76 +++++++++++++++++++++++++++++---------------------- 2 files changed, 50 insertions(+), 33 deletions(-) diff --git a/.context.yaml b/.context.yaml index b00ceb4..d04d595 100644 --- a/.context.yaml +++ b/.context.yaml @@ -7,3 +7,10 @@ TODO.md: - frr - tag2 - tag1 +orvani.py: + contexts: + - private + projects: + - tagger + tags: + - python diff --git a/orvani.py b/orvani.py index fbf4913..6ea51aa 100644 --- a/orvani.py +++ b/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 []