import sys import os import importlib from collections import OrderedDict def initConfigDirs(): for i in configDirs: fi = os.path.join(i,"modules") try: del sys.path[sys.path.index(fi)] except Exception: pass for i in reversed(configDirs): sys.path.insert(0,os.path.join(i,"modules")) def configFindFile(name): for i in configDirs: fi = os.path.join(i,name) if os.path.isfile(fi): yield fi def parseVariables(st): rtn = OrderedDict() st = st.replace("\r","").split("\n") for line in st: line = line.split("#",1)[0] line = line.strip(" \t") line = line.split("=",1) if len(line) < 2: continue line[0] = line[0].strip(" \t") line[1] = line[1].strip(" \t") rtn[line[0]] = line[1] return rtn def loadmod(mod): global distro return importlib.import_module(distro + "." + mod) def init(scp,dist): global mod,distro,p,s,sd,configDirs mod = {} distro = dist p = os.path.join s = scp sd = os.path.dirname(s) configDirs = [ p(os.environ.get("HOME",os.environ.get("USERPROFILE",None)),".config",distro), p(sd,"user") ] initConfigDirs() modules = {} for file in configFindFile("modules.txt"): tbl = parseVariables(open(file).read()) for i in tbl: if not i in modules: modules[i] = tbl[i] length = len(sys.argv) index = 1 while index < length: arg = sys.argv[index] if arg.startswith("--app:module"): arg = arg.split("--app:module:",1)[1].split("=",1) modules[arg[0]] = arg[1].replace("$DISTRO",distro) del sys.argv[index] length -= 1 continue index += 1 glb = globals() for module in modules: modules[module] = modules[module].replace("$DISTRO",distro) print("* Importing '" +modules[module]+ "' -> '" +module+ "' ...") mod[module] = importlib.import_module(modules[module]) for module in modules: if hasattr(mod[module],"appInit"): print("* Initializing '" +module+ "' ...") mod[module].appInit() print("* Running app.")