From 534152eb9fd06090e853353a310e838c8312333b Mon Sep 17 00:00:00 2001 From: randogoth Date: Wed, 7 Jun 2023 00:15:45 +0300 Subject: [PATCH] meta API --- .context.yaml | 34 ++++++++++++++++++++-------------- README.md | 7 +++++++ TODO.md | 7 ++++--- metareaders.py | 26 ++++++++++++++++++++++++++ orvani.py | 34 +++++++++++++++++++++++++++++++--- 5 files changed, 88 insertions(+), 20 deletions(-) create mode 100644 metareaders.py diff --git a/.context.yaml b/.context.yaml index 4b8e464..3e89176 100644 --- a/.context.yaml +++ b/.context.yaml @@ -1,14 +1,20 @@ -TODO.md: - contexts: [] - note: The TODO file of this project - projects: - - tagger - tags: - - frr -orvani.py: - contexts: - - private - projects: - - tagger - tags: - - python +config: + index: + - md + - wav + - txt +files: + TODO.md: + contexts: [] + note: The TODO file of this project + projects: + - tagger + tags: + - frr + orvani.py: + contexts: + - private + projects: + - tagger + tags: + - python diff --git a/README.md b/README.md index 4da9783..594b003 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,10 @@ +--- +project: +- test +- test2 +context: +- frrr +--- # Orvani Tagger (From עוֹרְבָנִי, the Hebrew name for th Eurasian Jay) diff --git a/TODO.md b/TODO.md index b7b5ec9..8518142 100644 --- a/TODO.md +++ b/TODO.md @@ -1,3 +1,4 @@ -+ support for textfiles // -+ support for Markdown metadata -+ support for RST metadata \ No newline at end of file ++ command to remove all contexts recursively ++ plugin API ++ support for frontmatter ++ support for Comment ID3 tag \ No newline at end of file diff --git a/metareaders.py b/metareaders.py new file mode 100644 index 0000000..c41f4d6 --- /dev/null +++ b/metareaders.py @@ -0,0 +1,26 @@ +import taglib + +with taglib.File("/home/flux/Documents/230605-191750.wav", save_on_exit=True) as song: + +import frontmatter + +with open('README.md', 'r') as data: + y = frontmatter.load(data) + +print(y.metadata) + +@orvani.metareader + def yaml_read(conf, db): + for (root,dirs,files) in os.walk(path): + if files: + for file in files: + rpath = os.path.join(root, dir) + f, ext = os.path.splitext(file) + if ext[1:] in conf['index'] and ext[1:] in ['md', 'txt']: + with open(file, 'r') as data: + y = frontmatter.load(data) + print(y) + if y.metadata: + for meta in y.metadata: + db[file][meta] = y.metadata[meta] + return db \ No newline at end of file diff --git a/orvani.py b/orvani.py index 3e77844..651a4e1 100644 --- a/orvani.py +++ b/orvani.py @@ -5,6 +5,7 @@ import shutil from argparse import ArgumentParser as argp, SUPPRESS, RawTextHelpFormatter as raw from rich.console import Console from rich.table import Table +import frontmatter # Defaults @@ -13,9 +14,12 @@ CACHE_FILE = '.index.yaml' class OrvaniTag: + META_IN = [] + META_OUT = [] INDEX = {} # our search index CACHEFILE = '' # search index cache ('.index.yaml') DB = dict() # holds the folder context data + CONFIG = dict() FILENAME = '' # folder context data filename ('.context.yaml') FILE = '' # holds the folder context file path CTX = { # default contexts @@ -53,11 +57,15 @@ class OrvaniTag: if os.path.isfile(self.FILE): try: with open(self.FILE, 'r') as data: - self.DB = yaml.safe_load(data) + y = yaml.safe_load(data) + self.DB = y['files'] + if 'config' in y: + self.CONFIG = y['config'] except Exception: print('File does not exist') else: self.DB = dict() + self.CONFIG = dict() def __save(self): """ @@ -66,7 +74,10 @@ class OrvaniTag: """ try: with open(self.FILE, 'w+') as data: - yaml.dump(self.DB, data) + y = { + 'files' : self.DB + } + yaml.dump(y, data) except Exception: print('File write error') @@ -352,6 +363,19 @@ class OrvaniTag: result['found'] = sorted(self.INDEX['files'].keys(), key=lambda x: x.count('/')) return result + def metareader(self, function): + self.META_IN.append(function) + return function + + def metawriter(self, function): + 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) + def mktable(query: str, index: dict): console = Console() if len(index['found']) > 0: @@ -416,7 +440,8 @@ def main(): 'listproj', 'lsprj', 'listcon', 'lsc', 'listtag', 'lst', - 'clean', 'purge' + 'clean', 'purge', + 'read' ]) p.add_argument("file", nargs="?", type=str, help=SUPPRESS) p.add_argument("context", nargs="*", type=str, help=SUPPRESS) @@ -466,5 +491,8 @@ def main(): args.file = '' orvani.purge(args.file, args.not_recursive) + elif args.command in ['read']: + orvani.read_meta() + if __name__ == '__main__': main()