me.fier.python/module/py/me/fier/python/__init__.py

91 lines
2.1 KiB
Python

import sys
import os
# BUNCH
try:
import munch
Bunch = munch.Munch
bunchify = munch.munchify
unbunchify = munch.unmunchify
except ModuleNotFoundError:
try:
import bunch
Bunch = munch.Bunch
bunchify = munch.bunchify
unbunchify = munch.unbunchify
except ModuleNotFoundError:
print("Error: Could not find munch/bunch module. Install munch on Python 3, bunch on Python 2.",file=sys.stderr)
sys.exit(1)
# GLOBALS
g = Bunch()
# SCRIPTS
paths = []
loaded = Bunch()
def docode(st,name = "Unknown",glb = False):
code = compile(st,name,"exec")
if glb == False: glb = Bunch()
glb[distro] = me
glb[distro + "l"] = Bunch()
glb[distro + "l"].s = name
try:
glb[distro + "l"].sd = pUp(name)
except Exception:
pass
glb[distro + "l"].g = glb
exec(code,glb)
return glb
def dofile(path,*args,**kwargs):
return docode(open(path,"rb").read(),path,*args,**kwargs)
def dorequire(name,*args,**kwargs):
name = name.replace("/",".").replace("\\",".")
for path in paths:
path = path.replace("?",name.replace(".",os.path.sep))
if os.path.isfile(path):
return dofile(path,*args,**kwargs)
raise Exception("dorequire: Library '" +name+ "' not found.")
def require(name,env=False,*args,**kwargs):
if env == False: env = loaded
if type(env) != Bunch: raise Exception("require: env is not of type " +distro+ ".Bunch")
if not name in env:
env[name] = Bunch()
env[name] = dorequire(name,*args,glb=env[name],**kwargs)
return env[name]
# PROGRAM
programName = None
programNameSet = False
def setProgramName(name):
global programName,programNameSet
if programNameSet: return
programNameSet = True
programName = name
# INIT
inited = False
def init(mod,modl,sp,d):
global inited
if inited: return
global distro,me,p,pUp,programName,programNameSet,s,sd
import sys
inited = True
distro = d
me = mod
p = os.path.join
pUp = os.path.dirname
s = sp
sd = pUp(sp)
modl.s = s
modl.sd = sd
programName = distro + "." + s.replace(modl.sd + os.path.sep,"",1).rsplit(".",1)[0]
programNameSet = False
paths.append(p(modl.sd,"module","?.py"))
paths.append(p(modl.sd,"module","?","_main.py"))