diff --git a/owo/__init__.py b/owo/__init__.py index 2d9f559..7326395 100644 --- a/owo/__init__.py +++ b/owo/__init__.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- - -# from . import config -from . import output +# TODO: clean this up +# TODO: load datafiles. if not found, either fail or install files (maybe)? +from .output.owoOutputClass import owoOutputClass +from . import datafiles import logging import sys @@ -14,22 +15,17 @@ __version__ = "0.0.0-alpha0" DEBUG = True -def main() -> dict: - try: - out=output.OutputObject() - except Exception as exc: - return { - '_err':True, - 'exception':exc, - 'vars':{ - 'globals': globals(), - 'locals': locals(), - 'dir': dir() - } - } - try: - pass - # do shit - except KeyboardInterrupt: - return {'_kbi':True} +def main() -> owoOutputClass: + # PART 1: init + try: + out = owoOutputClass() + except Exception as exc: + import traceback + traceback.print_exc(exc, file=sys.stderr) + sys.exit(1) + else: + pass + # PART 2: load config/data files + try: + diff --git a/owo/__main__.py b/owo/__main__.py index 169e443..622eab0 100644 --- a/owo/__main__.py +++ b/owo/__main__.py @@ -9,11 +9,8 @@ import owo if __name__ == "__main__": output=owo.main() - del owo - if output.__contains__('_err'): - print("an error occured!", file=sys.stderr) - if output.__contains__('_kb'): - print("interupted by keyboard") - sys.exit() + if output == None: + print("an error might have occured...",file=sys.stderr) else: - pass # output results + from yaml import dump + print(dump(output)) \ No newline at end of file diff --git a/owo/config.py b/owo/config.py deleted file mode 100644 index a340abe..0000000 --- a/owo/config.py +++ /dev/null @@ -1,6 +0,0 @@ -confDict = {} - -def loadConfig(confLocation = "$HOME/.config/owo.yaml"): - from os import path - if not path.exists(confLocation): - diff --git a/owo/datafiles/__init__.py b/owo/datafiles/__init__.py index 665a9cb..799190e 100644 --- a/owo/datafiles/__init__.py +++ b/owo/datafiles/__init__.py @@ -2,7 +2,8 @@ from pathlib import Path from sys import platform from yaml import load, dump import os -from re import search, IGNORECASE +import sys +import re import collections.abc _config={} @@ -15,7 +16,7 @@ _LOCATIONS = { "{}/owo/".format(os.environ["XDG_CONFIG_HOME"]) if "XDG_CONFIG_HOME" in os.environ else str(Path.home())+"/.config/owo/", "{}/".format(os.environ["XDG_CONFIG_HOME"]) if "XDG_CONFIG_HOME" in os.environ else str(Path.home())+"/.config/", str(Path('~').resolve()), - str(Path().resolve()) if str(Path.cwd()) not in self._DIRS else None + str(Path().resolve()) ], '_FNAME_RE': r"([ou^>]w[ou^<]|config)\.(ya?ml|c(on)?fi?g?)$" @@ -23,26 +24,48 @@ _LOCATIONS = { } +def _mDC_listMatches(inp: str) -> list: + "\n".join(os.listdir(inp)) + return re.findall( + _LOCATIONS['_YAMLCONFPATH']['_FNAME_RE'], + inp + ) + +def _makeDefaultConfs() -> list: + locates=[] + for x in _LOCATIONS['_YAMLCONFPATH']['_DIR']: + locates+=_mDC_listMatches(x) + return locates + def _updateConf(toAdd: dict): - _config = toAdd.update(_config) + _config.update(toAdd) + +def _loadConfigFile(path: str): + try: + file = Path(path) + + if file.exists() and not file.is_dir(): + try: + conf = yaml.load(file.read_text()) + except Exception as exc: + raise exc + else: + if not _config: + _config = conf + else: + _updateConf(conf) + if file not in _files: + _files+str(file) + except Exception as exc: + print(exc) + import traceback + traceback.print_exc(file=sys.stderr) -def initConfig(path: str) -> bool: +def initConfig(path: str = None) -> bool: if _configloaded: return True# If config already loaded, do not reload. else: - try: - file = Path(path) - - if file.exists() and not file.is_dir(): - try: - conf = yaml.load(file.read_text()) - except Exception as exc: - raise exc - else: - if not _config: - _config = conf - else: - _updateConf(conf) - if file not in _files: - _files+str(file) + _toLookIn=_makeDefaultConfs()+path + for loc in _toLookIn: + _loadConfigFile(loc) diff --git a/owo/format.py b/owo/format.py index 46ac9d7..8ab32c6 100644 --- a/owo/format.py +++ b/owo/format.py @@ -1,3 +1,7 @@ +# TODO: clean this up +# TODO: complete dateFormat() +# TODO: complete stringFormat() + _DEFAULT = { '_DATETEMP':'%a, %d %b %Y %H:%M:%S %Z%z', '_INCLUDE':[ @@ -14,7 +18,7 @@ def dateFormat(input: str = _DEFAULT._DATETEMP,use_local:bool=True) -> str: from time import gmtime return strftime(input,gmtime()) -def stringformat( +def stringFormat( input: str, include: list = _DEFAULT._INCLUDE ) -> str: diff --git a/owo/output/OutputObject.py b/owo/output/OutputObject.py index 3f36075..ca99e2e 100644 --- a/owo/output/OutputObject.py +++ b/owo/output/OutputObject.py @@ -10,15 +10,14 @@ import logging # 'errors': [] # } + class OutputObject: - def __init__(self): - self.status = 1 - import sys - self.input = { - 'argsRaw': sys.argv, - 'streamObjects': [] - } - del sys - self.output = [] - self.errors = [] + def __init__(self, type: int): + self.OOType = [ + 'HeaderTable', 'BasicInfoTable', 'AdvancedInfoTable', 'DebugInfoTable' + ][type] + if type == 0: + import sys + self.input = {'argsRaw': sys.argv, 'streamObjects': []} + del sys diff --git a/owo/output/owoOutputClass.py b/owo/output/owoOutputClass.py new file mode 100644 index 0000000..6ccbecb --- /dev/null +++ b/owo/output/owoOutputClass.py @@ -0,0 +1,10 @@ +from .OutputObject import OutputObject +class owoOutputClass: + def newObject(self,type: int): + self.objects.push(OutputObject(type)) + def __init__(self): + self.objects=[OutputObject(0)] + # def __iter__(self): + # yield [ + # self.header + # ]+self.objects \ No newline at end of file diff --git a/owo/parseargs.py b/owo/parseargs.py new file mode 100644 index 0000000..af81c9e --- /dev/null +++ b/owo/parseargs.py @@ -0,0 +1,2 @@ +def parse(): + \ No newline at end of file