From 6f9ea32d08ffc2e197cca7862415bdc5aaf222cc Mon Sep 17 00:00:00 2001 From: Krateng Date: Sun, 31 Mar 2019 12:18:49 +0200 Subject: [PATCH] Updated doreah toolkit --- .doreah | 2 ++ database.py | 20 ++++++++++++++------ doreah/_internal.py | 9 +++++++++ doreah/logging.py | 9 ++++++++- doreah/persistence.py | 8 +++++++- doreah/settings.py | 41 ++++++++++++++++++++++++++++++++++++++++- doreah/timing.py | 10 +++++++++- doreah/tsv.py | 7 ++++++- server.py | 2 +- 9 files changed, 96 insertions(+), 12 deletions(-) create mode 100644 .doreah diff --git a/.doreah b/.doreah new file mode 100644 index 0000000..5a9f0ad --- /dev/null +++ b/.doreah @@ -0,0 +1,2 @@ +logging.logfolder = logs +settings.files = [ "settings/default.ini" , "settings/settings.ini" ] diff --git a/database.py b/database.py index fdc276b..0d57629 100644 --- a/database.py +++ b/database.py @@ -1,18 +1,26 @@ +# server from bottle import Bottle, route, get, post, run, template, static_file, request, response, FormsDict -from importlib.machinery import SourceFileLoader -import urllib import waitress -import os -import datetime +# rest of the project from cleanup import * from utilities import * +from malojatime import * +from htmlgenerators import KeySplit +# doreah toolkit from doreah.logging import log from doreah import tsv -from malojatime import * +# technical +import os +import datetime import sys import unicodedata import json -from htmlgenerators import KeySplit +# url handling +from importlib.machinery import SourceFileLoader +import urllib + + + dbserver = Bottle() diff --git a/doreah/_internal.py b/doreah/_internal.py index e9ae9de..51a6367 100644 --- a/doreah/_internal.py +++ b/doreah/_internal.py @@ -1,5 +1,6 @@ import os + ## decorator to set default arguments that are only evaluated at runtime def defaultarguments(defaultdict,**defaultargs): def decorator(func): #actual decorator function @@ -27,3 +28,11 @@ def gopen(filepath,mode): os.makedirs(directory, exist_ok=True) return open(filepath,mode) + + + +# reads module configuration from file +def doreahconfig(module): + from .settings import get_settings + s = get_settings(files=[".doreah"],prefix=module + ".",cut_prefix=True) + return s diff --git a/doreah/logging.py b/doreah/logging.py index 183ded0..9491026 100644 --- a/doreah/logging.py +++ b/doreah/logging.py @@ -2,7 +2,7 @@ import datetime import inspect import os -from ._internal import defaultarguments, gopen +from ._internal import defaultarguments, gopen, doreahconfig _config = {} @@ -29,6 +29,7 @@ config() + # Log entry # module allows discrimination between modules of a program. Will be prepended in console output and will determine the separate file for disk storage # defaults to actual name of the calling module or "main" for the main script @@ -100,3 +101,9 @@ def logh1(*args,**kwargs): return log(*args,**kwargs,header=1) def logh2(*args,**kwargs): return log(*args,**kwargs,header=2) + + + + +# now check local configuration file +_config.update(doreahconfig("logging")) diff --git a/doreah/persistence.py b/doreah/persistence.py index 1c10363..d0ce19b 100644 --- a/doreah/persistence.py +++ b/doreah/persistence.py @@ -1,7 +1,7 @@ import pickle import os -from ._internal import defaultarguments, gopen +from ._internal import defaultarguments, gopen, doreahconfig _config = {} @@ -15,6 +15,7 @@ def config(folder="storage"): # initial config on import, set everything to default config() + @defaultarguments(_config,folder="folder") def save(data,name,folder): @@ -38,3 +39,8 @@ def load(name,folder): fl.close() return ob + + + +# now check local configuration file +_config.update(doreahconfig("persistence")) diff --git a/doreah/settings.py b/doreah/settings.py index 5bb6f45..bce7a07 100644 --- a/doreah/settings.py +++ b/doreah/settings.py @@ -1,7 +1,7 @@ import os import shutil -from ._internal import defaultarguments +from ._internal import defaultarguments, doreahconfig _config = {} @@ -28,12 +28,43 @@ config() + def _interpret(text): if _config["onlytext"]: return text if text.lower() in ["true","yes"]: return True if text.lower() in ["false","no"]: return False if text.lower() in ["none","nan","n/a",""]: return None + if text.startswith("[") and text.endswith("]"): + list = [] + buffer = "" + string = None + stringended = False + for c in text[1:-1]: + if stringended and c != ",": pass #after a string is done, skip to the next delimiter + elif c == '"' and string is None: + string = '"' # start new string + buffer = '"' + elif c == "'" and string is None: + string = "'" # start new string + buffer = "'" + elif c == '"' and string is '"': + string = None # terminate string + stringended = True + buffer += '"' + elif c == "'" and string is "'": + string = None # terminate string + stringended = True + buffer += "'" + elif c == "," and string is None: + list.append(buffer) + buffer = "" + stringended = False + else: buffer += c + + list.append(buffer.strip()) + return [_interpret(entry) for entry in list] + if text.startswith("'") and text.endswith("'"): return text[1:-1] if text.startswith('"') and text.endswith('"'): return text[1:-1] try: @@ -184,3 +215,11 @@ def update(source="default_settings.ini",target="settings.ini"): usersettings = get_settings(files=[target],raw=True) shutil.copyfile(source,target) update_settings(target,usersettings) + + + + + + +# now check local configuration file +_config.update(doreahconfig("settings")) diff --git a/doreah/timing.py b/doreah/timing.py index 26fb862..290961d 100644 --- a/doreah/timing.py +++ b/doreah/timing.py @@ -1,6 +1,6 @@ import time -from ._internal import defaultarguments +from ._internal import defaultarguments, doreahconfig _config = {} @@ -42,3 +42,11 @@ def clock(*identifiers,lastcalls={None:None}): def clockp(name,*identifiers): time = clock(*identifiers) print(name + ": " + str(time)) + + + + + + +# now check local configuration file +_config.update(doreahconfig("timing")) diff --git a/doreah/tsv.py b/doreah/tsv.py index 739154e..ff1d1aa 100644 --- a/doreah/tsv.py +++ b/doreah/tsv.py @@ -1,6 +1,6 @@ import os -from ._internal import defaultarguments +from ._internal import defaultarguments, doreahconfig _config = {} @@ -113,3 +113,8 @@ def add_entries(filename,al,comments): line = "\t".join([str(e).replace("\t"," ") for e in a]) if comments: line = line.replace("#",r"\num") f.write(line + "\n") + + + +# now check local configuration file +_config.update(doreahconfig("tsv")) diff --git a/server.py b/server.py index acb264b..f753693 100755 --- a/server.py +++ b/server.py @@ -25,7 +25,7 @@ from urllib.error import * -settings.config(files=["settings/default.ini","settings/settings.ini"]) +#settings.config(files=["settings/default.ini","settings/settings.ini"]) #settings.update("settings/default.ini","settings/settings.ini") MAIN_PORT, DATABASE_PORT = settings.get_settings("WEB_PORT","API_PORT")