From f04ffae75a2eeb2a7a9b8b3693803b8d8eb7741b Mon Sep 17 00:00:00 2001 From: randogoth Date: Wed, 7 Jun 2023 18:10:44 +0300 Subject: [PATCH] frontmatter reader plugin --- .context.yaml | 4 ++- COMMANDS.md | 3 +++ README.md | 6 +++-- TODO.md | 4 +++ orvani/__pycache__/orvani.cpython-310.pyc | Bin 10725 -> 10940 bytes orvani/cmd.py | 7 +++++ orvani/orvani.py | 24 +++++++++++++----- orvani/plugins/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 149 bytes .../__pycache__/frontmatter.cpython-310.pyc | Bin 0 -> 710 bytes orvani/plugins/frontmatter.py | 17 +++++++++++++ 11 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 orvani/plugins/__init__.py create mode 100644 orvani/plugins/__pycache__/__init__.cpython-310.pyc create mode 100644 orvani/plugins/__pycache__/frontmatter.cpython-310.pyc create mode 100644 orvani/plugins/frontmatter.py diff --git a/.context.yaml b/.context.yaml index 96d45b3..9244bda 100644 --- a/.context.yaml +++ b/.context.yaml @@ -1,6 +1,8 @@ files: TODO.md: - contexts: [] + contexts: + - python + note: Chawera projects: - bokertov tags: [] diff --git a/COMMANDS.md b/COMMANDS.md index c6d0749..9889250 100644 --- a/COMMANDS.md +++ b/COMMANDS.md @@ -1,3 +1,6 @@ +--- +// @erfwegf +--- # Tagging + add file.txt @context +project #tag This is a note diff --git a/README.md b/README.md index 594b003..1ca5ed5 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ --- -project: +projects: - test - test2 -context: +contexts: - frrr +howard: +- fool --- # Orvani Tagger diff --git a/TODO.md b/TODO.md index 290e980..b492fc4 100644 --- a/TODO.md +++ b/TODO.md @@ -1,3 +1,7 @@ +--- +tags: +- frrr +--- + plugin API + support for frontmatter + 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 59ee027a6dde80692e4fe088590e2d8ea1a84058..d53852543e19cd307f7a058293e2a3052b96b2dd 100644 GIT binary patch delta 3324 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 mDWy57c8s7>7nF)Q7&sU?7`kd+Al diff --git a/orvani/cmd.py b/orvani/cmd.py index bf41927..1e0a026 100644 --- a/orvani/cmd.py +++ b/orvani/cmd.py @@ -5,6 +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 def mktable(query: str, index: dict): console = Console() @@ -87,6 +88,12 @@ def main(): orvani = OrvaniTag() + @orvani.metareader + def reader(o): + frontmatter.reader(o) + + # orvani.metadata() + if args.command in ['add', 'a']: if args.file and args.context: orvani.add(args.file, *args.context) diff --git a/orvani/orvani.py b/orvani/orvani.py index e3411b0..165d999 100644 --- a/orvani/orvani.py +++ b/orvani/orvani.py @@ -2,6 +2,7 @@ import os import yaml import shutil from pathlib import Path +from types import SimpleNamespace # Defaults @@ -60,7 +61,7 @@ class OrvaniTag: self.CONFIG = y['config'] else: self.DB = dict() - self.CONFIG = dict() + # self.CONFIG = dict() def __save(self): """ @@ -113,6 +114,7 @@ class OrvaniTag: if target.exists(): self.__cd(target.parent.name) 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: @@ -278,6 +280,10 @@ class OrvaniTag: for dir in dirs: rpath = os.path.join(root, dir) self.__indexfolder(rpath) + if files: + for file in files: + fpath = os.path.join(root, file) + self.metadata(fpath) if cache: with open(cachefile, 'w+') as data: yaml.dump(self.INDEX, data) @@ -327,7 +333,6 @@ class OrvaniTag: if filter and not filter == context_key: continue if context_key in query: - # Is it a list of context items? if type(query[context_key]) == list: for q in query[context_key]: if exact: @@ -368,7 +373,14 @@ class OrvaniTag: self.META_OUT.append(function) return function - def read_meta(self): - for callback in self.META_IN: - entry = callback(self.CONFIG, self.DB) - print(entry) \ No newline at end of file + def metadata(self, filename: str): + obj = { + 'path' : filename, + 'index' : self.INDEX, + 'schema' : self.CTX + } + o = SimpleNamespace(**obj) + for reader in self.META_IN: + reader(o) + for writer in self.META_OUT: + writer(o) diff --git a/orvani/plugins/__init__.py b/orvani/plugins/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/orvani/plugins/__pycache__/__init__.cpython-310.pyc b/orvani/plugins/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..948db03c01bfb3473f92a2001ff968c3c7e115c3 GIT binary patch literal 149 zcmd1j<>g{vU|>+}Zb$*qk3j@7W@KPsaA06yC}v?`U`SyIX3%8xTggxa5=IceEc7$- zb5r%xa!M=o1B&vqQj<%H_4A9$67w=k64Rk9{eqm*^vt|s{rLFIyv&mLc)fzkTO2mI T`6;D2sdgX}ig{vU|{f?+mMpP#K7JO@ADq&f`TEn!Ev6i`pIg70*5JWCuU&v6) z0%mb6WN=}K<*H?^VXa}v;w)n<(y3voVYOu_R05e>!;r<5!Ys*9#!%!4V}ryc85VHY zuqtU?C#h#p>SCU#$a*G9I z(n^LRF$M;PU)K5=`MIh3X*s18`T<4xS*gh-#rpY0Wr=y2C5h=!mVQA_X?kW}u|ATs z^a?6(u@$8zrlc0JfZ|n+fq{XGk&BUsk&BUyk&BTJOfxkIFiJ2AG4Xw4V&eP9#G&+q z<$sX`0|SF5OA#nZ++qj$J|{B?92Q_1u)B~5aRvs4TO2mI`6;D2sdk`rRSZc`Jd8X{ E06!wEr~m)} literal 0 HcmV?d00001 diff --git a/orvani/plugins/frontmatter.py b/orvani/plugins/frontmatter.py new file mode 100644 index 0000000..a75457f --- /dev/null +++ b/orvani/plugins/frontmatter.py @@ -0,0 +1,17 @@ +import frontmatter +from pathlib import Path + +def reader(o): + file = Path(o.path) + if file.suffix in ['.md', '.txt', '.markdown', '.rst']: + with open(file, 'r') as data: + y = frontmatter.load(data) + if y.metadata: + context = y.metadata.copy() + 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