From 710dc8ea474d4a48cdd6f9555e6401f627db6c13 Mon Sep 17 00:00:00 2001 From: randogoth Date: Fri, 9 Jun 2023 23:09:11 +0300 Subject: [PATCH] plugin writers --- orvani/orvani.py | 28 ++++++++-- orvani/plugins/hashdoubleslash.py | 51 ++++++++++++++++-- orvani/plugins/id3.py | 9 +++- orvani/plugins/pdf.py | 8 ++- requirements.txt | 3 +- test/.context.yaml | 2 - test/chirpy.wav | Bin 1066162 -> 1066360 bytes ...ent_14793553_USD_2022-11-01_2023-01-31.pdf | Bin 122093 -> 125125 bytes 8 files changed, 86 insertions(+), 15 deletions(-) diff --git a/orvani/orvani.py b/orvani/orvani.py index 673d18e..b246952 100644 --- a/orvani/orvani.py +++ b/orvani/orvani.py @@ -452,20 +452,40 @@ class OrvaniTag: for context_key in context.keys(): self.__updateindex(filename, context, context_key) + def __collect_contexts(self, context: dict): + elements = [] + context_keys = list(CONTEXTS.keys()) + for context_key in context_keys: + if not context_key in context: + context[context_key] = None + if context[context_key]: + if CONTEXTS[context_key]: + prefix = CONTEXTS[context_key] + else: + prefix = '' + if not type(context[context_key]) == str: + elements.append(' '.join([prefix + tag for tag in context[context_key]])) + else: + elements.append(context[context_key]) + else: + elements.append(None) + return elements + def export(self, filename: str, method: str): obj = { 'file' : Path(), 'config' : self.CONFIG, 'schema' : self.CTX, 'context' : {}, + 'collect' : self.__collect_contexts } o = SimpleNamespace(**obj) for plugin_name in self.PLUGINS: if 'plugins' in self.CONFIG: if plugin_name not in self.CONFIG['plugins']: continue - if plugin_name == method: - plugin = import_module('plugins.' + plugin_name) + plugin = import_module('plugins.' + plugin_name) + if plugin.NAME == method: suffixes = plugin.TYPES if plugin_name in self.CONFIG: if 'types' in self.CONFIG[plugin_name]: @@ -475,8 +495,8 @@ class OrvaniTag: self.__makeindex(o.file.parent, recursive=False) items = self.INDEX['items'] for found in items.keys(): - if './' + o.file.name == found: + if str(o.file).replace('./', '') == found.replace('./', ''): o.context = items[found] if hasattr(plugin, 'writer'): plugin.writer(o) - + diff --git a/orvani/plugins/hashdoubleslash.py b/orvani/plugins/hashdoubleslash.py index 37de317..1ca1f16 100644 --- a/orvani/plugins/hashdoubleslash.py +++ b/orvani/plugins/hashdoubleslash.py @@ -1,12 +1,35 @@ -""" -#// +orvani @python #example It even works in Python code -""" import re from pathlib import Path NAME = 'hash//' -TYPES = ['.md', '.txt', '.py'] REGEX = r'\s*([@+]\w+|#\w+(?'], + '.java' : MLC_C, + '.js' : MLC_C, + '.kt' : MLC_C, + '.md' : ['---', '---'], + '.php' : MLC_C, + '.py' : MLC_Python, + '.rb' : MLC_Perl, + '.rs' : MLC_C, + '.ts' : MLC_C, + '.txt' : ['---', '---'], +} +TYPES = MAP.keys() def reader(o): with o.file.open() as data: @@ -18,4 +41,22 @@ def reader(o): note = re.sub(REGEX, '', line.strip()[3:]).lstrip() argv = ' '.join(tags).split(' ') + [note] context = o.context(argv) - return context \ No newline at end of file + return context + +def writer(o): + string = PREFIX + ' '.join([x for x in o.collect(o.context) if x != None]) + '\n' + with o.file.open() as data: + content = data.readlines() + for num, line in enumerate(content): + if line.strip().startswith("#// ") or num > 3: + break + if not num > 3 and line.strip().startswith("#// "): + content[num] = string + with o.file.open('w') as file: + file.writelines(content) + else: + frontmatter = MAP[o.file.suffix][0] + '\n' + string + MAP[o.file.suffix][1] + '\n' + with o.file.open('r+') as file: + content = file.read() + file.seek(0, 0) + file.write(frontmatter + content) \ No newline at end of file diff --git a/orvani/plugins/id3.py b/orvani/plugins/id3.py index f8c5304..0bd95ca 100644 --- a/orvani/plugins/id3.py +++ b/orvani/plugins/id3.py @@ -30,8 +30,15 @@ def reader(o): context = o.context(argv) if not universal in context: context[universal] = [] + else: + context[universal] = [context[universal]] if id3map.keys(): for key in id3map.keys(): if key in context.keys(): context[key] += id3map[key] - return context \ No newline at end of file + return context + +def writer(o): + string = ' '.join([x for x in o.collect(o.context) if x != None]) + with taglib.File(o.file, save_on_exit=True) as song: + song.tags['COMMENT'] = [string] \ No newline at end of file diff --git a/orvani/plugins/pdf.py b/orvani/plugins/pdf.py index c42a292..3972601 100644 --- a/orvani/plugins/pdf.py +++ b/orvani/plugins/pdf.py @@ -15,4 +15,10 @@ def reader(o): argv = ' '.join(tags).split(' ') + [note] argv = [x for x in argv if x != ''] context = o.context(argv) - return context \ No newline at end of file + return context + +def writer(o): + string = ' '.join([x for x in o.collect(o.context) if x != None]) + pdf = PdfReader(o.file) + pdf.Info.Keywords = string + PdfWriter(o.file, trailer=pdf).write() diff --git a/requirements.txt b/requirements.txt index 92bdc8e..14a4040 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ olefile==0.46 pytaglib==2.0.0 -PyYAML==6.0 -rich==13.4.1 \ No newline at end of file +PyYAML==6.0 \ No newline at end of file diff --git a/test/.context.yaml b/test/.context.yaml index 170423e..013efa8 100644 --- a/test/.context.yaml +++ b/test/.context.yaml @@ -5,8 +5,6 @@ config: note: title projects: album tags: genre - types: - - .wav items: sub: contexts: diff --git a/test/chirpy.wav b/test/chirpy.wav index 53aba4ab2dcc5056e4b2317571fc2cc557c100a7..e2a7baa85afe3693550b93538c828b360d93d651 100644 GIT binary patch delta 402 zcmdng>G-3|kuAv6&8@(-k*$@Dv6YRfm5sTTjir^1wUv#nm5sfXjiZ%~vz3jjm5sZV zji;53x0Q{rm5qNZn?R7m^eP8|z<;2eFYd87|?y;84%>c&A`Bb2rdQ&0QyaI7XSbN delta 143 zcmey-<+!QSkuAv6&25!SBU>vQV=Eg|D;skw8%rx2YbzUDD;s+&8%HY}XDb_5D;sw! z8&4}6Zz~&LD;xh-Hh~}qC1-zMUj_yS2?hp+h=>RVhw{XdI7wOG(5%(0R8|Vr2qf` diff --git a/test/sub/statement_14793553_USD_2022-11-01_2023-01-31.pdf b/test/sub/statement_14793553_USD_2022-11-01_2023-01-31.pdf index 6e8de7941251df56b69c467e1635166fa5e01cdc..614e6d81ab69e8f62792ce8d327c2b7af4d3f3c8 100644 GIT binary patch delta 9027 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 I`nz!f0278*vj6}9 delta 6000 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