From a6724c11efe53b09b5c8f43b2dfade0a9d922111 Mon Sep 17 00:00:00 2001 From: randogoth Date: Mon, 12 Jun 2023 22:14:51 +0300 Subject: [PATCH] cleanup packed --- .context.yaml | 25 +- COMMANDS.md | 17 - LICENSE | 7 + {orvani => build/lib/orvanitag}/__init__.py | 0 {orvani => build/lib/orvanitag}/cmd.py | 53 +- {orvani => build/lib/orvanitag}/orvani.py | 550 ++++++++---- .../lib/orvanitag}/plugins/__init__.py | 0 .../lib/orvanitag}/plugins/frontmatter.py | 0 .../lib/orvanitag}/plugins/hashdoubleslash.py | 0 .../lib/orvanitag}/plugins/id3.py | 0 .../lib/orvanitag}/plugins/office.py | 0 .../lib/orvanitag}/plugins/pdf.py | 0 context.txt | 12 - context.yaml | 25 - orvanitag.egg-info/PKG-INFO | 52 ++ orvanitag.egg-info/SOURCES.txt | 18 + orvanitag.egg-info/dependency_links.txt | 1 + orvanitag.egg-info/entry_points.txt | 3 + orvanitag.egg-info/requires.txt | 1 + orvanitag.egg-info/top_level.txt | 1 + orvanitag/__init__.py | 2 + orvanitag/cmd.py | 303 +++++++ orvanitag/orvani.py | 845 ++++++++++++++++++ .../test.txt => orvanitag/plugins/__init__.py | 0 orvanitag/plugins/frontmatter.py | 22 + orvanitag/plugins/hashdoubleslash.py | 63 ++ orvanitag/plugins/id3.py | 42 + orvanitag/plugins/office.py | 105 +++ orvanitag/plugins/pdf.py | 24 + setup.py | 29 + test/.context.yaml | 19 - test/chirpy.wav | Bin 1066360 -> 0 bytes test/folder with spaces/file with spaces.txt | 3 - test/office.odt | Bin 8940 -> 0 bytes test/oldword.doc | Bin 9728 -> 0 bytes test/sheet.xlsx | Bin 4720 -> 0 bytes test/sub/.context.yaml | 6 - ...ent_14793553_USD_2022-11-01_2023-01-31.pdf | Bin 125125 -> 0 bytes test/table.ods | Bin 7314 -> 0 bytes test/tableold.xls | Bin 5632 -> 0 bytes test/word.docx | Bin 4715 -> 0 bytes 41 files changed, 1931 insertions(+), 297 deletions(-) delete mode 100644 COMMANDS.md create mode 100644 LICENSE rename {orvani => build/lib/orvanitag}/__init__.py (100%) rename {orvani => build/lib/orvanitag}/cmd.py (88%) rename {orvani => build/lib/orvanitag}/orvani.py (54%) rename {orvani => build/lib/orvanitag}/plugins/__init__.py (100%) rename {orvani => build/lib/orvanitag}/plugins/frontmatter.py (100%) rename {orvani => build/lib/orvanitag}/plugins/hashdoubleslash.py (100%) rename {orvani => build/lib/orvanitag}/plugins/id3.py (100%) rename {orvani => build/lib/orvanitag}/plugins/office.py (100%) rename {orvani => build/lib/orvanitag}/plugins/pdf.py (100%) delete mode 100644 context.txt delete mode 100644 context.yaml create mode 100644 orvanitag.egg-info/PKG-INFO create mode 100644 orvanitag.egg-info/SOURCES.txt create mode 100644 orvanitag.egg-info/dependency_links.txt create mode 100644 orvanitag.egg-info/entry_points.txt create mode 100644 orvanitag.egg-info/requires.txt create mode 100644 orvanitag.egg-info/top_level.txt create mode 100644 orvanitag/__init__.py create mode 100644 orvanitag/cmd.py create mode 100644 orvanitag/orvani.py rename test/test.txt => orvanitag/plugins/__init__.py (100%) create mode 100644 orvanitag/plugins/frontmatter.py create mode 100644 orvanitag/plugins/hashdoubleslash.py create mode 100644 orvanitag/plugins/id3.py create mode 100644 orvanitag/plugins/office.py create mode 100644 orvanitag/plugins/pdf.py create mode 100644 setup.py delete mode 100644 test/.context.yaml delete mode 100644 test/chirpy.wav delete mode 100644 test/folder with spaces/file with spaces.txt delete mode 100644 test/office.odt delete mode 100644 test/oldword.doc delete mode 100644 test/sheet.xlsx delete mode 100644 test/sub/.context.yaml delete mode 100644 test/sub/statement_14793553_USD_2022-11-01_2023-01-31.pdf delete mode 100644 test/table.ods delete mode 100644 test/tableold.xls delete mode 100644 test/word.docx diff --git a/.context.yaml b/.context.yaml index 438432d..44362ef 100644 --- a/.context.yaml +++ b/.context.yaml @@ -1,24 +1 @@ -items: - COMMANDS.md: - contexts: [] - projects: [] - tags: - - great - README.md: - contexts: [] - projects: [] - tags: - - fool - TODO.md: - contexts: - - bbb - - python - note: Chawera - projects: - - proooo - - fool - - bokertov - tags: - - rusty - - xxx - - ttt +items: {} diff --git a/COMMANDS.md b/COMMANDS.md deleted file mode 100644 index efbe93b..0000000 --- a/COMMANDS.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -#// @erfwegf #super #great +coding This is awesome ---- -# Tagging - -+ add file.txt @context +project #tag This is a note -+ del file.txt @context - -# File Operations - -+ copy/cp file.txt dir/file.txt -+ move/mv file.txt dir/file.txt -+ del/rm file.txt - -# DB Operations - -+ dir/list/ls/l TERM -e -p \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cf1a457 --- /dev/null +++ b/LICENSE @@ -0,0 +1,7 @@ +Copyright 2023 randogoth + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/orvani/__init__.py b/build/lib/orvanitag/__init__.py similarity index 100% rename from orvani/__init__.py rename to build/lib/orvanitag/__init__.py diff --git a/orvani/cmd.py b/build/lib/orvanitag/cmd.py similarity index 88% rename from orvani/cmd.py rename to build/lib/orvanitag/cmd.py index 69dfab4..76a1687 100644 --- a/orvani/cmd.py +++ b/build/lib/orvanitag/cmd.py @@ -6,7 +6,7 @@ from pathlib import Path from rich import box from rich.console import Console from rich.table import Table -from orvani import OrvaniTag, CONTEXT_FILE, CACHE_FILE, CONTEXTS +from orvanitag.orvani import OrvaniTag, CONTEXT_FILE, CACHE_FILE, CONTEXTS def mktable(query: str, index: dict, filter=None, trunc_len: int=25): """Creates a rich table from `otag ls` search result @@ -31,7 +31,7 @@ def mktable(query: str, index: dict, filter=None, trunc_len: int=25): ctx = list(CONTEXTS.keys()) styles = ["cyan", "yellow", "magenta", "green"] for i, c in enumerate(ctx): - table.add_column(ctx[i].title(), style=styles[i], max_width=12, overflow='fold') + table.add_column(ctx[i].title(), style=styles[i], overflow='fold') # Create Rows Based on Search Results for file in index['found']: @@ -46,7 +46,8 @@ def mktable(query: str, index: dict, filter=None, trunc_len: int=25): long_file_pre = math.floor(trunc_len/2-1) long_file_post = len(item.name) - math.ceil(trunc_len/2-1) path = f'{item.parent}/' + ((item.name[:long_file_pre] + '…' + item.name[long_file_post:]) if len(item.name) > trunc_len else item.name) - + path = path.replace('./', '') + fc = index['index']['items'][file] elements = [] elements.append(path) @@ -82,9 +83,9 @@ def nice_context(context: dict): if context['projects']: string += '[cyan]' + ' '.join(['+' + tag for tag in context['projects']]) + '[/cyan] ' if context['contexts']: - string += '[yellow]' + ' '.join(['+' + tag for tag in context['contexts']]) + '[/yellow] ' + string += '[yellow]' + ' '.join(['@' + tag for tag in context['contexts']]) + '[/yellow] ' if context['tags']: - string += '[magenta]' + ' '.join(['+' + tag for tag in context['tags']]) + '[/magenta] ' + string += '[magenta]' + ' '.join(['#' + tag for tag in context['tags']]) + '[/magenta] ' if 'note' in context: string += '[green]\'' + context['note'] + '\'[/green] ' return string @@ -113,12 +114,11 @@ def main(): """ # Command Line Argument Setup p = argp(description="OrvaniTagger (otag)", formatter_class=raw) - p.add_argument("--not-recursive", "-nr", action="store_false", help="(list,clean,purge,export) Include subdirectories in search") - p.add_argument("--no-file-operation", "-nf", action="store_false", help="(copy,move,del) Skip file operation, just apply to context") - p.add_argument("--no-plugins", "-np", action="store_false", help="(list,export) Don't use plug-ins to search file metadata") + p.add_argument("--recursive", "-r", action="store_false", help="(list,clean,purge,export) Include subdirectories in search") + p.add_argument("--file-operation", "-f", action="store_true", help="(copy,move,del) Do file operation, not just context") p.add_argument("--path", "-p", action="store", type=str, help="(list,export) Use custom path", default='') p.add_argument("--exact", "-e", action="store_true", help="(list) Match exact search term") - p.add_argument("--files", "-f", action="store_true", help="(list) Only show files, ignore folders") + p.add_argument("--files", action="store_true", help="(list) Only show files, ignore folders") p.add_argument("--dirs", "-d", action="store_true", help="(list) Only show directories, ignore files") p.add_argument("--either", "-or", action="store_true", help="(list) Combine search terms by OR instead of AND") p.add_argument("--cache", "-c", action="store_true", help="(list) Cache index search (useful with deep directory trees)") @@ -133,10 +133,11 @@ def main(): 'move', 'mv', 'del', 'rm', 'clean', 'c', - 'purge', 'p' + 'purge', 'p', 'write', 'w', 'import', 'i', - 'export', 'e' + 'export', 'e', + 'scan', 's' ]) p.add_argument("file", nargs="?", type=str, help=SUPPRESS) p.add_argument("context", nargs="*", type=str, help=SUPPRESS) @@ -145,7 +146,6 @@ def main(): # Load Orvani orvani = OrvaniTag() - orvani.ENABLE_PLUGINS = args.no_plugins # Parse Arguments and Run otag Methods try: @@ -158,10 +158,13 @@ def main(): console.print(f":thinking_face: File [strong]{fb[1]}[/strong] doesn't exist.") elif args.command in ['remove', 'r']: - if args.file and args.context: + if args.file: fb = orvani.remove(args.file, *args.context) if fb[0] == 0: - console.print(f':wastebasket: Entry {nice_context(fb[2])}successfully removed from file [strong]{fb[1]}[/strong].') + if fb[2] == None: + console.print(f':wastebasket: All entries successfully removed from file [strong]{fb[1]}[/strong].') + else: + console.print(f':wastebasket: Entry {nice_context(fb[2])}successfully removed from file [strong]{fb[1]}[/strong].') elif fb[0] == 1: console.print(f":thinking_face: File [strong]{fb[1]}[/strong] doesn't exist.") elif fb[0] == 2: @@ -170,7 +173,7 @@ def main(): elif args.command in ['list', 'ls', 'l']: query = [args.file] + args.context if query: - r = orvani.list(args.path, args.exact, args.either, args.not_recursive, args.cache, args.delete_cache, *query) + r = orvani.list(args.path, args.exact, args.either, args.recursive, args.cache, args.delete_cache, *query) filter = None if args.files: filter = 'files' @@ -180,7 +183,7 @@ def main(): elif args.command in ['copy', 'cp']: if args.file and args.context: - fb = orvani.move(args.file, args.context[0], True, args.no_file_operation) + fb = orvani.move(args.file, args.context[0], True, args.file_operation) if fb[0] == 0: console.print(f':dancers: File [strong]{fb[1]}[/strong] with entry {nice_context(fb[3])}successfully copied to [strong]{fb[2]}[/strong]') elif fb[0] == 1: @@ -193,7 +196,7 @@ def main(): elif args.command in ['move', 'mv']: if args.file and args.context: - fb = orvani.move(args.file, args.context[0], False, args.no_file_operation) + fb = orvani.move(args.file, args.context[0], False, args.file_operation) if fb[0] == 0: console.print(f':dancers: File [strong]{fb[1]}[/strong] with entry {nice_context(fb[3])}successfully moved to [strong]{fb[2]}[/strong]') elif fb[0] == 1: @@ -206,7 +209,7 @@ def main(): elif args.command in ['del', 'rm']: if args.file: - fb = orvani.delete(args.file, args.no_file_operation) + fb = orvani.delete(args.file, args.file_operation) if fb[0] == 0: status = f':wastebasket: Entry for [strong]{fb[1]}[/strong] successfully removed.' if fb[3]: @@ -248,10 +251,10 @@ def main(): elif args.command in ['clean', 'c']: if not args.file: args.file = '' - fb = orvani.clean(args.file, args.not_recursive) + fb = orvani.clean(args.file, args.recursive) if fb[0] == 0: sub = '' - if args.not_recursive: + if args.recursive: sub = ' and subdirectories' console.print(f':broom: {fb[2]} entries cleaned from [strong]{fb[1]}[/strong]{sub}') @@ -285,8 +288,16 @@ def main(): console.print(f":mag: No entries found in file [strong]{fb[1]}[/strong].") elif fb[0] == 4: console.print(f":thinking_face: File [strong]{fb[1]}[/strong] has wrong format. Cannot import.") + + elif args.command in ['scan', 's']: + if not args.file: + args.file = '' + orvani.scan(args.file, args.recursive) + console.print(f':mag: Finished scanning subdirectories.') + except Exception as e: - console.print(f":scream: An Exception occurred: [italic]{e}[/italic]") + raise Exception + #console.print(f":scream: An Exception occurred: [italic]{e}[/italic]") if __name__ == '__main__': main() diff --git a/orvani/orvani.py b/build/lib/orvanitag/orvani.py similarity index 54% rename from orvani/orvani.py rename to build/lib/orvanitag/orvani.py index 82f670f..0aeaaed 100644 --- a/orvani/orvani.py +++ b/build/lib/orvanitag/orvani.py @@ -7,6 +7,10 @@ from importlib import import_module from types import SimpleNamespace from pprint import pprint +class VerboseSafeDumper(yaml.SafeDumper): + def ignore_aliases(self, data): + return True + # Defaults CONTEXT_FILE = '.context.yaml' @@ -17,6 +21,7 @@ CONTEXTS = { 'tags' : '#', 'note' : None } + DEFAULT_PLUGINS = [ 'frontmatter', 'hashdoubleslash', @@ -25,31 +30,30 @@ DEFAULT_PLUGINS = [ 'pdf' ] +""" +ERRORS: +0 - Success +1 - File Not Found +2 - Entry not found +3 - Path is wrong type +4 - Wrong File Type +5 - Plugin has no method +""" + class OrvaniTag: INDEX = {} # our search index CACHEFILE = '' # search index cache ('.index.yaml') DB = dict() # holds the folder context data - CONFIG = dict() - CONF_FILES = [] - ROOT_CONFIG = dict() + CONFIG = dict() # Currently used configuration + CONF_FILES = [] # List to keep track of config files in the directory tree FILENAME = '' # folder context data filename ('.context.yaml') FILE = '' # holds the folder context file path - CTX = {} - ENABLE_PLUGINS = True - PLUGINS = [] + SCHEMA = {} # Default context schema + ENABLE_PLUGINS = True # Toggle use of plugins + PLUGINS = [] # List of loaded plugins REGEX = r'\s*([@+]\w+|#\w+)' - """ - ERRORS: - 0 - Success - 1 - File Not Found - 2 - Entry not found - 3 - Path is wrong type - 4 - Wrong File Type - 5 - Plugin has no method - """ - def __init__(self, path: str=CONTEXT_FILE, cache: str=CACHE_FILE, contexts=CONTEXTS, plugins:list=DEFAULT_PLUGINS): """ Initialization @@ -57,109 +61,123 @@ class OrvaniTag: path (str): override default filename for folder context cache (str): override default filename for cached index contexts (dict): override the default contexts - """ + self.PLUGINS = plugins self.FILENAME = os.path.basename(path) self.CACHEFILE = cache - self.CTX = contexts - self.INDEX = self.CTX.copy() + self.SCHEMA = contexts + self.INDEX = self.SCHEMA.copy() for context_key in self.INDEX: self.INDEX[context_key] = {} self.INDEX['items'] = {} self.__cd('') - def __cd(self, path: str): + def __cd(self, path: str, config: bool=False): """ Change folder context to other directory. Checks if a folder context file exists and loads context DB. path (str): path of the new folder context - """ + # Helper function to load the custom configuration from a folder context + # If none is found, we check if there is one further up the directory tree def __config(path): - if self.CONF_FILES: + if self.CONF_FILES: # do we have known configurations up the tree? for conf_file in self.CONF_FILES: - if path == '.': - path = './' - if '.' + os.path.commonpath([conf_file, str(path)]) == conf_file: + if path == '.': path = './' + # has current directory has a common tree branch with a known configuration? + common = '.' + os.path.commonpath([conf_file, str(path)]) + if common == '.': common = './' + if common == conf_file: cfile = Path(conf_file) / self.FILENAME if cfile.exists(): conf = yaml.safe_load(cfile.read_text()) if 'config' in conf: self.CONFIG = conf['config'] continue - else: + else: # if there is no config up the tree, then use defaults self.CONFIG = dict() self.FILE = Path(str(path)) / self.FILENAME - if self.FILE.exists(): + if self.FILE.exists(): # is there a folder ocntext file? y = yaml.safe_load(self.FILE.read_text()) + if 'items' in y: - self.DB = y['items'] - if 'config' in y: + self.DB = y['items'] # load items to current context DB + + if 'config' in y: # load optional local configuration self.CONFIG = y['config'] - self.CONF_FILES.append(str(path)) + self.CONF_FILES.append(str(path)) # and save it in our known files list self.CONF_FILES = [x for x in self.CONF_FILES if x != ''] self.CONF_FILES = sorted(list(set(self.CONF_FILES)), key=lambda x: x.count('/'), reverse=True) else: - __config(path) + if config: + __config(path) + else: - self.DB = dict() - __config(path) + self.DB = dict() + else: self.DB = dict() - __config(path) + if config: + __config(path) + def __save(self): """ Save current folder context to file - """ file = Path(self.FILE) - yf = { 'items' : self.DB } - if file.is_file(): - tmp = yaml.safe_load(file.read_text()) + yf = { 'items' : self.DB } # load current context into dict + if file.is_file(): # does current folder have a context file? + tmp = yaml.safe_load(file.read_text()) # if yes, load it... if 'config' in tmp: - yf['config'] = tmp['config'] + yf['config'] = tmp['config'] # ...and save its optional configuration try: - with file.open('w+') as data: - yaml.safe_dump(yf, data) + with file.open('w+') as data: # ...then write it all to the file + yaml.dump(yf, data, Dumper=VerboseSafeDumper) return self.FILE except: return 0 - - def __context(self, argv) -> dict: - """ - Creates a context entry for an existing file - argv (list): sets file contexts according to CTX schema - + def __context(self, argv: list) -> dict: + """ + Creates a context entry for an existing file according to the schema + + argv (list): sets file contexts according to context schema """ context = dict() - for context_key in self.CTX.keys(): - if self.CTX[context_key] != None: + # Create context dict according to schema + for context_key in self.SCHEMA.keys(): + if self.SCHEMA[context_key] != None: context.update( { context_key : []}) - for arg in [x for x in argv if len(x) > 0]: - arg.replace(',', '') - for context_key in self.CTX.keys(): - if str(arg)[0] in self.CTX.values(): + + # Parse the argument list + for arg in [x for x in argv if len(x) > 0]: # remove empty list elements + arg.replace(',', '') # remove commas + + # Add each argument list element to context dict based on the + # prefix symbols defined in the schema + for context_key in self.SCHEMA.keys(): + if str(arg)[0] in self.SCHEMA.values(): # Schema with prefix - if not self.CTX[context_key] == None: - if str(arg).startswith(self.CTX[context_key]): + if not self.SCHEMA[context_key] == None: + if str(arg).startswith(self.SCHEMA[context_key]): context[context_key].append(str(arg)[1:]) else: - # Otherwise it's a note - if self.CTX[context_key] == None: + # No prefix, so it must be a note + if self.SCHEMA[context_key] == None: if arg != ' ': context.update( { context_key : str(arg)}) else: context.update( { context_key : None}) return context + def add(self, file: str, *argv: str): """ Add context to existing filename and saves local folder context file. @@ -169,24 +187,41 @@ class OrvaniTag: """ target = Path(file) - if target.exists(): - self.__cd(target.parent) - context = self.__context(argv) - if target.name in self.DB: - for context_key in self.CTX.keys(): - if self.CTX[context_key] != None: + + if target.exists(): # Only existing files and folders + self.__cd(target.parent) # Load folder context + context = self.__context(argv) # Create context dict from argument list + + if target.name in self.DB: # Does the file exist in our local context DB? + + # Add entries from argument context to context DB + for context_key in self.SCHEMA.keys(): + if self.SCHEMA[context_key] != None: + # Add to context and remove duplicate entries self.DB[target.name][context_key] = list(set( self.DB[target.name][context_key] + context[context_key])) else: + # Add the note if context_key in context: self.DB[target.name][context_key] = context[context_key] - else: + + else: # If file or folder does not exist in context DB yet, add it self.DB.update( { target.name : context } ) + + # Save to file saved = self.__save() if saved and context: return [0, file, context] else: return [1, file] + + def __add(self, path: str, context: dict): + """Programmatically add context""" + ctx_str = self.__collect_contexts(context) + if ctx_str: + argv = self.get_argv(' '.join(ctx_str)) + self.add(path, *argv) + def remove(self, file: str, *argv: str): """ Remove context of existing filename and saves changed folder context file @@ -196,18 +231,29 @@ class OrvaniTag: """ target = Path(file) - if target.exists(): - self.__cd(target.parent) - context = self.__context(argv) - if target.name in self.DB: + all = False + if target.exists(): # Only existing files and folders + self.__cd(target.parent) # Load folder context + if len(argv) == 0: + all = True + context = self.__context(argv) # Create context dict from argument list + + if target.name in self.DB: # Does the file exist in our local context DB? + saved = False - for context_key in self.CTX.keys(): - # Only works for context list items - if self.CTX[context_key] != None: - for item in context[context_key]: - if item in self.DB[target.name][context_key]: - self.DB[target.name][context_key].remove(item) - saved = self.__save() + if all: + del self.DB[target.name] + saved = self.__save() + return [0, file, None] + else: + for context_key in self.SCHEMA.keys(): + # Only works for context list items + if self.SCHEMA[context_key] != None: + for item in context[context_key]: + if item in self.DB[target.name][context_key]: + self.DB[target.name][context_key].remove(item) + saved = self.__save() + if saved and self.DB[target.name]: return [0, file, context] else: @@ -217,6 +263,7 @@ class OrvaniTag: else: return [1, file] + def delete(self, file: str, fop:bool=False): """ Deletes all entries of an existing file and optionally deletes the file @@ -226,21 +273,22 @@ class OrvaniTag: """ target = Path(file) - if target.exists(): - self.__cd(target.parent) + if target.exists(): # Does the target file exist? + self.__cd(target.parent) # Load its local context else: return [1, file] - if target.name in self.DB: - del self.DB[target.name] + if target.name in self.DB: # Do we have a record in the DB? + del self.DB[target.name] # Delete it else: return [2, file] saved = self.__save() - if not self.DB: + if not self.DB: # If local context is empty now, we can delete the file Path(self.FILE).unlink(missing_ok=True) - if fop: + if fop: # delete the referenced file too? target.unlink(missing_ok=True) return [0, file, self.FILE if not self.DB else None, fop] + def move(self, source: str, dest: str, retain: bool=False, fop: bool=True): """ Copies or moves existing file with contexts to a new destination @@ -251,23 +299,39 @@ class OrvaniTag: fop (bool): if True also does the file operation, if False only moves context data """ - if os.path.isfile(source) and os.path.isdir(os.path.dirname(dest)): + # Let's use trusty old os lib over pathlib for this one + # Check if source file and destination folder exist + if os.path.exists(source) and os.path.isdir(os.path.dirname(dest)): + sourcefolder = os.path.dirname(source) sourcefile = os.path.basename(source) destfolder = os.path.dirname(dest) destfile = os.path.basename(dest) - if not destfile: - destfile = sourcefile - sourcedata = {} - self.__cd(sourcefolder) - if self.DB[sourcefile]: - sourcedata = self.DB[sourcefile] - self.__cd(destfolder) - self.DB.update( { destfile : sourcedata } ) - self.__save() - if not retain: - self.delete(source) + + # If no destination file name was defined, but fop is True + # use the same as the source if fop: + if not destfile: + destfile = sourcefile + else: + if not destfile: + destfile = destfolder + destfolder = os.path.dirname(destfolder) + if not sourcefile: + sourcefile = sourcefolder + sourcefolder = os.path.dirname(sourcefolder) + + sourcedata = {} + self.__cd(sourcefolder) # load local context + if self.DB[sourcefile]: # check if we have an entry for this file + sourcedata = self.DB[sourcefile] # load its context data + if not os.path.isdir(destfile): + self.__cd(destfolder) # load local context of destination folder + self.DB.update( { destfile : sourcedata } ) # update its DB with the context data of our source file + self.__save() # and save it + if not retain: # do we copy or move the data? + self.delete(source) # delete for move + if fop: # do we also physically move or copy the reference file? if retain: shutil.copy2(source, dest) else: @@ -276,8 +340,8 @@ class OrvaniTag: return [0, source, dest, sourcedata] else: return [1, source, dest, os.path.isfile(source), os.path.isdir(os.path.dirname(dest))] - - + + def clean(self, path: str='.', recursive=True): """ Removes context data from folder if files do not exist @@ -292,19 +356,19 @@ class OrvaniTag: if target.is_file(): target = Path(target.parent) if target.is_dir(): - self.__cd(path) - DB = self.DB.copy() - for file in self.DB.keys(): + self.__cd(path) # load folder context + DB = self.DB.copy() # make a copy of it + for file in self.DB.keys(): # check for each entry if the file actually exists f = target / file - if not f.is_file(): + if not f.is_file(): # if not, delete its entry if file in self.DB: del DB[file] count += 1 - self.DB = DB - self.__save() - if not self.DB: + self.DB = DB # make our local working copy of the DB the context DB + self.__save() # save it + if not self.DB: # if it is empty we can delete the context file Path(self.FILE).unlink(missing_ok=True) - if recursive: + if recursive: # do it all recursively? for (root,dirs,files) in os.walk(path): if dirs: for dir in dirs: @@ -313,6 +377,7 @@ class OrvaniTag: count += fb[2] return [0, str(target), count] + def list(self, path: str='./', exact=True, either=False, recursive: bool=True, cache: bool=False, delete_cache: bool=False, *search: str): """ Returns an index object with query results and optionally saves a cached index @@ -325,52 +390,72 @@ class OrvaniTag: search (str): the search query """ - if path == '': + if path == '': # fix empty path argument path = './' - self.__makeindex(path, recursive, cache, delete_cache) - result = self.__search(search, exact, either) + self.__makeindex(path, recursive, cache, delete_cache) # index the directories + result = self.__search(search, exact, either) # apply the search query return result def __makeindex(self, path:str, recursive:bool=True, cache: bool=False, delete_cache: bool=False): """ - Creates index for searching, optionally also a cache file + Creates global context index for directory for searching, optionally also a cache file + Loads plugin readers to also read file specific metadata path (dict): root directory recursive (bool): traverse subdirectories """ cachefile = Path(path) / self.CACHEFILE + loaded_from_cache = False if delete_cache: cachefile.unlink(missing_ok=True) - if cache and cachefile.is_file(): + if cache and cachefile.is_file(): # load index from cache self.INDEX = yaml.safe_load(cachefile.read_text()) - else: - self.__indexfolder(path) + loaded_from_cache = True + + else: # index the directory manually + self.__indexfolder(path) # index current directory + + # Dive into the subdirectories for (root,dirs,files) in os.walk(path, topdown=True): - if self.ENABLE_PLUGINS: - if files: - for file in files: - fpath = os.path.join(root, file) - self.__cd(root) - self.__metadata(fpath) + + if not recursive: # check if to include subdirectories + break + + # index each subdirectory if dirs: for dir in dirs: rpath = os.path.join(root, dir) - self.__indexfolder(rpath) - if not recursive: - break - - if cache: + self.__indexfolder(rpath) # index subdirectory + + # If we just created an index, write it to cache + if cache and not loaded_from_cache: with open(cachefile, 'w+') as data: yaml.dump(self.INDEX, data) + + def scan(self, path: str, recursive: bool=False): + + for (root,dirs,files) in os.walk(path, topdown=True): + + # process every file with a reader plugin + if self.ENABLE_PLUGINS: + if files: + for file in files: + fpath = os.path.join(root, file) + self.__cd(root, True) + self.__metadata(fpath) + + if not recursive: # check if to include subdirectories + break + + def __indexfolder(self, sub: str): """ - Indexes a folder context + Load a folder's context and add it to the global context index sub (str): path of folder - """ target = Path(sub) if target.is_dir(): @@ -378,40 +463,53 @@ class OrvaniTag: if self.DB: for file in self.DB.keys(): path = os.path.join(sub, file) - for context_key in self.CTX.keys(): + for context_key in self.SCHEMA.keys(): if context_key in self.DB[file]: self.__updateindex(path, self.DB[file], context_key) + def __updateindex(self, path: str, context: dict, context_key: str): - + """ + Adds entries of a single context type of a file to the global context index. + The context entry is associated with the file in the 'items' index + The file is associated with its context entry + + sub (str): path of folder + """ # Update files index for key, value in context.items(): - if path in self.INDEX['items']: + if path in self.INDEX['items']: # check if there is already an entry + # if yes, merge the entries if key in self.INDEX['items'][path] and isinstance(self.INDEX['items'][path][key], list) and isinstance(value, list): self.INDEX['items'][path][key] += value self.INDEX['items'][path][key] = list(set(self.INDEX['items'][path][key])) + # if not, just add them else: self.INDEX['items'][path][key] = value - else: + else: # if not, just add the entry self.INDEX['items'][path] = { key : value } + # sort the file index alphabetically self.INDEX['items'] = {key: value for key, value in sorted(self.INDEX['items'].items())} # Update context index - if type(context[context_key]) == list: + # Add each file path to a context entry + + if type(context[context_key]) == list: # is it a context entry 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: + else: # or is it a note 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)) + self.INDEX[context_key][item] = list(set(filelist)) + def __search(self, search, exact:bool=False, either:bool=False): """ @@ -419,24 +517,36 @@ class OrvaniTag: search (list): search query list exact (bool): exact match or partial match + either (bool): combine found items by OR instead of AND """ result = { 'index' : self.INDEX, 'found' : [] } - if search[0]: - 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(): + if search[0]: # is there a search query? + + query = self.__context(search) # turn it into a context dict + return_dict = self.__context([' ']) # create an empty context dict + universal = {i for i in self.SCHEMA if self.SCHEMA[i]==None}.pop() # get the schema key with the None value, so we know which one to use for the note + + if universal in query: # does the query have an entry without context prefix? + query[universal] = [query[universal]] # turn it into a list for better processing + + for context_key in self.SCHEMA.keys(): # turn all values in the empty dict into list types return_dict[context_key] = [] + + # Iterate Search Query Terms for param in query.keys(): needles = query[param] + + # Add the query without content prefix to all other contexts + # It is a wildcard to search all contexts at once if universal in query.keys(): needles += query[universal] + + # Run the search and add every found file path to the return dict + # in its respective context (or all of them for the wildcard search) if needles: haystack = self.INDEX[param].keys() for hay in haystack: @@ -449,72 +559,116 @@ class OrvaniTag: 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 and not either: + # we do an AND search by default, but only if there was more than 1 query item result['found'] = list(set(self.__intersect(return_dict))) + else: + # for 1 query searches and OR searches we simply add all of the matches min = [] for sublist in return_dict.values(): min += sublist result['found'] = list(set(min)) + else: + # return the whole index if there was no query item result['found'] = self.INDEX['items'].keys() + + # Sort the result directory tree from shallow to deep based on the occurrence of / result['found'] = sorted(result['found'], key=lambda x: x.count('/')) + return result def __intersect(self, result: dict): """ - Returns an intersection of two search queries + Returns an intersection of two search queries (AND) 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: + + mresult = {key: value for key, value in result.items() if value} # remove empty items + + if len(mresult) < 2: # if there is not enough to intersect, just return it return [] - common_elements = set(mresult[next(iter(mresult))]) + + common_elements = set(mresult[next(iter(mresult))]) # elements common in all + for key in mresult.keys(): + # intersect common elements common_elements = common_elements.intersection(mresult[key]) + return list(common_elements) + def register_plugin(self, function): + """ + Add a plugin to the plugin list + """ self.PLUGINS.append(function) return function - + + def get_argv(self, context_string: str): + """ + Make a list of args from a context string to pass as an *argv parameter + """ + tags = re.findall(self.REGEX, context_string) note = re.sub(self.REGEX, '', context_string).lstrip() argv = ' '.join(tags).split(' ') + [note] - argv = [x for x in list(set(argv)) if x != ''] + argv = [x for x in list(set(argv)) if x != ''] # make unique and remove empty items return argv + def __metadata(self, filename: str): + """ + Processes a file with all reader plugins to extract its metadata + """ + + # Utilities for reader plugins obj = { 'file' : Path(), 'config' : self.CONFIG, - 'schema' : self.CTX, + 'schema' : self.SCHEMA, 'context' : self.__context, 'string' : self.get_argv } o = SimpleNamespace(**obj) + for plugin_name in self.PLUGINS: + # Check if plugin is (de)activated by a local folder configuration if 'plugins' in self.CONFIG: if plugin_name not in self.CONFIG['plugins']: continue - plugin = import_module('plugins.' + plugin_name) - suffixes = plugin.TYPES - if plugin_name in self.CONFIG: + # Load the plugin from plugins folder + plugin = import_module('orvanitag.plugins.' + plugin_name) + + # Load a list of file types the plugin is able to read + suffixes = plugin.TYPES # The plugin's default file types + if plugin_name in self.CONFIG: # check for local folder config overrides if 'types' in self.CONFIG[plugin_name]: suffixes = self.CONFIG[plugin_name]['types'] + o.file = Path(filename) - if o.file.suffix in suffixes: - if hasattr(plugin, 'reader'): - context = plugin.reader(o) - if context: - for context_key in context.keys(): - self.__updateindex(filename, context, context_key) + if o.file.suffix in suffixes: # Does the file match a permitted file type + if hasattr(plugin, 'reader'): # Does the plugin have a reader method? + + # Process the file using the reader plugin + try: + context = plugin.reader(o) + if context: + self.__add(filename, context) + print(f'Found Metadata for `{filename}`.') + except Exception as e: + print(f'Plugin Error ({plugin_name} reading {filename}): `{e}`') + def __collect_contexts(self, context: dict): + """ + Reuturns a list of prefixed context entries from a context dict + """ elements = [] context_keys = list(CONTEXTS.keys()) for context_key in context_keys: @@ -531,24 +685,56 @@ class OrvaniTag: elements.append(context[context_key]) return elements + + def write_all(self, path: str, method: str, recursive: bool=False): + + for (root,dirs,files) in os.walk(path, topdown=True): + + # process every file with a writer plugin + if self.ENABLE_PLUGINS: + if files: + for file in files: + fpath = os.path.join(root, file) + self.__cd(root, True) + self.write(fpath, method) + + if not recursive: # check if to include subdirectories + break + + def write(self, filename: str, method: str): + """ + Writes a file's context entries as metadata to the file using a writer plugin + + filename (str): A valid file path + method (str): The name of a plugin able to process the file type + """ + + # Utilities for writer plugins obj = { 'file' : Path(), 'config' : self.CONFIG, - 'schema' : self.CTX, + 'schema' : self.SCHEMA, 'context' : {}, 'collect' : self.__collect_contexts, 'string' : self.get_argv } o = SimpleNamespace(**obj) + for plugin_name in self.PLUGINS: + + # Check if plugin is (de)activated by a local folder configuration if 'plugins' in self.CONFIG: if plugin_name not in self.CONFIG['plugins']: continue - plugin = import_module('plugins.' + plugin_name) - if plugin.NAME == method: - suffixes = plugin.TYPES - if plugin_name in self.CONFIG: + + plugin = import_module('orvanitag.plugins.' + plugin_name) + + if plugin.NAME == method: # select the reference plugin + + # Load a list of file types the plugin is able to read + suffixes = plugin.TYPES # Load the plugin's defaults + if plugin_name in self.CONFIG: # Check for local folder config overrides if 'types' in self.CONFIG[plugin_name]: suffixes = self.CONFIG[plugin_name]['types'] for suffix in suffixes: @@ -556,26 +742,44 @@ class OrvaniTag: suffixes.remove(suffix) if not suffixes: suffixes = plugin.TYPES + o.file = Path(filename) if o.file.suffix in suffixes: + + # Get all local context entries (including file metadata) self.__makeindex(o.file.parent, recursive=False) items = self.INDEX['items'] + for found in items.keys(): + # If there is a file with matching entries in the local context if str(o.file).replace('./', '') == found.replace('./', ''): o.context = items[found] - if hasattr(plugin, 'writer'): - plugin.writer(o) + if hasattr(plugin, 'writer'): # If the plugin has a writer method + plugin.writer(o) # Write the context as metadata return [0, filename, o.context] else: return [5, plugin_name] else: return [4, suffixes, plugin_name, plugin_name in self.CONFIG] - + + def export(self, filename:str): + """ + Exports the global context index to a text file in a format that can be reimported + + filename (str): optional filename + """ + + # If no filename give, use the default one if filename == '' or filename == None: filename = 'context.txt' + file = Path(filename) + + # Run `otag ls` to create the global context index index = self.list(file.parent, False, False, True, False, False, '') + + # Write the index as lines to file items = index['index']['items'] content = "" if len(items): @@ -586,14 +790,24 @@ class OrvaniTag: return [0, filename] else: return [2] - + + def load(self, filename:str): + """ + Imports lines from a text file created by `otag export` to the global context index, + filtering out the already known entries + + filename (str): optional filename + """ + + # If no filename was given, try the default one if filename == '' or filename == None: filename = 'context.txt' file = Path(filename) if file.exists(): imported = file.read_text().split('\n') if len(imported): + # Make an index of all context items that are already known known = self.list(file.parent, False, False, True, False, False, '')['index']['items'] count = 0 for import_line in imported: @@ -603,10 +817,11 @@ class OrvaniTag: context = {} path = line_elements[0].strip() new_file = Path(path) - if new_file.exists(): + if new_file.exists(): # Check if file exists string = line_elements[1].strip() if string: new_file_context = self.__context(self.get_argv(string)) + # Check if file is already known and don't import anything we already have if path in known.keys(): known_file_context = known[path] context = new_file_context.copy() @@ -620,12 +835,7 @@ class OrvaniTag: if new_context in known_file_context.keys(): if new_file_context[new_context] == known_file_context[new_context]: del context[new_context] - ctx_str = self.__collect_contexts(context) - if ctx_str: - count += 1 - argv = self.get_argv(' '.join(ctx_str)) - print(argv) - self.add(path, *argv) + self.__add(path, context) else: return [4, filename] return [0, filename, count] diff --git a/orvani/plugins/__init__.py b/build/lib/orvanitag/plugins/__init__.py similarity index 100% rename from orvani/plugins/__init__.py rename to build/lib/orvanitag/plugins/__init__.py diff --git a/orvani/plugins/frontmatter.py b/build/lib/orvanitag/plugins/frontmatter.py similarity index 100% rename from orvani/plugins/frontmatter.py rename to build/lib/orvanitag/plugins/frontmatter.py diff --git a/orvani/plugins/hashdoubleslash.py b/build/lib/orvanitag/plugins/hashdoubleslash.py similarity index 100% rename from orvani/plugins/hashdoubleslash.py rename to build/lib/orvanitag/plugins/hashdoubleslash.py diff --git a/orvani/plugins/id3.py b/build/lib/orvanitag/plugins/id3.py similarity index 100% rename from orvani/plugins/id3.py rename to build/lib/orvanitag/plugins/id3.py diff --git a/orvani/plugins/office.py b/build/lib/orvanitag/plugins/office.py similarity index 100% rename from orvani/plugins/office.py rename to build/lib/orvanitag/plugins/office.py diff --git a/orvani/plugins/pdf.py b/build/lib/orvanitag/plugins/pdf.py similarity index 100% rename from orvani/plugins/pdf.py rename to build/lib/orvanitag/plugins/pdf.py diff --git a/context.txt b/context.txt deleted file mode 100644 index 7cfe933..0000000 --- a/context.txt +++ /dev/null @@ -1,12 +0,0 @@ -./COMMANDS.md --- +coding @erfwegf #great #super This is awesome -./README.md --- @frrreee #writeme #fool -./TODO.md --- +bokertov +proooo +fool @bbb @python #ttt #xxx #frrr #rusty Chawera -./test/chirpy.wav --- +parakeetio +sensorwatch @Chripo @watch #funk McFlu McFlu This is a title This is a title -./test/folder with spaces/file with spaces.txt --- #spaces -./test/office.odt --- +oopsie +orvani @this #whoa #that and a note -./test/oldword.doc --- and a note -./test/sheet.xlsx --- +orvani @calc #tessssting -./test/sub/statement_14793553_USD_2022-11-01_2023-01-31.pdf --- +yeeha @pdfcontext #yay #frrrrrrrr And a comment too -./test/table.ods --- @calc #tessssting -./test/tableold.xls --- @calc #tessssting -./test/word.docx --- @concon #tagz #choo what is that smell? diff --git a/context.yaml b/context.yaml deleted file mode 100644 index b893c3b..0000000 --- a/context.yaml +++ /dev/null @@ -1,25 +0,0 @@ -items: - README.md: - contexts: [] - projects: [] - tags: - - writeme - TODO.md: - contexts: - - python - note: Chawera - projects: - - bokertov - tags: - - rusty - requirements.txt: - contexts: [] - note: pip reqs - projects: [] - tags: [] - test: - contexts: - - folder - projects: [] - tags: - - spaces diff --git a/orvanitag.egg-info/PKG-INFO b/orvanitag.egg-info/PKG-INFO new file mode 100644 index 0000000..dbfadbd --- /dev/null +++ b/orvanitag.egg-info/PKG-INFO @@ -0,0 +1,52 @@ +Metadata-Version: 2.1 +Name: orvanitag +Version: 1.0.0 +Summary: Platform independent, file-based, portable tagging system to organize directories and files. +Home-page: https://github.com/randogoth/orvanitag +Author: randogoth +Author-email: randogoth@posteo.org +License: UNKNOWN +Platform: UNKNOWN +Classifier: Programming Language :: Python :: 3 +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Requires-Python: >=3.6 +Description-Content-Type: text/markdown +License-File: LICENSE + +--- +contexts: +- frrreee +projects: [] +tags: +- fool +- writeme +--- + +# Orvani Tagger + +(From עוֹרְבָנִי, the Hebrew name for th Eurasian Jay) + +Platform independent, folder-based, and portable tagging system for organizing and searching files. The command line interface and organizing principles are heavily inspired by the todo.txt standard. + +Every file can be assigned projects, contexts, and tags and have a descriptive note. + +Exactly like tasks in todo.txt, files can be categorized by freely defined contexts, defined by the +`@` prefix or projects, defined by the `+` prefix. In addition, the `#` prefix defines hashtags that can be assigned. + +So a as an example an audio-file could be assigned to project `+album` and have a context of `@drums` and tagged with `#boombap`, `#lofi`, `#snare`. It's completely up to you how you use the different means of categorization. + +## Command Line Tool + +### Assigning Contextual Tags + +Let's +``` +$ orvani add [contextual tags ...] +``` + +Removing contextual tags from a file +``` +$ orvani remove [contextual tags ...] +``` + diff --git a/orvanitag.egg-info/SOURCES.txt b/orvanitag.egg-info/SOURCES.txt new file mode 100644 index 0000000..827e9cb --- /dev/null +++ b/orvanitag.egg-info/SOURCES.txt @@ -0,0 +1,18 @@ +LICENSE +README.md +setup.py +orvanitag/__init__.py +orvanitag/cmd.py +orvanitag/orvani.py +orvanitag.egg-info/PKG-INFO +orvanitag.egg-info/SOURCES.txt +orvanitag.egg-info/dependency_links.txt +orvanitag.egg-info/entry_points.txt +orvanitag.egg-info/requires.txt +orvanitag.egg-info/top_level.txt +orvanitag/plugins/__init__.py +orvanitag/plugins/frontmatter.py +orvanitag/plugins/hashdoubleslash.py +orvanitag/plugins/id3.py +orvanitag/plugins/office.py +orvanitag/plugins/pdf.py \ No newline at end of file diff --git a/orvanitag.egg-info/dependency_links.txt b/orvanitag.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/orvanitag.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/orvanitag.egg-info/entry_points.txt b/orvanitag.egg-info/entry_points.txt new file mode 100644 index 0000000..2537197 --- /dev/null +++ b/orvanitag.egg-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +otag = orvanitag.cmd:main + diff --git a/orvanitag.egg-info/requires.txt b/orvanitag.egg-info/requires.txt new file mode 100644 index 0000000..f229360 --- /dev/null +++ b/orvanitag.egg-info/requires.txt @@ -0,0 +1 @@ +requests diff --git a/orvanitag.egg-info/top_level.txt b/orvanitag.egg-info/top_level.txt new file mode 100644 index 0000000..fc5b9db --- /dev/null +++ b/orvanitag.egg-info/top_level.txt @@ -0,0 +1 @@ +orvanitag diff --git a/orvanitag/__init__.py b/orvanitag/__init__.py new file mode 100644 index 0000000..9409f5b --- /dev/null +++ b/orvanitag/__init__.py @@ -0,0 +1,2 @@ +from .orvani import OrvaniTag +from .cmd import main \ No newline at end of file diff --git a/orvanitag/cmd.py b/orvanitag/cmd.py new file mode 100644 index 0000000..76a1687 --- /dev/null +++ b/orvanitag/cmd.py @@ -0,0 +1,303 @@ +import os +import sys +import math +from argparse import ArgumentParser as argp, SUPPRESS, RawTextHelpFormatter as raw +from pathlib import Path +from rich import box +from rich.console import Console +from rich.table import Table +from orvanitag.orvani import OrvaniTag, CONTEXT_FILE, CACHE_FILE, CONTEXTS + +def mktable(query: str, index: dict, filter=None, trunc_len: int=25): + """Creates a rich table from `otag ls` search result + + query (str): The user query + index (dict): The context index returned from `otag ls` + filter (bool): Show only 'files' or 'dirs' + trunc_len (int): Max. filename length beyond which overflow method kicks in + + """ + console = Console() + + if len(index['found']) > 0: # is there a search result? + + # Create table + table = Table(title=f"Results for `{query}`", box=box.HORIZONTALS, show_lines=True) + + # File Path Column Header + table.add_column("Path", style="white", no_wrap=False, overflow='fold', max_width=40) + + # Create Column Headers based on Context Schema + ctx = list(CONTEXTS.keys()) + styles = ["cyan", "yellow", "magenta", "green"] + for i, c in enumerate(ctx): + table.add_column(ctx[i].title(), style=styles[i], overflow='fold') + + # Create Rows Based on Search Results + for file in index['found']: + item = Path(file) + + if filter == 'files' and not item.is_file(): # Only show directories (--dirs flag) + continue + if filter == 'dirs' and not item.is_dir(): # Only show files (--files flag) + continue + + # Our own overflow method for filenames longer than 25 characters (file…name.ext) + long_file_pre = math.floor(trunc_len/2-1) + long_file_post = len(item.name) - math.ceil(trunc_len/2-1) + path = f'{item.parent}/' + ((item.name[:long_file_pre] + '…' + item.name[long_file_post:]) if len(item.name) > trunc_len else item.name) + path = path.replace('./', '') + + fc = index['index']['items'][file] + elements = [] + elements.append(path) + + # Fetch contextual data for each file to add to a table row + for c in ctx: + if not c in fc: + fc[c] = None + if fc[c]: + if CONTEXTS[c]: + prefix = CONTEXTS[c] + else: + prefix = '' + if not type(fc[c]) == str: # Add respective context prefix + elements.append(' '.join([prefix + tag for tag in fc[c]])) + else: # Except for notes + elements.append(fc[c]) + else: + elements.append(None) + + table.add_row(*elements) + console.print(table) + else: + console.print(f":thinking_face: [red]No results found for [white]{query}") + +def nice_context(context: dict): + """ + Rich colors for displaying contextual data + + context (dict): context dict + """ + string = '' + if context['projects']: + string += '[cyan]' + ' '.join(['+' + tag for tag in context['projects']]) + '[/cyan] ' + if context['contexts']: + string += '[yellow]' + ' '.join(['@' + tag for tag in context['contexts']]) + '[/yellow] ' + if context['tags']: + string += '[magenta]' + ' '.join(['#' + tag for tag in context['tags']]) + '[/magenta] ' + if 'note' in context: + string += '[green]\'' + context['note'] + '\'[/green] ' + return string + +def main(): + """otag CLI""" + + # Rich Console + console = Console() + + # Detailed Help Text for the --help flag + command_help = """{add,a} FILE CONTEXT # add context to an existing file +{remove,r} FILE CONTEXT # remove context from an existing file +{list,ls,l} QUERY # list all files with queried context in current directory tree + +{copy,cp} SOURCE DEST # copy file and its context to another directory +{move,mv} SOURCE DEST # move file and its context to another directory +{del,rm} FILE # delete file and its context + +{clean,c} PATH # remove all context for nonexisting files +{purge,p} PATH # remove all context for all files in current directory tree + +{write,w} PLUGIN FILE # write all context of a file to the file as metadata +{import,i} FILE # import context for files from a text file +{export,e} FILE # export context for files to a text file +""" + # Command Line Argument Setup + p = argp(description="OrvaniTagger (otag)", formatter_class=raw) + p.add_argument("--recursive", "-r", action="store_false", help="(list,clean,purge,export) Include subdirectories in search") + p.add_argument("--file-operation", "-f", action="store_true", help="(copy,move,del) Do file operation, not just context") + p.add_argument("--path", "-p", action="store", type=str, help="(list,export) Use custom path", default='') + p.add_argument("--exact", "-e", action="store_true", help="(list) Match exact search term") + p.add_argument("--files", action="store_true", help="(list) Only show files, ignore folders") + p.add_argument("--dirs", "-d", action="store_true", help="(list) Only show directories, ignore files") + p.add_argument("--either", "-or", action="store_true", help="(list) Combine search terms by OR instead of AND") + p.add_argument("--cache", "-c", action="store_true", help="(list) Cache index search (useful with deep directory trees)") + p.add_argument("--delete-cache", "-dc", action="store_true", help="(list) Delete cache file") + p.add_argument("command", nargs="?", default=None, metavar='Command', + help=command_help, type=str, + choices=[ + 'add', 'a', + 'remove', 'r', + 'list', 'ls', 'l', + 'copy', 'cp', + 'move', 'mv', + 'del', 'rm', + 'clean', 'c', + 'purge', 'p', + 'write', 'w', + 'import', 'i', + 'export', 'e', + 'scan', 's' + ]) + p.add_argument("file", nargs="?", type=str, help=SUPPRESS) + p.add_argument("context", nargs="*", type=str, help=SUPPRESS) + p.print_usage = p.print_help + args = p.parse_args() + + # Load Orvani + orvani = OrvaniTag() + + # Parse Arguments and Run otag Methods + try: + if args.command in ['add', 'a']: + if args.file and args.context: + fb = orvani.add(args.file, *args.context) + if fb[0] == 0: + console.print(f':label: Entry {nice_context(fb[2])}successfully added to file [strong]{fb[1]}[/strong].') + elif fb[0] == 1: + console.print(f":thinking_face: File [strong]{fb[1]}[/strong] doesn't exist.") + + elif args.command in ['remove', 'r']: + if args.file: + fb = orvani.remove(args.file, *args.context) + if fb[0] == 0: + if fb[2] == None: + console.print(f':wastebasket: All entries successfully removed from file [strong]{fb[1]}[/strong].') + else: + console.print(f':wastebasket: Entry {nice_context(fb[2])}successfully removed from file [strong]{fb[1]}[/strong].') + elif fb[0] == 1: + console.print(f":thinking_face: File [strong]{fb[1]}[/strong] doesn't exist.") + elif fb[0] == 2: + console.print(f":mag: No match found for [white][strong]{fb[1]}[/strong][/white] and {nice_context(fb[2])}") + + elif args.command in ['list', 'ls', 'l']: + query = [args.file] + args.context + if query: + r = orvani.list(args.path, args.exact, args.either, args.recursive, args.cache, args.delete_cache, *query) + filter = None + if args.files: + filter = 'files' + elif args.dirs: + filter = 'dirs' + mktable(' '.join(sys.argv[1:]), r, filter) + + elif args.command in ['copy', 'cp']: + if args.file and args.context: + fb = orvani.move(args.file, args.context[0], True, args.file_operation) + if fb[0] == 0: + console.print(f':dancers: File [strong]{fb[1]}[/strong] with entry {nice_context(fb[3])}successfully copied to [strong]{fb[2]}[/strong]') + elif fb[0] == 1: + if fb[3] == False and fb[4] == True: + console.print(f":thinking_face: Source file [strong]{fb[1]}[/strong] doesn't exist.") + elif fb[3] == True and fb[4] == False: + console.print(f":thinking_face: Destination [strong]{fb[2]}[/strong] doesn't exist.") + elif fb[3] == False and fb[4] == False: + console.print(f":thinking_face: Source file [strong]{fb[1]}[/strong] and destination [strong]{fb[2]}[/strong] don't exist.") + + elif args.command in ['move', 'mv']: + if args.file and args.context: + fb = orvani.move(args.file, args.context[0], False, args.file_operation) + if fb[0] == 0: + console.print(f':dancers: File [strong]{fb[1]}[/strong] with entry {nice_context(fb[3])}successfully moved to [strong]{fb[2]}[/strong]') + elif fb[0] == 1: + if fb[3] == False and fb[4] == True: + console.print(f":thinking_face: Source file [strong]{fb[1]}[/strong] doesn't exist.") + elif fb[3] == True and fb[4] == False: + console.print(f":thinking_face: Destination [strong]{fb[2]}[/strong] doesn't exist.") + elif fb[3] == False and fb[4] == False: + console.print(f":thinking_face: Source file [strong]{fb[1]}[/strong] and destination [strong]{fb[2]}[/strong] don't exist.") + + elif args.command in ['del', 'rm']: + if args.file: + fb = orvani.delete(args.file, args.file_operation) + if fb[0] == 0: + status = f':wastebasket: Entry for [strong]{fb[1]}[/strong] successfully removed.' + if fb[3]: + status += f'\n:wastebasket: File [strong]{fb[1]}[/strong] successfully deleted.' + if not fb[2] == None: + status += f'\n:wastebasket: File [strong]{fb[2]}[/strong] automatically deleted.' + console.print(status) + elif fb[0] == 1: + console.print(f":thinking_face: File [strong]{fb[1]}[/strong] doesn't exist.") + elif fb[0] == 2: + console.print(f":mag: No entry for [strong]{fb[1]}[/strong] found.") + + + elif args.command in ['purge', 'p']: + + def purge(path): + target = Path(path) + if target.is_file(): + target = Path(target.parent) + if target.is_dir(): + context_file = target / CONTEXT_FILE + if context_file.exists(): + context_file.unlink(missing_ok=True) + console.print(f":wastebasket: File [strong]{context_file}[/strong] successfully purged.") + cache_file = target / CACHE_FILE + if cache_file.exists(): + cache_file.unlink(missing_ok=True) + console.print(f":wastebasket: File [strong]{cache_file}[/strong] successfully purged.") + + if not args.file: + args.file = '.' + purge(args.file) + for (root,dirs,files) in os.walk(args.file): + if dirs: + for dir in dirs: + pp = os.path.join(root, dir) + purge(pp) + + elif args.command in ['clean', 'c']: + if not args.file: + args.file = '' + fb = orvani.clean(args.file, args.recursive) + if fb[0] == 0: + sub = '' + if args.recursive: + sub = ' and subdirectories' + console.print(f':broom: {fb[2]} entries cleaned from [strong]{fb[1]}[/strong]{sub}') + + elif args.command in ['write', 'w']: + if args.file and args.context: + fb = orvani.write(args.context[0], args.file) + if fb[0] == 0: + console.print(f':floppy_disk: Metadata {nice_context(fb[2])}successfully written to file [strong]{fb[1]}[/strong].') + if fb[0] == 4: + console.print(f':card_file_box: Plugin [strong]{fb[2]}[/strong] can only write to files types: [strong]{"[/strong], [strong]".join(fb[1])}[/strong].') + if fb[3]: + console.print(f':information: Plugin configuration found in folder context file.') + if fb[0] == 5: + console.print(f':disappointed: Plugin [strong]{fb[1]}[/strong] can\'t write.') + + elif args.command in ['export', 'e']: + fb = orvani.export(args.file) + if fb[0] == 0: + console.print(f':floppy_disk: All entries successfully written to file [strong]{fb[1]}[/strong].') + elif fb[0] == 2: + console.print(f":mag: No entries found.") + + elif args.command in ['import', 'i']: + + fb = orvani.load(args.file) + if fb[0] == 0: + console.print(f':inbox_tray: [strong]{fb[2]}[/strong] entries successfully imported from file [strong]{fb[1]}[/strong].') + elif fb[0] == 1: + console.print(f":thinking_face: File [strong]{fb[1]}[/strong] doesn't exist.") + elif fb[0] == 2: + console.print(f":mag: No entries found in file [strong]{fb[1]}[/strong].") + elif fb[0] == 4: + console.print(f":thinking_face: File [strong]{fb[1]}[/strong] has wrong format. Cannot import.") + + elif args.command in ['scan', 's']: + if not args.file: + args.file = '' + orvani.scan(args.file, args.recursive) + console.print(f':mag: Finished scanning subdirectories.') + + except Exception as e: + raise Exception + #console.print(f":scream: An Exception occurred: [italic]{e}[/italic]") + +if __name__ == '__main__': + main() diff --git a/orvanitag/orvani.py b/orvanitag/orvani.py new file mode 100644 index 0000000..0aeaaed --- /dev/null +++ b/orvanitag/orvani.py @@ -0,0 +1,845 @@ +import os +import re +import yaml +import shutil +from pathlib import Path +from importlib import import_module +from types import SimpleNamespace +from pprint import pprint + +class VerboseSafeDumper(yaml.SafeDumper): + def ignore_aliases(self, data): + return True + +# Defaults + +CONTEXT_FILE = '.context.yaml' +CACHE_FILE = '.index.yaml' +CONTEXTS = { + 'projects' : '+', + 'contexts' : '@', + 'tags' : '#', + 'note' : None +} + +DEFAULT_PLUGINS = [ + 'frontmatter', + 'hashdoubleslash', + 'id3', + 'office', + 'pdf' +] + +""" +ERRORS: +0 - Success +1 - File Not Found +2 - Entry not found +3 - Path is wrong type +4 - Wrong File Type +5 - Plugin has no method +""" + +class OrvaniTag: + + INDEX = {} # our search index + CACHEFILE = '' # search index cache ('.index.yaml') + DB = dict() # holds the folder context data + CONFIG = dict() # Currently used configuration + CONF_FILES = [] # List to keep track of config files in the directory tree + FILENAME = '' # folder context data filename ('.context.yaml') + FILE = '' # holds the folder context file path + SCHEMA = {} # Default context schema + ENABLE_PLUGINS = True # Toggle use of plugins + PLUGINS = [] # List of loaded plugins + REGEX = r'\s*([@+]\w+|#\w+)' + + def __init__(self, path: str=CONTEXT_FILE, cache: str=CACHE_FILE, contexts=CONTEXTS, plugins:list=DEFAULT_PLUGINS): + """ + Initialization + + path (str): override default filename for folder context + cache (str): override default filename for cached index + contexts (dict): override the default contexts + """ + + self.PLUGINS = plugins + self.FILENAME = os.path.basename(path) + self.CACHEFILE = cache + self.SCHEMA = contexts + self.INDEX = self.SCHEMA.copy() + for context_key in self.INDEX: + self.INDEX[context_key] = {} + self.INDEX['items'] = {} + self.__cd('') + + + def __cd(self, path: str, config: bool=False): + """ + Change folder context to other directory. + Checks if a folder context file exists and loads context DB. + + path (str): path of the new folder context + """ + + # Helper function to load the custom configuration from a folder context + # If none is found, we check if there is one further up the directory tree + def __config(path): + if self.CONF_FILES: # do we have known configurations up the tree? + for conf_file in self.CONF_FILES: + if path == '.': path = './' + # has current directory has a common tree branch with a known configuration? + common = '.' + os.path.commonpath([conf_file, str(path)]) + if common == '.': common = './' + if common == conf_file: + cfile = Path(conf_file) / self.FILENAME + if cfile.exists(): + conf = yaml.safe_load(cfile.read_text()) + if 'config' in conf: + self.CONFIG = conf['config'] + continue + else: # if there is no config up the tree, then use defaults + self.CONFIG = dict() + + self.FILE = Path(str(path)) / self.FILENAME + if self.FILE.exists(): # is there a folder ocntext file? + y = yaml.safe_load(self.FILE.read_text()) + + if 'items' in y: + self.DB = y['items'] # load items to current context DB + + if 'config' in y: # load optional local configuration + self.CONFIG = y['config'] + self.CONF_FILES.append(str(path)) # and save it in our known files list + self.CONF_FILES = [x for x in self.CONF_FILES if x != ''] + self.CONF_FILES = sorted(list(set(self.CONF_FILES)), key=lambda x: x.count('/'), reverse=True) + else: + if config: + __config(path) + + else: + self.DB = dict() + + else: + self.DB = dict() + if config: + __config(path) + + + def __save(self): + """ + Save current folder context to file + """ + file = Path(self.FILE) + yf = { 'items' : self.DB } # load current context into dict + if file.is_file(): # does current folder have a context file? + tmp = yaml.safe_load(file.read_text()) # if yes, load it... + if 'config' in tmp: + yf['config'] = tmp['config'] # ...and save its optional configuration + try: + with file.open('w+') as data: # ...then write it all to the file + yaml.dump(yf, data, Dumper=VerboseSafeDumper) + return self.FILE + except: + return 0 + + + def __context(self, argv: list) -> dict: + """ + Creates a context entry for an existing file according to the schema + + argv (list): sets file contexts according to context schema + """ + context = dict() + # Create context dict according to schema + for context_key in self.SCHEMA.keys(): + if self.SCHEMA[context_key] != None: + context.update( { context_key : []}) + + # Parse the argument list + for arg in [x for x in argv if len(x) > 0]: # remove empty list elements + arg.replace(',', '') # remove commas + + # Add each argument list element to context dict based on the + # prefix symbols defined in the schema + for context_key in self.SCHEMA.keys(): + if str(arg)[0] in self.SCHEMA.values(): + # Schema with prefix + if not self.SCHEMA[context_key] == None: + if str(arg).startswith(self.SCHEMA[context_key]): + context[context_key].append(str(arg)[1:]) + else: + # No prefix, so it must be a note + if self.SCHEMA[context_key] == None: + if arg != ' ': + context.update( { context_key : str(arg)}) + else: + context.update( { context_key : None}) + return context + + + def add(self, file: str, *argv: str): + """ + Add context to existing filename and saves local folder context file. + + file (str): path to existing file + argv (list): context parameters passed to be added + + """ + target = Path(file) + + if target.exists(): # Only existing files and folders + self.__cd(target.parent) # Load folder context + context = self.__context(argv) # Create context dict from argument list + + if target.name in self.DB: # Does the file exist in our local context DB? + + # Add entries from argument context to context DB + for context_key in self.SCHEMA.keys(): + if self.SCHEMA[context_key] != None: + # Add to context and remove duplicate entries + self.DB[target.name][context_key] = list(set( self.DB[target.name][context_key] + context[context_key])) + else: + # Add the note + if context_key in context: + self.DB[target.name][context_key] = context[context_key] + + else: # If file or folder does not exist in context DB yet, add it + self.DB.update( { target.name : context } ) + + # Save to file + saved = self.__save() + if saved and context: + return [0, file, context] + else: + return [1, file] + + + def __add(self, path: str, context: dict): + """Programmatically add context""" + ctx_str = self.__collect_contexts(context) + if ctx_str: + argv = self.get_argv(' '.join(ctx_str)) + self.add(path, *argv) + + def remove(self, file: str, *argv: str): + """ + Remove context of existing filename and saves changed folder context file + + file (str): path to existing file + argv (list): context parameters to be removed + + """ + target = Path(file) + all = False + if target.exists(): # Only existing files and folders + self.__cd(target.parent) # Load folder context + if len(argv) == 0: + all = True + context = self.__context(argv) # Create context dict from argument list + + if target.name in self.DB: # Does the file exist in our local context DB? + + saved = False + if all: + del self.DB[target.name] + saved = self.__save() + return [0, file, None] + else: + for context_key in self.SCHEMA.keys(): + # Only works for context list items + if self.SCHEMA[context_key] != None: + for item in context[context_key]: + if item in self.DB[target.name][context_key]: + self.DB[target.name][context_key].remove(item) + saved = self.__save() + + if saved and self.DB[target.name]: + return [0, file, context] + else: + return [2, file, context] + else: + return [2, file, context] + else: + return [1, file] + + + def delete(self, file: str, fop:bool=False): + """ + Deletes all entries of an existing file and optionally deletes the file + + file (str): path to existing file + fop (bool): if True removes the referenced file + + """ + target = Path(file) + if target.exists(): # Does the target file exist? + self.__cd(target.parent) # Load its local context + else: + return [1, file] + if target.name in self.DB: # Do we have a record in the DB? + del self.DB[target.name] # Delete it + else: + return [2, file] + saved = self.__save() + if not self.DB: # If local context is empty now, we can delete the file + Path(self.FILE).unlink(missing_ok=True) + if fop: # delete the referenced file too? + target.unlink(missing_ok=True) + return [0, file, self.FILE if not self.DB else None, fop] + + + def move(self, source: str, dest: str, retain: bool=False, fop: bool=True): + """ + Copies or moves existing file with contexts to a new destination + + source (str): existing source file + dest (str): the new file destination + retain (bool): if True then copies, if False then moves + fop (bool): if True also does the file operation, if False only moves context data + + """ + # Let's use trusty old os lib over pathlib for this one + # Check if source file and destination folder exist + if os.path.exists(source) and os.path.isdir(os.path.dirname(dest)): + + sourcefolder = os.path.dirname(source) + sourcefile = os.path.basename(source) + destfolder = os.path.dirname(dest) + destfile = os.path.basename(dest) + + # If no destination file name was defined, but fop is True + # use the same as the source + if fop: + if not destfile: + destfile = sourcefile + else: + if not destfile: + destfile = destfolder + destfolder = os.path.dirname(destfolder) + if not sourcefile: + sourcefile = sourcefolder + sourcefolder = os.path.dirname(sourcefolder) + + sourcedata = {} + self.__cd(sourcefolder) # load local context + if self.DB[sourcefile]: # check if we have an entry for this file + sourcedata = self.DB[sourcefile] # load its context data + if not os.path.isdir(destfile): + self.__cd(destfolder) # load local context of destination folder + self.DB.update( { destfile : sourcedata } ) # update its DB with the context data of our source file + self.__save() # and save it + if not retain: # do we copy or move the data? + self.delete(source) # delete for move + if fop: # do we also physically move or copy the reference file? + if retain: + shutil.copy2(source, dest) + else: + shutil.copy2(source, dest) + os.remove(source) + return [0, source, dest, sourcedata] + else: + return [1, source, dest, os.path.isfile(source), os.path.isdir(os.path.dirname(dest))] + + + def clean(self, path: str='.', recursive=True): + """ + Removes context data from folder if files do not exist + + path (str): folder path + + """ + if path == '': + path = '.' + target = Path(path) + count = 0 + if target.is_file(): + target = Path(target.parent) + if target.is_dir(): + self.__cd(path) # load folder context + DB = self.DB.copy() # make a copy of it + for file in self.DB.keys(): # check for each entry if the file actually exists + f = target / file + if not f.is_file(): # if not, delete its entry + if file in self.DB: + del DB[file] + count += 1 + self.DB = DB # make our local working copy of the DB the context DB + self.__save() # save it + if not self.DB: # if it is empty we can delete the context file + Path(self.FILE).unlink(missing_ok=True) + if recursive: # do it all recursively? + for (root,dirs,files) in os.walk(path): + if dirs: + for dir in dirs: + rpath = os.path.join(root, dir) + fb = self.clean(rpath, False) + count += fb[2] + return [0, str(target), count] + + + def list(self, path: str='./', exact=True, either=False, recursive: bool=True, cache: bool=False, delete_cache: bool=False, *search: str): + """ + Returns an index object with query results and optionally saves a cached index + + 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 == '': # fix empty path argument + path = './' + self.__makeindex(path, recursive, cache, delete_cache) # index the directories + result = self.__search(search, exact, either) # apply the search query + return result + + + def __makeindex(self, path:str, recursive:bool=True, cache: bool=False, delete_cache: bool=False): + """ + Creates global context index for directory for searching, optionally also a cache file + Loads plugin readers to also read file specific metadata + + path (dict): root directory + recursive (bool): traverse subdirectories + + """ + cachefile = Path(path) / self.CACHEFILE + loaded_from_cache = False + if delete_cache: + cachefile.unlink(missing_ok=True) + if cache and cachefile.is_file(): # load index from cache + self.INDEX = yaml.safe_load(cachefile.read_text()) + loaded_from_cache = True + + else: # index the directory manually + self.__indexfolder(path) # index current directory + + # Dive into the subdirectories + for (root,dirs,files) in os.walk(path, topdown=True): + + if not recursive: # check if to include subdirectories + break + + # index each subdirectory + if dirs: + for dir in dirs: + rpath = os.path.join(root, dir) + self.__indexfolder(rpath) # index subdirectory + + # If we just created an index, write it to cache + if cache and not loaded_from_cache: + with open(cachefile, 'w+') as data: + yaml.dump(self.INDEX, data) + + + def scan(self, path: str, recursive: bool=False): + + for (root,dirs,files) in os.walk(path, topdown=True): + + # process every file with a reader plugin + if self.ENABLE_PLUGINS: + if files: + for file in files: + fpath = os.path.join(root, file) + self.__cd(root, True) + self.__metadata(fpath) + + if not recursive: # check if to include subdirectories + break + + + def __indexfolder(self, sub: str): + """ + Load a folder's context and add it to the global context index + + sub (str): path of folder + """ + target = Path(sub) + if target.is_dir(): + self.__cd(sub) + if self.DB: + for file in self.DB.keys(): + path = os.path.join(sub, file) + for context_key in self.SCHEMA.keys(): + if context_key in self.DB[file]: + self.__updateindex(path, self.DB[file], context_key) + + + def __updateindex(self, path: str, context: dict, context_key: str): + """ + Adds entries of a single context type of a file to the global context index. + The context entry is associated with the file in the 'items' index + The file is associated with its context entry + + sub (str): path of folder + """ + # Update files index + for key, value in context.items(): + if path in self.INDEX['items']: # check if there is already an entry + # if yes, merge the entries + if key in self.INDEX['items'][path] and isinstance(self.INDEX['items'][path][key], list) and isinstance(value, list): + self.INDEX['items'][path][key] += value + self.INDEX['items'][path][key] = list(set(self.INDEX['items'][path][key])) + # if not, just add them + else: + self.INDEX['items'][path][key] = value + else: # if not, just add the entry + self.INDEX['items'][path] = { key : value } + + # sort the file index alphabetically + self.INDEX['items'] = {key: value for key, value in sorted(self.INDEX['items'].items())} + + # Update context index + # Add each file path to a context entry + + if type(context[context_key]) == list: # is it a context entry + 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: # or is it a note + 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, exact:bool=False, either:bool=False): + """ + Searches the index and adds search result to it + + search (list): search query list + exact (bool): exact match or partial match + either (bool): combine found items by OR instead of AND + + """ + result = { + 'index' : self.INDEX, + 'found' : [] + } + if search[0]: # is there a search query? + + query = self.__context(search) # turn it into a context dict + return_dict = self.__context([' ']) # create an empty context dict + universal = {i for i in self.SCHEMA if self.SCHEMA[i]==None}.pop() # get the schema key with the None value, so we know which one to use for the note + + if universal in query: # does the query have an entry without context prefix? + query[universal] = [query[universal]] # turn it into a list for better processing + + for context_key in self.SCHEMA.keys(): # turn all values in the empty dict into list types + return_dict[context_key] = [] + + # Iterate Search Query Terms + for param in query.keys(): + needles = query[param] + + # Add the query without content prefix to all other contexts + # It is a wildcard to search all contexts at once + if universal in query.keys(): + needles += query[universal] + + # Run the search and add every found file path to the return dict + # in its respective context (or all of them for the wildcard search) + if needles: + haystack = self.INDEX[param].keys() + for hay in haystack: + for needle in needles: + if exact: + if needle == hay: + if self.INDEX[param][hay] not in return_dict[param]: + return_dict[param] += self.INDEX[param][hay] + else: + 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 and not either: + # we do an AND search by default, but only if there was more than 1 query item + result['found'] = list(set(self.__intersect(return_dict))) + + else: + # for 1 query searches and OR searches we simply add all of the matches + min = [] + for sublist in return_dict.values(): + min += sublist + result['found'] = list(set(min)) + + else: + # return the whole index if there was no query item + result['found'] = self.INDEX['items'].keys() + + # Sort the result directory tree from shallow to deep based on the occurrence of / + result['found'] = sorted(result['found'], key=lambda x: x.count('/')) + + return result + + + def __intersect(self, result: dict): + """ + Returns an intersection of two search queries (AND) + + result (dict): dict with search result lists to be intersected + """ + + mresult = {key: value for key, value in result.items() if value} # remove empty items + + if len(mresult) < 2: # if there is not enough to intersect, just return it + return [] + + common_elements = set(mresult[next(iter(mresult))]) # elements common in all + + for key in mresult.keys(): + # intersect common elements + common_elements = common_elements.intersection(mresult[key]) + + return list(common_elements) + + + def register_plugin(self, function): + """ + Add a plugin to the plugin list + """ + self.PLUGINS.append(function) + return function + + + def get_argv(self, context_string: str): + """ + Make a list of args from a context string to pass as an *argv parameter + """ + + tags = re.findall(self.REGEX, context_string) + note = re.sub(self.REGEX, '', context_string).lstrip() + argv = ' '.join(tags).split(' ') + [note] + argv = [x for x in list(set(argv)) if x != ''] # make unique and remove empty items + return argv + + + def __metadata(self, filename: str): + """ + Processes a file with all reader plugins to extract its metadata + """ + + # Utilities for reader plugins + obj = { + 'file' : Path(), + 'config' : self.CONFIG, + 'schema' : self.SCHEMA, + 'context' : self.__context, + 'string' : self.get_argv + } + o = SimpleNamespace(**obj) + + for plugin_name in self.PLUGINS: + # Check if plugin is (de)activated by a local folder configuration + if 'plugins' in self.CONFIG: + if plugin_name not in self.CONFIG['plugins']: + continue + # Load the plugin from plugins folder + plugin = import_module('orvanitag.plugins.' + plugin_name) + + # Load a list of file types the plugin is able to read + suffixes = plugin.TYPES # The plugin's default file types + if plugin_name in self.CONFIG: # check for local folder config overrides + if 'types' in self.CONFIG[plugin_name]: + suffixes = self.CONFIG[plugin_name]['types'] + + o.file = Path(filename) + if o.file.suffix in suffixes: # Does the file match a permitted file type + if hasattr(plugin, 'reader'): # Does the plugin have a reader method? + + # Process the file using the reader plugin + try: + context = plugin.reader(o) + if context: + self.__add(filename, context) + print(f'Found Metadata for `{filename}`.') + except Exception as e: + print(f'Plugin Error ({plugin_name} reading {filename}): `{e}`') + + + def __collect_contexts(self, context: dict): + """ + Reuturns a list of prefixed context entries from a context dict + """ + elements = [] + context_keys = list(CONTEXTS.keys()) + for context_key in context_keys: + if not context_key in context: + context[context_key] = '' + 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]) + return elements + + + def write_all(self, path: str, method: str, recursive: bool=False): + + for (root,dirs,files) in os.walk(path, topdown=True): + + # process every file with a writer plugin + if self.ENABLE_PLUGINS: + if files: + for file in files: + fpath = os.path.join(root, file) + self.__cd(root, True) + self.write(fpath, method) + + if not recursive: # check if to include subdirectories + break + + + def write(self, filename: str, method: str): + """ + Writes a file's context entries as metadata to the file using a writer plugin + + filename (str): A valid file path + method (str): The name of a plugin able to process the file type + """ + + # Utilities for writer plugins + obj = { + 'file' : Path(), + 'config' : self.CONFIG, + 'schema' : self.SCHEMA, + 'context' : {}, + 'collect' : self.__collect_contexts, + 'string' : self.get_argv + } + o = SimpleNamespace(**obj) + + for plugin_name in self.PLUGINS: + + # Check if plugin is (de)activated by a local folder configuration + if 'plugins' in self.CONFIG: + if plugin_name not in self.CONFIG['plugins']: + continue + + plugin = import_module('orvanitag.plugins.' + plugin_name) + + if plugin.NAME == method: # select the reference plugin + + # Load a list of file types the plugin is able to read + suffixes = plugin.TYPES # Load the plugin's defaults + if plugin_name in self.CONFIG: # Check for local folder config overrides + if 'types' in self.CONFIG[plugin_name]: + suffixes = self.CONFIG[plugin_name]['types'] + for suffix in suffixes: + if not suffix in plugin.TYPES: + suffixes.remove(suffix) + if not suffixes: + suffixes = plugin.TYPES + + o.file = Path(filename) + if o.file.suffix in suffixes: + + # Get all local context entries (including file metadata) + self.__makeindex(o.file.parent, recursive=False) + items = self.INDEX['items'] + + for found in items.keys(): + # If there is a file with matching entries in the local context + if str(o.file).replace('./', '') == found.replace('./', ''): + o.context = items[found] + if hasattr(plugin, 'writer'): # If the plugin has a writer method + plugin.writer(o) # Write the context as metadata + return [0, filename, o.context] + else: + return [5, plugin_name] + else: + return [4, suffixes, plugin_name, plugin_name in self.CONFIG] + + + def export(self, filename:str): + """ + Exports the global context index to a text file in a format that can be reimported + + filename (str): optional filename + """ + + # If no filename give, use the default one + if filename == '' or filename == None: + filename = 'context.txt' + + file = Path(filename) + + # Run `otag ls` to create the global context index + index = self.list(file.parent, False, False, True, False, False, '') + + # Write the index as lines to file + items = index['index']['items'] + content = "" + if len(items): + for path in items: + string = ' '.join([x for x in self.__collect_contexts(items[path]) if x != None]) + content += f'{path} --- {string}\n' + file.write_text(content) + return [0, filename] + else: + return [2] + + + def load(self, filename:str): + """ + Imports lines from a text file created by `otag export` to the global context index, + filtering out the already known entries + + filename (str): optional filename + """ + + # If no filename was given, try the default one + if filename == '' or filename == None: + filename = 'context.txt' + file = Path(filename) + if file.exists(): + imported = file.read_text().split('\n') + if len(imported): + # Make an index of all context items that are already known + known = self.list(file.parent, False, False, True, False, False, '')['index']['items'] + count = 0 + for import_line in imported: + if len(import_line) > 5: + line_elements = import_line.split(' --- ') + if len(line_elements) > 1: + context = {} + path = line_elements[0].strip() + new_file = Path(path) + if new_file.exists(): # Check if file exists + string = line_elements[1].strip() + if string: + new_file_context = self.__context(self.get_argv(string)) + # Check if file is already known and don't import anything we already have + if path in known.keys(): + known_file_context = known[path] + context = new_file_context.copy() + for new_context in new_file_context: + if type(new_file_context[new_context]) == list: + for context_item in new_file_context[new_context]: + if new_context in known_file_context.keys(): + if context_item in known_file_context[new_context]: + context[new_context].remove(context_item) + else: + if new_context in known_file_context.keys(): + if new_file_context[new_context] == known_file_context[new_context]: + del context[new_context] + self.__add(path, context) + else: + return [4, filename] + return [0, filename, count] + else: + return [2, filename] + else: + return [1, filename] \ No newline at end of file diff --git a/test/test.txt b/orvanitag/plugins/__init__.py similarity index 100% rename from test/test.txt rename to orvanitag/plugins/__init__.py diff --git a/orvanitag/plugins/frontmatter.py b/orvanitag/plugins/frontmatter.py new file mode 100644 index 0000000..ea8e13b --- /dev/null +++ b/orvanitag/plugins/frontmatter.py @@ -0,0 +1,22 @@ +import frontmatter +from pathlib import Path + +NAME = 'frontmatter' +TYPES = ['.md', '.txt', '.markdown', '.rst'] + +def reader(o): + with open(o.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] + return context + +def writer(o): + y = frontmatter.load(o.file) + for key in o.context: + y[key] = o.context[key] + with open(o.file, 'w') as data: + data.write(frontmatter.dumps(y)) \ No newline at end of file diff --git a/orvanitag/plugins/hashdoubleslash.py b/orvanitag/plugins/hashdoubleslash.py new file mode 100644 index 0000000..28e8130 --- /dev/null +++ b/orvanitag/plugins/hashdoubleslash.py @@ -0,0 +1,63 @@ +import re +from pathlib import Path + +NAME = 'hash//' +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: + for line_num, line in enumerate(data, start=1): + if line_num > 5: + break + if line.strip().startswith("#// "): + argv = o.string(line.strip()[3:]) + context = o.context(argv) + return context + +def writer(o): + string = PREFIX + ' '.join(o.collect(o.context)) + '\n' + with o.file.open() as data: + content = data.readlines() + num = 0 + line = '' + if len(content): + 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/orvanitag/plugins/id3.py b/orvanitag/plugins/id3.py new file mode 100644 index 0000000..f43e60e --- /dev/null +++ b/orvanitag/plugins/id3.py @@ -0,0 +1,42 @@ +import re +from pathlib import Path +import taglib + +NAME = 'id3' +TYPES = ['.mp3', '.wav', '.flac', '.ogg'] +REGEX = r'\s*([@+]\w+|#\w+)' + +def reader(o): + universal = {i for i in o.schema if o.schema[i]==None}.pop() + with taglib.File(o.file, save_on_exit=False) as song: + metadata = song.tags + id3map = {} + if 'id3' in o.config: + if 'map' in o.config['id3']: + id3map = o.config['id3']['map'].copy() + for context_key in id3map: + if context_key not in o.schema.keys(): + del id3map[context_key] + else: + ctag = str(id3map[context_key]).upper() + if ctag in metadata: + id3map[context_key] = metadata[ctag] + if 'COMMENT' in metadata: + comment = metadata['COMMENT'] + argv = o.string(comment[0].strip()) + 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] + context[universal] = '; '.join(context[universal]) + return context + +def writer(o): + string = ' '.join(o.collect(o.context)) + with taglib.File(o.file, save_on_exit=True) as song: + song.tags['COMMENT'] = [string] \ No newline at end of file diff --git a/orvanitag/plugins/office.py b/orvanitag/plugins/office.py new file mode 100644 index 0000000..3f1d255 --- /dev/null +++ b/orvanitag/plugins/office.py @@ -0,0 +1,105 @@ +import os +import re +import mimetypes +import shutil +from pathlib import Path +from olefile import OleFileIO + +NAME = 'office' +TYPES = ['.doc', '.xls', '.ppt', '.docx', '.xlsx', '.pptx', '.odt', '.ods', '.odp'] +XML_REGEX = r"(?P
)(?P.*?)(?P<\/dc:description>)"
+REGEX = r'\s*([@+]\w+|#\w+)'
+
+# Office Document processing inspired by
+# https://github.com/kappapiana/anonymize/blob/master/anonymize.py
+
+def unzip_file(orig_file, tmp_dir):
+    type = mimetypes.guess_type(orig_file)
+    filetype = {
+        "application/vnd.oasis.opendocument.text" : "odt",
+        "application/vnd.oasis.opendocument.spreadsheet" : "ods",
+        "application/vnd.oasis.opendocument.presentation" : "odp",
+        "application/vnd.openxmlformats-officedocument.wordprocessingml.document" : "docx",
+        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" : "xlsx",
+        "application/vnd.openxmlformats-officedocument.presentationml.presentation" : "pptx",
+    }
+    if type[0] in filetype:
+        shutil.unpack_archive(orig_file, tmp_dir, 'zip')
+        return filetype[type[0]]
+    else:
+        return type[0]
+
+def get_context_string(meta_file):
+    ctx = ''
+    meta_content = meta_file.read_text()
+    csearch = re.search(XML_REGEX, meta_content)
+    if csearch:
+        return csearch.group('body')
+    
+
+def reader(o):
+    tmp_folder = Path('unzip__' + o.file.stem)
+    file_type = unzip_file(o.file, tmp_folder)
+    tags = note = []
+
+    # OpenOffice / LibreOffice / Open Document Format
+    if file_type in ['odt', 'ods', 'odp']:
+        meta_file = tmp_folder / 'meta.xml'
+        argv = o.string(get_context_string(meta_file))
+        context = o.context(argv)
+        shutil.rmtree(tmp_folder)
+        return context
+
+    # Microsoft Office Format
+    elif file_type in ['docx', 'xlsx', 'pptx']:
+        meta_file = tmp_folder / 'docProps' / 'core.xml'
+        argv = o.string(get_context_string(meta_file))
+        context = o.context(argv)
+        shutil.rmtree(tmp_folder)
+        return context
+
+    # Legacy Microsoft Office Format
+    elif file_type in ['application/msword', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint']:
+        ole = OleFileIO(o.file)
+        meta = ole.get_metadata()
+        ole.close()
+        if meta.comments:
+            argv = o.string(meta.comments.decode('UTF-8'))
+            context = o.context(argv)
+            return context
+    
+
+def writer(o):
+    string = ' '.join(o.collect(o.context))
+    tmp_folder = Path('unzip__' + o.file.stem)
+    file_type = unzip_file(o.file, tmp_folder)
+    regex = re.compile(XML_REGEX)
+    string = f"\\g
{string}\\g"
+
+    # OpenOffice / LibreOffice / Open Document Format
+    if file_type in ['odt', 'ods', 'odp']:
+        meta_file = tmp_folder / 'meta.xml'
+        with meta_file.open('r+') as file:
+            content = regex.sub(string, file.read())
+            file.seek(0, 0)
+            file.write(content)
+        shutil.make_archive(o.file, "zip", tmp_folder)
+        output_file_zip = str(o.file) + ".zip"
+        os.rename(output_file_zip, o.file)
+        shutil.rmtree(tmp_folder)
+
+    # Microsoft Office Format
+    elif file_type in ['docx', 'xlsx', 'pptx']:
+        meta_file = tmp_folder / 'docProps' / 'core.xml'
+        with meta_file.open('r+') as file:
+            content = regex.sub(string, file.read())
+            file.seek(0, 0)
+            file.write(content)
+        shutil.make_archive(o.file, "zip", tmp_folder)
+        output_file_zip = str(o.file) + ".zip"
+        os.rename(output_file_zip, o.file)
+        shutil.rmtree(tmp_folder) 
+
+    # Legacy Microsoft Office Format
+    elif file_type in ['application/msword', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint']:
+        print('unsupported file format')
diff --git a/orvanitag/plugins/pdf.py b/orvanitag/plugins/pdf.py
new file mode 100644
index 0000000..1b30884
--- /dev/null
+++ b/orvanitag/plugins/pdf.py
@@ -0,0 +1,24 @@
+import re
+import shutil
+from pathlib import Path
+from pdfrw import PdfReader, PdfWriter
+
+NAME = 'pdf'
+TYPES = ['.pdf']
+REGEX = r'\s*([@+]\w+|#\w+)'
+
+def reader(o):
+    pdf = PdfReader(o.file)
+    if pdf.Info.Keywords:
+        tags = re.findall(REGEX, pdf.Info.Keywords.strip())
+        note = re.sub(REGEX, '', pdf.Info.Keywords.strip()).replace('(', '').replace(',', '').replace(')', '').strip()
+        argv = ' '.join(tags).split(' ') + [note]
+        argv = [x for x in argv if x != '']
+        context = o.context(argv)
+        return context
+    
+def writer(o):
+    string = ' '.join(o.collect(o.context))
+    pdf = PdfReader(o.file)
+    pdf.Info.Keywords = string
+    PdfWriter(o.file, trailer=pdf).write()
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..7fd8bd4
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,29 @@
+"""
+#// +orvanitag @orga #tagging #python
+"""
+import setuptools
+
+with open("README.md", "r") as fh:
+    long_description = fh.read()
+
+setuptools.setup(
+    name="orvanitag",
+    version="1.0.0",
+    author="randogoth",
+    author_email="randogoth@posteo.org",
+    description="Platform independent, file-based, portable tagging system to organize directories and files.",
+    long_description=long_description,
+    long_description_content_type="text/markdown",
+    url="https://github.com/randogoth/orvanitag",
+    packages=setuptools.find_packages(),
+    classifiers=[
+        "Programming Language :: Python :: 3",
+        "License :: OSI Approved :: MIT License",
+        "Operating System :: OS Independent",
+    ],
+    entry_points= {
+        'console_scripts': ['otag=orvanitag.cmd:main']
+    },
+    install_requires=['requests'],
+    python_requires='>=3.6',
+)
\ No newline at end of file
diff --git a/test/.context.yaml b/test/.context.yaml
deleted file mode 100644
index 5a75a24..0000000
--- a/test/.context.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-items:
-  chirpy.wav:
-    contexts:
-    - Chripo
-    projects:
-    - sensorwatch
-    tags: []
-  office.odt:
-    contexts: []
-    projects:
-    - oopsie
-    tags:
-    - whoa
-  word.docx:
-    contexts: []
-    note: what is that smell?
-    projects: []
-    tags:
-    - choo
diff --git a/test/chirpy.wav b/test/chirpy.wav
deleted file mode 100644
index e2a7baa85afe3693550b93538c828b360d93d651..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1066360
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
VtE_Aw4WbO93=ymh40W;~9sq4grVRi9

diff --git a/test/oldword.doc b/test/oldword.doc
deleted file mode 100644
index 17fc207140b86e1f735f9dba941f50ac167969be..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 9728
zcmca`Uhu)fjZzO8(10}qGsD0CoD6J8;*1Oo3<5B|00RRP0|Ns{?BDcfq{XQfdL%n>{0s~X
zAU%Rm8fwfaHN-+7h#{XLpP__7fx(p_kD-L2h@ldem5HLo7+4vQy-bWIP`V*T9kFUg
z?MH+FF=2)r{;={JBt~lf2h|0j{4d17z#z=Pz#ziFz#z)Nz#zuJz#z`Rz#zfEz#z%M
zz#zrIz#z@Qz#zlGz#z-Oz#s=LGZYvY7!(;87?hxV6$SylT?PgQJq88_eFg>w0|o{LLk0#0BL)TrV+IBW69xtbQw9bG
zGX@3*a|Q+m3kC)TO9lo8D+UGzYX$}e8wLgjTLuOOI|c>@djp9X)*YFF*5{uF*7)ONigJkaIzG8aI$!NFfjypu`uL$uyB-kuyDkAu`(ojNif8F
zSb}m3#6E1K8^b?&Mg}HEP+DSV@L)(~NMuN1$YjW4NC(%V{0zcNJ}`(ZsbFAJVPueC
z@b_Y42=roOaQ2d62=HQOfLJ8MV8Y-e05S)ZwmBI>7*ZK3z@@blLq0mDPY%u+7QAFAYBlfK%oO_Rj@!B4&amqYFcn{fK)=786Y;Sr3q3C(!&HQ
zUO)_xKmepQ0&b4Di%kHPS|BOBID{dSA(tVQp_oB|!H*%8p`1a10aV?Ak^;z+reYHq
zAqgI@F$}>Bl?=HINeubm1Z1p6ob8SbMGTqHM3*TxfsqkZQsTD=98pOOsSHI7iSWo!
zUnX4X9h0@Z?G7sIP@gaEFXq^h75*GaI$n^
zNM$HvNMy)kNMuN7NCbxg14FRd1V%1_r|k
z5ljXJ3=Iqn#sLfr8b%C!;2z<>|JeJ_pbiYv)w5UU=t&Dqp3cFbt@CpoXnuedO)LgF
z&jIQzfiP&43#1p+H{JrBPX&bp$TE<83bgMG8jEITU|?urfD9YVU|?VX@j-e)eQ@Xe
zypq(4l47tRNFbmnKPxr4q!>IB1nQ}VB&HXGMsyMVa8Mmsl$w~6Q>mknmRJnx&V%P#
zK-yC)k~2#(^FV{oU@_2WWD0b!UPmD*zX&P^a_cA_IUxWV5U1AsFDQMZ&mmz8Nl-d>
z08K7|$Elnd@)>d&3K;wuk{GhEDaR`&#J~hzhXNWO1P|A=C
zo*x6v{e$Ll(%>^@h#4VV=4vo7F@Q=Vka5J?FVDch@C9mMIM}Wf1{a2WhGeiyQo-vG
ypwa{>DKh-844Maqj{C7<*i2e@Sdd{qsLl`oWfp?IBTfM*++mm)9iX{>m^uKmy7=}0

diff --git a/test/sheet.xlsx b/test/sheet.xlsx
deleted file mode 100644
index cfa167b9caee52c5948b826c2ddb42b2b2b85174..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4720
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

diff --git a/test/sub/.context.yaml b/test/sub/.context.yaml
deleted file mode 100644
index 65e0f78..0000000
--- a/test/sub/.context.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-items:
-  statement_14793553_USD_2022-11-01_2023-01-31.pdf:
-    contexts: []
-    projects: []
-    tags:
-    - yay
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
deleted file mode 100644
index 82cb63ef517df26e3082d49ccfc1a368527ff016..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 125125
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

3OXB zxb$nzn@exTK3<`(eS7BeJJaIUoVl54u+6G@c}=sa>7td_t9Na#^7rEtG~wlCzunXJ zCuZu(P3ynkI$Rs~rsiVJl5{59qd(7EU$|_vCeL`KpVRp&Z&j6k$7lImyma*cP&CImi=9}(#vSh)E1}k z6)U5pnZKM4+R7DsL8mbDJRg5(=p?3vRok~NW&PdS@#x2ovp-6WYKrrtC$78tvfJMG zTd7H8cj=OyPiI<)P2Ra{cY4l&OA!$}O1t;0`IB(`$;WqclV_gUa^r8_?9k=W`;MPo zRetrV%m>RiotkI703|PuLeEWK_q!o3>3zf`v|#Zyr}CfW zqQ5_ncCS4rp7yBz*U`t~vTHliOzs^rfBeMwVBC?l38hn4sG2>!u{?EabD4U1SBBWs z9N%ew<&XV6pnUi4*V04ZLn4BB5BHas=AP3LShMZI9Ey?Hmmn!ASv9_T}O2u8uFP1Cr6k8#E z>BF-5Pp@v=@0V1a*qS5uZEJu3_N`NwO_zOVQ<}P=bvits48wG7nto_Gf`|x6MT$uU+ukAcZ_wbndJ^P zAIP*RV-t}A5fb(3P}v_@yOn@Sy#-^4qo9X6Y}WU@wr_WsaC!3omqr@aW#cpmPAlVA7-9QF4sv6A?q+Ig-a=HGdtzYHRuSN}41-nYkN(RPQnJ9-zR6DR*^a9JHO zXSO1bZ~>Q+K#QP6tHi(m0j+_{r%UlIRB7-R?|JOSP`>gZ!@a{F6pHG$-DaEoL&i0d zWzh+7V_m~5Qms*I8FN>?y>yR zaIUXka^1A&p`G&S_(PkT-!A|8$spU%W@F&%M$;U{nqL#;-SrN9@LzW`c=I3D8@KiT z6s<_KkK*0%V{P`m-Hy(dUhn!#Rh1S`x8l6%w)^$ODvtFE-5(Y1y*$OavQMb6B*BKy z$g1t$>g!1pJ6uFcFU^|gAld6a<)zUEE!l%#|Ni)Q@Biz$rRUot&a>Rivp)Rx@D6^X zmnw&+ewcmieE%elUm^+jRJH8R6v<6{wB}f~!>dD%D`)?keeG*SOC6lf>Ka02wr+cO+TgN~=cIu5{%Ri|^OQ0u3%H%`^!s33%{cA%lRrn6 z+;KJYxSnhiyH3Mz-M=}ny zJPFx2V@q>AQw39Wb!MQoNXY771{xsyzzj4NfJK#wg*mFVW}rSBvOF+)=Yu&hEJT+GPa1VhZkzyd=IbTcrz zUeGPP=wcS2zyJv%*^qPR~RYkGa(#YJx7)_m}k%a+z_*ohoS(u@#GX~vW3^L9D9tM`imS$*SU}#`q ziXK)VG0<7ZAk8qnh6VZgzqx#Lzz}(0ZQ_RE=Ees3|%uPXKBB=J7n^~fTsiA?ng%Mhq8XA~ef);(D>a{R1 z$FSGJ2t6Gb8dw+`VX89*t%XA|&(PT165U=y69drs?WpQZ3_$rAP0Yx^2rXO;O^iW{ zMA6ilS)jYc(A2;TElnC4ni^T6ho7M(=%{j#aqu)`XlQAS;a@{bGmNk|w6p}3gCNcD zG-PC8gr0T{jf^qvH8M6fM0c~1u`zl+GBh$aMlUxEjf_n|>s(RoH8uea*`kYCqUAwD zBV$w0F(zp0OfkaB$QZQH5TpzdE=Iwuu zZgy7ymG40c`a${mB?_P-JV-%5II}8M!3?q-EU~BrTo@Y~8Jk&{ajB}h`nz!f0AJ+f AcmMzZ diff --git a/test/table.ods b/test/table.ods deleted file mode 100644 index bee984853bafd82d17830f80bdf1831d08c56ce7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7314 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 bEEdC2N(XqevVoKdG6*uHvM?}+gQFJ!!@`So diff --git a/test/tableold.xls b/test/tableold.xls deleted file mode 100644 index 65cd308e45b535359d61533e8e9e9ce47a4d8791..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 zcmca`Uhu)fjZzO8(10}qGsD0CoD6J8;*1Oo3>+}N00RRP0|Ns{?BDcfq{XQfdL%n>Qe^B`iD#w`_7#Ps=Kd7t+<$o>)1_o{h z1_mAm1_oXR1_nL`1_pix1_l8J1_nU}1_mJp1_ogU1_luZ1_n_E1_m((1_p6xxgiOq zL3YY8Ffhn6FfhnL#T1}4!u6vpdWQffhX4Zu8!N+Z-ZP*gA6)i7WME?0z;X~=zdvGN zV2EKT0HqD*#GGUWdI2Y}8xk2oY4ZRh1A{Fi69Xf|90n!^K8E#R(LG?&7M%JR7#JKF z6fD4rpON7UqXXFOyvBgOBlZX2jvH_7Z?~A4k&=cK@J0pe<4mB z6k6ES;}Qp%icS6S6<@-@$bc=JwISjE0pxQKhK0W-4sjhE;#xSwIWfd1GqEr*G%)-J z(E<(3U|O(&4NMC)uz+dd26iwl(!lyZ0i1SQ8Tc3iK?OAf8$)nLYHEpL4+9GWBLgGD zK}HUSgNzIeA-#+YuNk61CG>|NkXIPkK1hIQ7DS63l&)adn1TBPs0827z`?-5(8$Qi zz`${U(Sd=1!+}BWBdCn$WnkdoVPN18XJFv?&cGm$%puB<45}PJrb5en5R(a1Q9ue5 z0h9uThk=P9g@GTO1qH#GPk@1g;m^vCmwb}~?Bl`W4T!DvQ-rM)^5TZ4gv zAq@;Z*lQxO7cwX@FfycoLz9uAi9v@^hY_sZ_@zCJW@HFuU}E54s0G)C42+%Jpqh|@ zfq@BBD}q7+hTkv*fV}*{16)&bd;kR)D9k}F=VxI4U;wT~Sw3ihdr_PpKp_p&3!|AB zxWM{AdO$66J0>B9ZQw4M1563HPUU9+)!$%)AmZs9;tc5^8zEd!sDWx05DyedAR2-h z8UFoe=3)T1;RHB9~FGy?;JZ)S2)esO+UiGpiIa%zr(rMYfMVp3{OPAa&n zaLPCpBK$VGVqgN7^`I&d zR>I-c0G0d(Do()#rZYo6LoP!BgFizOLl#t)cnV}c$Uh*vL6{hwpnT;CRmjNT&yd5A z3gwYbaWOD~%Wja}AWV!2QqaB{NG&TvFheOrE<-LuA_J)J@5zwIkOqzukVpwbCPO|$ z9!Mb$tO2zj6r9A`52{x#K+R)iaAC-2NCvwh6+8k#ntLpu_JiyOVW_cqDR~A4h7!Cg dNRtHF3&X_d1oef9QAeyAnB5?n7(K}L0|0$D9d`f# diff --git a/test/word.docx b/test/word.docx deleted file mode 100644 index e22a65169a0ef928d2c059b5ddec72b9d1028190..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4715 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