From e9259dc7ba899eda3c3c20ca8fdc1b93642f6516 Mon Sep 17 00:00:00 2001 From: randogoth Date: Mon, 5 Jun 2023 23:57:44 +0300 Subject: [PATCH] init, add, remove, purge --- COMMANDS.md | 16 +++++++++ TODO.md | 6 ++++ context.yaml | 17 +++++++++ dir/context.yaml | 5 +++ dir/file.txt | 0 orvani.py | 89 ++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 133 insertions(+) create mode 100644 COMMANDS.md create mode 100644 TODO.md create mode 100644 context.yaml create mode 100644 dir/context.yaml create mode 100644 dir/file.txt create mode 100644 orvani.py diff --git a/COMMANDS.md b/COMMANDS.md new file mode 100644 index 0000000..c6d0749 --- /dev/null +++ b/COMMANDS.md @@ -0,0 +1,16 @@ +# 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 -r dir TERM ++ listcon/lsc -r dir TERM ++ listproj/lsprj -r dir TERM \ No newline at end of file diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..12f152d --- /dev/null +++ b/TODO.md @@ -0,0 +1,6 @@ ++ yaml db ++ command line tools ++ todo.txt like commands ++ recursion ++ audio player (id3 tags) ++ support for markdown tags \ No newline at end of file diff --git a/context.yaml b/context.yaml new file mode 100644 index 0000000..a148047 --- /dev/null +++ b/context.yaml @@ -0,0 +1,17 @@ +TODO.md: + contexts: [] + note: and another note + projects: + - project2 + tags: + - tag2 +file.txt: + contexts: [] + projects: [] + tags: + - frrr +frrr.md: + contexts: [] + projects: [] + tags: + - frrr diff --git a/dir/context.yaml b/dir/context.yaml new file mode 100644 index 0000000..905fae5 --- /dev/null +++ b/dir/context.yaml @@ -0,0 +1,5 @@ +file.txt: + contexts: [] + note: weird + projects: [] + tags: [] diff --git a/dir/file.txt b/dir/file.txt new file mode 100644 index 0000000..e69de29 diff --git a/orvani.py b/orvani.py new file mode 100644 index 0000000..92775ff --- /dev/null +++ b/orvani.py @@ -0,0 +1,89 @@ +import os +import yaml + +class OrvaniTag: + + DB = dict() + FILE = '' + CTX = { + 'contexts' : '@', + 'projects' : '+', + 'tags' : '#' + } + + def __init__(self, path: str='context.yaml', contexts=CTX): + self.FILE = path + self.__cd() + + def __cd(self): + """change file context to subdirectory""" + if os.path.isfile(self.FILE): + try: + with open(self.FILE, 'r') as data: + self.DB = yaml.safe_load(data) + except Exception: + print('File does not exist') + else: + self.DB = dict() + + def __save(self): + """save context file to current directory""" + try: + with open(self.FILE, 'w+') as data: + yaml.dump(self.DB, data) + except Exception: + print('File write error') + + def __context(self, argv) -> dict: + """create context for given filename""" + context = dict() + for ctx in self.CTX.keys(): + context.update( { ctx : []}) + for arg in argv: + for ctx in self.CTX.keys(): + if str(arg)[0] in self.CTX.values(): + if str(arg).startswith(self.CTX[ctx]): + context[ctx].append(str(arg)[1:]) + else: + context.update( { 'note' : str(arg)}) + return context + + def add(self, file: str, *argv: str): + if os.path.dirname(file): + self.FILE = os.path.join(os.path.dirname(file), self.FILE) + self.__cd() + file = os.path.basename(file) + context = self.__context(argv) + if file in self.DB: + for ctx in self.CTX.keys(): + self.DB[file][ctx] = list(set( self.DB[file][ctx] + context[ctx])) + if 'note' in context.keys(): + self.DB[file]['note'] = context['note'] + else: + self.DB.update( { file : context } ) + self.__save() + + def remove(self, file: str, *argv: str): + if os.path.dirname(file): + self.FILE = os.path.join(os.path.dirname(file), self.FILE) + self.__cd() + file = os.path.basename(file) + context = self.__context(argv) + if file in self.DB: + for ctx in self.CTX.keys(): + for item in context[ctx]: + if item in self.DB[file][ctx]: + self.DB[file][ctx].remove(item) + self.__save() + + def purge(self, file: str): + if os.path.dirname(file): + self.FILE = os.path.join(os.path.dirname(file), self.FILE) + self.__cd() + file = os.path.basename(file) + if file in self.DB: + del self.DB[file] + self.__save() + +o = OrvaniTag() +o.add('dir/file.txt', 'weird') \ No newline at end of file