Source code for botlib.compose
# botlib/compose.py
#
#
import sys
[docs]def compose(o, self=None):
from .object import Object
if not o:
return o
t = type(o)
if t in [None, bool, True, False, int, float]:
return o
if t in [str,]:
ot = from_string(o)
try:
return ot()
except:
return o
if t in [list, tuple]:
l = []
for item in o:
l.append(compose(item))
return l
try:
ts = o["_type"]
t = from_string(ts)
except KeyError:
t = Object
if not t:
return t
oo = t()
for k, v in o.items():
if k == "_type":
continue
oo[k] = compose(v)
return oo
[docs]def from_string(s):
bs = s
if s.startswith("<class"):
s = s.split()[-1][1:-2]
elif s.startswith("<function"):
funcname = s.split()[1]
try:
return globals()[funcname]
except:
return None
elif s.startswith("<module"):
s = s.split()[1]
elif "object" in s:
s = s.split()[0][1:].strip()
try:
m, c = s.rsplit(".", 1)
except:
try:
m = s.split(".")[-1]
c = ""
except:
return None
if not m:
return None
try:
mod = sys.modules[m]
except KeyError:
return None
return getattr(mod, c, None)