From 35231aa55b31b8ebd4d76c7ca9342c94edddcedc Mon Sep 17 00:00:00 2001 From: randogoth Date: Thu, 8 Jun 2023 01:26:41 +0300 Subject: [PATCH] plugins --- .context.yaml | 3 +- .index.yaml | 54 ++++++++++ COMMANDS.md | 2 +- TODO.md | 3 +- orvani/__pycache__/orvani.cpython-310.pyc | Bin 10940 -> 11241 bytes orvani/cmd.py | 3 +- orvani/orvani.py | 93 ++++++++++-------- .../__pycache__/frontmatter.cpython-310.pyc | Bin 710 -> 663 bytes .../hashslashslash.cpython-310.pyc | Bin 0 -> 941 bytes orvani/plugins/frontmatter.py | 6 +- orvani/plugins/hashslashslash.py | 23 +++++ 11 files changed, 138 insertions(+), 49 deletions(-) create mode 100644 .index.yaml create mode 100644 orvani/plugins/__pycache__/hashslashslash.cpython-310.pyc create mode 100644 orvani/plugins/hashslashslash.py diff --git a/.context.yaml b/.context.yaml index 9244bda..08f0f6e 100644 --- a/.context.yaml +++ b/.context.yaml @@ -5,4 +5,5 @@ files: note: Chawera projects: - bokertov - tags: [] + tags: + - rusty diff --git a/.index.yaml b/.index.yaml new file mode 100644 index 0000000..f464731 --- /dev/null +++ b/.index.yaml @@ -0,0 +1,54 @@ +contexts: + frrr: + - ./README.md + python: + - ./TODO.md + test: + - ./test/test.txt +files: + ./README.md: + contexts: + - frrr + projects: + - test2 + - test + ./TODO.md: + contexts: + - python + note: Chawera + projects: + - bokertov + tags: + - frrr + - rusty + ./test/test.txt: + contexts: + - test + note: frrr + projects: + - test + tags: + - faa + - test +note: + Chawera: + - ./TODO.md + frrr: + - ./test/test.txt +projects: + bokertov: + - ./TODO.md + test: + - ./README.md + - ./test/test.txt + test2: + - ./README.md +tags: + faa: + - ./test/test.txt + frrr: + - ./TODO.md + rusty: + - ./TODO.md + test: + - ./test/test.txt diff --git a/COMMANDS.md b/COMMANDS.md index 9889250..92c9235 100644 --- a/COMMANDS.md +++ b/COMMANDS.md @@ -1,5 +1,5 @@ --- -// @erfwegf +#// @erfwegf #super #great +coding This is awesome --- # Tagging diff --git a/TODO.md b/TODO.md index b492fc4..f6e42b0 100644 --- a/TODO.md +++ b/TODO.md @@ -2,6 +2,5 @@ tags: - frrr --- -+ plugin API -+ support for frontmatter ++ fix clean and purge + support for Comment ID3 tag \ No newline at end of file diff --git a/orvani/__pycache__/orvani.cpython-310.pyc b/orvani/__pycache__/orvani.cpython-310.pyc index d53852543e19cd307f7a058293e2a3052b96b2dd..e9a30dc2cbe190300e004048e8aecd18b7a4b6ce 100644 GIT binary patch delta 4502 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 delta 4246 zcmaDEz9*D7pO=@5fq{Wx@2rLt{fWG?j1d#HO*C1e*i%@eI8xYB*i$%C7*jasutagX zGo)~(aJMj|a5pnWaiuT@GidTmoT4~!eB$!I%SiAmMmE=4a@AVnXn%OJ(Dg*8e( z#VEzNg&|5I#U#bFg&|5Y#SE<5JjJ4gB}yqpF_=Nqe)ANjB1T>w1_lN{P0m|P`Nc)N zlZ9D)<#`zx7>f8n1P22H!!7RQ{JfIXijw&3)XJ3%MN*UNS!@~QHt%JLV-({DDPT*^ z&r8cp_tWGmVgl(Bnrz7Cq$B}if{ePwSXm?m;(!ThkPepk_~aCW$y3?xrhrT+l4W3E z_{CJN?Wf6JqzqE30wTbM$${197o_GDDS()q#ffRD@hPRb1)9u7U^~=6!YnC?C5h

h)9o-bp_;{!q zzsY=DUW{gwBe`VjPcSerlrYpVHZ#^T*Dx<&T*y$ARKu`BO^l%!vfYC zriF~PEG29;EX^Ph<}8*PhAj3nhN9pahAfT+oC_IT7-IEmSwXxSR!N2w#%$&y=Mt_G zZjibf<}4OT29S6S3y2hFXl86?1j{%=rEC}qm1|gQSjrfR0wIdP(nzv-oFI_}JRrkr zSTY%*PUD@d!+oKi4-#YYpr8>41pr$?Vo_>d$t{+=#N5BWc7DRy4J0cv}ic)j) z%TkLR85kHe+0lZm$O)ta9$dFrGD}i((E_c=g@J*g5fo^k{Kmlo3bo1m_}mjxFoT94 zEohjE#A}$dSW_5Nn0i6!6&64W5O3NtfaqeK5)jSa%!s6tVFAbFWd2+AoH%`Zi>)*- zCo?Y_l5jxT8sbM5BtN==ya)Cp$n6l1feQ?_l+>KmlGJG+Z-K%Jk``DPdBEv`jZuh^ zhp|e)zi9Jzfi5OX0gy4^qK7TBI4v_L^%iSpaY|;j! zh~=;4EaA!GTfkq#R>QfFsg|pTVSzvmR|@MwCPs$B;6ks-dZOj^pn|_Bnt_2Kq{y9t zfx*pBQxIq5frF_?6clO(psdTDSsV`vSa1{;fg{rsBnb-nTP)>?IoU895d3BW5pyH`8Jn}O=M!^nan9^VGSzOA-1xmW#*Km7Tsb^tw>BRDT)WV3|yb3 zg51tllv-SxQ-W;R<{HUdMmDg)Qj_0HiJ`>4fOHn4!Q^UbNk)muQ>8VKg8!3-d*$vinrKA;|)9{eA&Y4N3pfI|)N-UV)UefX*nlYq@Hei*jnXYB;l*in2kLgJfzrCBddk zGL$hEWrOTtWst0gTLqFfXJBTqVJP$lX)R+Y>cFbC1F99fPIj>4&eSj$t*c?JVV7h8 zJ7O(Xlh)R-)z@&aGDu=G$_S>tjG^cZR_$l-I0O_*pyt5s61Ea{kUCH}H8X-(HVlR8 zB^;pEUJ6@wJxkHo5>Ak!4p2T}TgV7%mVw&&Eet7~y-YPMDO@%TH7vml=?t~pHEavG z!BNFl%TvQ$!(+}+%U$>zq`QV2qz|FGgcIcC6mCfdP~@iYq;Q~{r^#D2pG#r#9F@(C z`jZ1xUA4jKnW-onlwuh(S299UHnjt*co5~+mfJW(k;fqTg4s ziqb&*3J{SFA{Ky%#UKLY1f+;TxQ&~EfdOQ6vDsuLZ6#F+5m6ao0R W+!f+sWMN@pWMX1s1VOexLhJykc$Mn_ diff --git a/orvani/cmd.py b/orvani/cmd.py index 1e0a026..799208c 100644 --- a/orvani/cmd.py +++ b/orvani/cmd.py @@ -5,7 +5,7 @@ from pathlib import Path from rich.console import Console from rich.table import Table from orvani import OrvaniTag, CONTEXT_FILE, CACHE_FILE, CONTEXTS -from plugins import frontmatter +from plugins import frontmatter, hashslashslash def mktable(query: str, index: dict): console = Console() @@ -91,6 +91,7 @@ def main(): @orvani.metareader def reader(o): frontmatter.reader(o) + hashslashslash.reader(o) # orvani.metadata() diff --git a/orvani/orvani.py b/orvani/orvani.py index 165d999..1eaf8bb 100644 --- a/orvani/orvani.py +++ b/orvani/orvani.py @@ -3,6 +3,7 @@ import yaml import shutil from pathlib import Path from types import SimpleNamespace +from pprint import pprint # Defaults @@ -112,9 +113,8 @@ class OrvaniTag: """ target = Path(file) if target.exists(): - self.__cd(target.parent.name) + self.__cd(target.parent) context = self.__context(argv) - print(context) if target.name in self.DB: for context_key in self.CTX.keys(): if self.CTX[context_key] != None: @@ -136,7 +136,7 @@ class OrvaniTag: """ target = Path(file) if target.exists(): - self.__cd(target.parent.name) + self.__cd(target.parent) context = self.__context(argv) if file in self.DB: for context_key in self.CTX.keys(): @@ -157,7 +157,7 @@ class OrvaniTag: """ target = Path(file) if target.exists(): - self.__cd(target.parent.name) + self.__cd(target.parent) if fop: target.unlink(missing_ok=True) if file in self.DB: @@ -209,7 +209,7 @@ class OrvaniTag: path = '.' target = Path(path) if target.exists(): - self.__cd(target.parent.name) + self.__cd(target.parent) DB = self.DB.copy() for file in self.DB.keys(): if not Path(file).is_file(): @@ -301,15 +301,37 @@ class OrvaniTag: if self.DB: for file in self.DB.keys(): path = os.path.join(sub, file) - self.INDEX['files'].update( { path : self.DB[file]} ) for context_key in self.CTX.keys(): if context_key in self.DB[file]: - for item in self.DB[file][context_key]: - filelist = [path] - if context_key in self.INDEX: - if item in self.INDEX[context_key]: - filelist += self.INDEX[context_key][item] - self.INDEX[context_key][item] = filelist + self.__updateindex(path, self.DB[file], context_key) + + def __updateindex(self, path: str, context: dict, context_key: str): + # Update files index + for key, value in context.items(): + if path in self.INDEX['files']: + if key in self.INDEX['files'][path] and isinstance(self.INDEX['files'][path][key], list) and isinstance(value, list): + self.INDEX['files'][path][key] += value + self.INDEX['files'][path][key] = list(set(self.INDEX['files'][path][key])) + else: + self.INDEX['files'][path][key] = value + else: + self.INDEX['files'][path] = { key : value } + + # Update context index + if type(context[context_key]) == list: + for item in context[context_key]: + filelist = [path] + if context_key in self.INDEX: + if item in self.INDEX[context_key]: + filelist += self.INDEX[context_key][item] + self.INDEX[context_key][item] = list(set(filelist)) + else: + item = context[context_key] + filelist = [path] + if context_key in self.INDEX: + if item in self.INDEX[context_key]: + filelist += self.INDEX[context_key][item] + self.INDEX[context_key][item] = list(set(filelist)) def __search(self, search, filter: str=None, exact:bool=False): """ @@ -327,42 +349,31 @@ class OrvaniTag: query = self.__context(search) return_dict = self.__context([' ']) universal = {i for i in self.CTX if self.CTX[i]==None}.pop() + if universal in query: + query[universal] = [query[universal]] for context_key in self.CTX.keys(): return_dict[context_key] = [] - for context in self.INDEX[context_key]: - if filter and not filter == context_key: - continue - if context_key in query: - if type(query[context_key]) == list: - for q in query[context_key]: - if exact: - if q == context: - if self.INDEX[context_key][context] not in return_dict[context_key]: - return_dict[context_key] += self.INDEX[context_key][context] - else: - if q in context: - if self.INDEX[context_key][context] not in return_dict[context_key]: - return_dict[context_key] += self.INDEX[context_key][context] - if universal in query: - if exact: - if query[universal] == context: - if self.INDEX[context_key][context] not in return_dict[context_key]: - return_dict[context_key] += self.INDEX[context_key][context] - else: - if query[universal] in context: - if self.INDEX[context_key][context] not in return_dict[context_key]: - return_dict[context_key] += self.INDEX[context_key][context] - if context_key in return_dict: - return_dict[context_key] = list(set(return_dict[context_key])) + for param in query.keys(): + needles = query[param] + if universal in query.keys(): + needles += query[universal] + if needles: + haystack = self.INDEX[param].keys() + for hay in haystack: + for needle in needles: + if needle in hay: + if self.INDEX[param][hay] not in return_dict[param]: + return_dict[param] += self.INDEX[param][hay] if len(search) > 1: - result['found'] = sorted(list(set(self.__intersect(return_dict))), key=lambda x: x.count('/')) + result['found'] = list(set(self.__intersect(return_dict))) else: min = [] for sublist in return_dict.values(): min += sublist result['found'] = list(set(min)) else: - result['found'] = sorted(self.INDEX['files'].keys(), key=lambda x: x.count('/')) + result['found'] = self.INDEX['files'].keys() + result['found'] = sorted(result['found'], key=lambda x: x.count('/')) return result def metareader(self, function): @@ -377,7 +388,9 @@ class OrvaniTag: obj = { 'path' : filename, 'index' : self.INDEX, - 'schema' : self.CTX + 'schema' : self.CTX, + 'update' : self.__updateindex, + 'context' : self.__context } o = SimpleNamespace(**obj) for reader in self.META_IN: diff --git a/orvani/plugins/__pycache__/frontmatter.cpython-310.pyc b/orvani/plugins/__pycache__/frontmatter.cpython-310.pyc index f114072207a2f8e9894ce37745746a40c6ea4eca..67611ad544c9ffe0cc05af262542e0ff3f36b4f3 100644 GIT binary patch delta 271 zcmX@cI-Qj_pO=@5fq{V`?0rLu_(a|~M|K7V1`Y-W24@BahT;tj3=AaN&qb zEn5x40xpmNH7qr33z-=i3JoXoF)BzIG8FrlGcq!OU?c-0LkdGM7;7?5j$l+`(&V1p z%;?R@R$7pfSdyyAKKUM_qTns=hI(nQ`kM>Ylq1`Y-W24@BahT>Zc3=Aa5EI`wCMLdrOdLu-SpFADFfcG^vJ`=Qev7>z bu_PlWGpUG)fq?-mQzQmrAqerw)l4z~4$wo} diff --git a/orvani/plugins/__pycache__/hashslashslash.cpython-310.pyc b/orvani/plugins/__pycache__/hashslashslash.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23aee412e1df63117c19197be7e043b1c68f0e3f GIT binary patch literal 941 zcmd1j<>g{vU|{HAYE02!W?*;>;vi!t1_lNP1_p*=4F(2=6ox2<6vh;$9L6Zd6vhUY%shnvh=Sz&lvJ*lAP4wqGTvedNG!>yl8hB~*VIgA1gV5#kUuyX7#N&EuKmTpz)-?a!;r<;%vj4VCzQt0I zSdwvzt++HTEwkblOMXFW-Yw45ywcp%qQsI^kO@VZ1-H1s1{IfQmSo&wDoVY@o|c)H zl9-coi#5pA-8JGCb8%_XEw-HE5|Cn+to+QpTdc(eIhiH5*pu_~N>VFIZn0#iRu=pPgE{lA%b6fq~(doqk4sZmND-PHBaHKv8~HYH~@jJ|s1kB&I`I z`UN?q>6v-O`WcDE8O1p;La(6m7F$tjVoGWeC_xpgF)%Q2F@m57BL^c3BOjv#qa33c zBNrnNqYxug1JifD|4htEe_8$)sW31wXtLd6kB?8uPmYf-;s?2p9Tc27nMvTlEfQp4 oU;wKFI~0jf2C3z+$<0qG%}KQb#a1yWO|vj?F!M07F!3+}0Num*u>b%7 literal 0 HcmV?d00001 diff --git a/orvani/plugins/frontmatter.py b/orvani/plugins/frontmatter.py index a75457f..3a033e7 100644 --- a/orvani/plugins/frontmatter.py +++ b/orvani/plugins/frontmatter.py @@ -11,7 +11,5 @@ def reader(o): for meta in y.metadata.keys(): if not meta in o.schema: del context[meta] - if o.path in o.index['files']: - o.index['files'][o.path].update(context) - else: - o.index['files'][o.path] = context \ No newline at end of file + for context_key in context.keys(): + o.update(o.path, context, context_key) \ No newline at end of file diff --git a/orvani/plugins/hashslashslash.py b/orvani/plugins/hashslashslash.py new file mode 100644 index 0000000..875ee61 --- /dev/null +++ b/orvani/plugins/hashslashslash.py @@ -0,0 +1,23 @@ +""" +#// +orvani @python #example It even works in Python code +""" +import re +from pathlib import Path + +REGEX = r'\s*([@+]\w+|#\w+(? 5: + break + if line.strip().startswith("#// "): + tags = re.findall(REGEX, line.strip()[3:]) + note = re.sub(REGEX, '', line.strip()[3:]).lstrip() + argv = ' '.join(tags).split(' ') + [note] + context = o.context(argv) + for context_key in context.keys(): + o.update(o.path, context, context_key) + \ No newline at end of file