if self.intp.opts["logger"]: summary = ": " + str(self.get("$$doc")) args = cntx.dict arglist = ["%s=%s" % (i, cntx[i]) for i in sorted([i for i in cntx.dict.keys() if i != "block"], key=lambda x: self.argnamelist.index(x))] summary = "%s(%s)%s" % (str(self), ", ".join(arglist), summary) self.intp.opts["logger"].push(summary) self.intp.level += 1 #self.intp.stmtstack.append(self.intp.cstmt) try: c = self.intp.run(self.block) except ReturnI, e: if self.intp.opts["logger"]: self.intp.opts["logger"].pop() if e.args: a = list(e.args) if len(e.args) > 1 else e.args[0] return OrObject.from_py(a) else: return finally: if self.intp.opts["logger"]: self.intp.opts["logger"].pop(certain=False) self.intp.level -= 1 self.intp.cntx.pop() return OrObject.from_py(c) OrObject.register(Function, types.BuiltinFunctionType, types.BuiltinMethodType, types.ClassType, types.FunctionType, types.GeneratorType, types.LambdaType, types.MethodType, types.UnboundMethodType, "a".__add__.__class__) # "a".__add__.__class__ -> method-wrapper type
from orobject import OrObject class OrDict(dict, OrObject): def __init__(self, *args, **kwargs): dict.__init__(self, *args, **kwargs) OrObject.__init__(self, "[anon]", OrDict) def ispy(self): return True def topy(self): return self def __repr__(self): if len(self): return "[" + dict(self).__repr__()[1:-1] + "]" else: return "[:]" def __str__(self): if len(self): return "[" + dict(self).__str__()[1:-1] + "]" else: return "[:]" OrObject.register(OrDict, type({}))
from number import Number from orobject import OrObject inf = Number("Infinity") true = OrObject.from_py(True) false = OrObject.from_py(False) nil = OrObject.from_py(None) true.set("$$str", lambda: "true") true.set("$$repr", lambda: "true") false.set("$$str", lambda: "false") false.set("$$repr", lambda: "false") nil.set("$$str", lambda: "nil") nil.set("$$repr", lambda: "nil") OrObject.register(lambda x: true if x else false, type(True)) OrObject.register(lambda x: nil, type(None))
else: try: if not valid_f(txt): raise Exception except: self.buf.append(txt) raise IOError("Wrong input format") else: return coerce_f(txt) def write(self, *args, **kwargs): p = { "sep": " ", "end": "" } p.update(kwargs) sep = p["sep"] end = p["end"] try: self.file.write(sep.join(map(str, args))) self.file.write(str(end)) except: raise IOError("File not open in write or append mode") return self OrObject.register(File, types.FileType)
from orobject import OrObject try: from collections import OrderedDict except: from odict import OrderedDict class ODict(OrderedDict): def __init__(self, dict=[], **kwargs): if isinstance(dict, OrderedDict): dict = dict.items() OrderedDict.__init__(self, dict + kwargs.items()) def ispy(self): return True def topy(self): return self def __str__(self, fn=str): return "{%s}" % ", ".join( map(lambda x: ": ".join(map(fn, x)), self.items())) def __repr__(self): return self.__str__(repr) OrObject.register(ODict, OrderedDict)
from orobject import OrObject class OrException(OrObject, Exception): class_name = "Exception" def __init__(self, *args, **kwargs): OrObject.__init__(self, "", OrException) self.args = args self.kwargs = kwargs self.traceback = [] self.set("traceback", self.traceback) self.set("args", self.args) self.set("kwargs", self.kwargs) def __str__(self): c = self.get("$$class") c = c.class_name if hasattr(c, "class_name") else c.__name__ return "%s: %s" % (c, str(args[0])) def __repr__(self): return "<" + c + " '" + str(self.args[0]) + "'>" OrObject.register(OrException, Exception)