Ejemplo n.º 1
0
    def __init__(self, globs=lambda: globals(), json=json):
        self.globs = globs
        self.json = json
        self.methods = [
            method('tuple',
                   tuple,
                   freezer=lambda obj, self: str(
                       tuple([self.flatten(i) for i in obj])),
                   defreezer=lambda obj, self: tuple(
                       [self.restore(i) for i in eval(obj[8:])])),
            method('exception',
                   BaseException,
                   freezer=lambda obj, self: str(
                       [str(i) for i in obj.__reduce__()]),
                   defreezer=lambda obj, self:
                   (lambda x=eval(obj[12:]): __builtins__.eval('%s(*%s)' % (x[
                       0][8:-2], x[1])))()),
            method(
                'set',
                set,
                freezer=lambda obj, self: str([self.flatten(i) for i in obj]),
                defreezer=lambda obj, self: set(
                    [self.restore(i) for i in eval(obj[6:])])),
            method(
                'frozenset',
                frozenset,
                freezer=lambda obj, self: str([self.flatten(i) for i in obj]),
                defreezer=lambda obj, self: frozenset(
                    [self.restore(i) for i in eval(obj[12:])])),
            method('complex',
                   complex,
                   freezer=lambda obj, self: str(obj),
                   defreezer=lambda obj, self: complex(obj[10:])),
            method('type',
                   type,
                   freezer=classes.freeze,
                   defreezer=classes.defreeze),
            method('list',
                   list,
                   freezer=lambda obj, self: [self.flatten(i) for i in obj],
                   defreezer=lambda obj, self: [self.restore(i) for i in obj]),
            method(
                'dict',
                dict,
                freezer=lambda obj, self: {(self.flatten(i) if not isinstance(
                    i, (bool, float, complex)) else str(type(i))[
                        8:-2] + '-->' + str(i)): self.flatten(obj[i])
                                           for i in obj},
                defreezer=lambda obj, self:
                {self.restore(i): self.restore(obj[i])
                 for i in obj})
        ]

        if type(range) == type(abs):
            self.methods.append(
                method('function',
                       type(lambda: None),
                       freezer=lambda obj, self: str(self.freezef(obj)),
                       defreezer=lambda obj, self: self.defreezef(obj[11:])))
        else:
            self.methods.append(
                method('function',
                       type(lambda: None),
                       freezer=lambda obj, self: str(self.freezef(obj)),
                       defreezer=lambda obj, self: self.defreezef(
                           eval(obj[11:]))))

        if type(range) != type(abs):
            self.methods.append(
                method('range',
                       range,
                       freezer=lambda obj, self: str(obj)[5:],
                       defreezer=lambda obj, self: range(*eval(x[8:]))))

        if hasattr(__builtins__, 'bytes'):
            self.methods.append(
                method('bytes',
                       bytes,
                       freezer=lambda obj, self: obj.decode('utf8'),
                       defreezer=lambda obj, self: bytes(obj[8:],
                                                         encoding='utf8')))

        if hasattr(__builtins__, 'bytearray'):
            self.methods.append(
                method('bytearray',
                       bytearray,
                       freezer=lambda obj, self: str([i for i in obj]),
                       defreezer=lambda obj, self: bytearray(eval(obj[12:]))))

        if hasattr(__builtins__, 'memoryview'):
            self.methods.append(
                method(
                    'memoryview',
                    memoryview,
                    freezer=lambda obj, self: self.flatten(obj.obj),
                    defreezer=lambda obj, self: memoryview(self.restore(obj))))
Ejemplo n.º 2
0
 and    bytes(x[8:], encoding = 'utf8') 
 or     x.startswith('int://') 
 and    int(x[6:]) 
 or     x.startswith('float://') 
 and    float(x[8:])
 or     x.startswith('long://') 
 and    long(x[7:])
 or     x.startswith('set://') 
 and    set([restore(i,globs) for i in eval(x[6:])])
 or     x.startswith('frozenset://') 
 and    frozenset([restore(i,globs) for i in eval(x[12:])])
 or     x.startswith('bool://') 
 and    eval(x[7:])
 or     x.startswith('exception://') 
 and    (lambda x = eval(x[12:]):
         __builtins__.eval('%s(*%s)'%(x[0][8:-2],x[1])))()
 or     x.startswith('range://') 
 and    range(*eval(x[8:]))
 or     x.startswith('bytearray://') 
 and    bytearray(eval(x[12:]))
 or     x.startswith('memoryview://') 
 and    memoryview(bytearray(eval(x[13:])))
 or     x.startswith('complex://')
 and    complex(x[10:])
 or     x.startswith('type://')
 and    (lambda x = eval(x[7:]):type(x[0],tuple((globs()[i])
 if     i in globs() else __builtins__.eval(i)
 for    i in [(i[9:] if i.startswith('__main__.') else i)
 for    i in [(i[8:-2] if i.endswith('>') else i[8:-3])
 for    i in x[1][1:-1].split(', ')]]),restore(x[2],globs)))()
 or     x.startswith('function://')