__init__.py
2.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import inspect
from functools import wraps
from yapf.yapflib.yapf_api import FormatCode
class ExecEnv (dict) :
_ValueClass = None
def __init__ (self, *l, **k) :
super().__init__(*l, **k)
def __setitem__ (self, key, val) :
old = self.get(key, None)
try :
old.set(val)
except :
if not isinstance(val, self._ValueClass) :
val = self._ValueClass(val)
super().__setitem__(key, val)
def __getitem__ (self, key) :
old = self.get(key, None)
try :
return old.get()
except :
return super().__getitem__(key)
def exec (self, code) :
exec(code, self)
def eval (self, code) :
return eval(code, self)
def _repr (obj) :
if inspect.isclass(obj) :
return obj.__name__
elif inspect.isfunction(obj) :
return obj.__name__
else :
return repr(obj)
class CAni (object) :
_env = ExecEnv()
@property
def IP (self) :
return self._env.get("IP", 1)
@IP.setter
def IP (self, val) :
dict.__setitem__(self._env, "IP", val)
@property
def RET (self) :
return self._env.get("RET", None)
@RET.setter
def RET (self, val) :
dict.__setitem__(self._env, "RET", val)
def exec (self, code) :
self._env.exec(code)
def eval (self, code) :
RET = self.RET = self._env.eval(code)
return RET
_init_args = (None, None)
def __repr__ (self) :
largs, kargs = self._init_args
if largs and kargs :
r = "{}({}, {})".format(self.__class__.__name__,
", ".join(_repr(l) for l in largs),
", ".join("{}={}".format(k, _repr(v))
for k, v in kargs.items()))
elif largs :
r = "{}({})".format(self.__class__.__name__,
", ".join(_repr(l) for l in largs))
elif kargs :
r = "{}({})".format(self.__class__.__name__,
", ".join("{}={}".format(k, _repr(v))
for k, v in kargs.items()))
else :
r = "{}()".format(self.__class__.__name__)
return FormatCode(r)[0]
def autorepr (method) :
@wraps(method)
def wrapper (self, *l, **k) :
self.__dict__["_init_args"] = (l, k)
return method(self, *l, **k)
return wrapper