Exemplo n.º 1
0
 def save_global(self, obj, name=None, **kwargs):
     module = getattr(obj, '__module__', None)
     if module == '__main__':
         warnings.warn(
             MAIN_MODULE_WARNING.format(kwargs.get('name', obj.__name__))
         )
     _Pickler.save_global(self, obj, name=name, **kwargs)
Exemplo n.º 2
0
def save_function(pickler, obj):
    if not _locate_function(obj): #, pickler._session):
        log.info("F1: %s" % obj)
        if getattr(pickler, '_recurse', False):
            # recurse to get all globals referred to by obj
            from .detect import globalvars
            globs = globalvars(obj, recurse=True, builtin=True)
            # remove objects that have already been serialized
           #stacktypes = (ClassType, TypeType, FunctionType)
           #for key,value in list(globs.items()):
           #    if isinstance(value, stacktypes) and value in stack:
           #        del globs[key]
            # ABORT: if self-references, use _recurse=False
            if obj in globs.values(): # or obj in stack:
                globs = obj.__globals__ if PY3 else obj.func_globals
        else:
            globs = obj.__globals__ if PY3 else obj.func_globals
       #stack.add(obj)
        if PY3:
            pickler.save_reduce(_create_function, (obj.__code__,
                                globs, obj.__name__,
                                obj.__defaults__, obj.__closure__,
                                obj.__dict__), obj=obj)
        else:
            pickler.save_reduce(_create_function, (obj.func_code,
                                globs, obj.func_name,
                                obj.func_defaults, obj.func_closure,
                                obj.__dict__), obj=obj)
        log.info("# F1")
    else:
        log.info("F2: %s" % obj)
        StockPickler.save_global(pickler, obj) #NOTE: also takes name=...
        log.info("# F2")
    return
Exemplo n.º 3
0
def save_function(pickler, obj):
    if not _locate_function(obj): #, pickler._session):
        log.info("F1: %s" % obj)
        if getattr(pickler, '_recurse', False):
            # recurse to get all globals referred to by obj
            from .detect import globalvars
            globs = globalvars(obj, recurse=True, builtin=True)
            if obj in globs.values(): #ABORT: use _recurse=False
                globs = obj.__globals__ if PY3 else obj.func_globals
        else:
            globs = obj.__globals__ if PY3 else obj.func_globals
        if PY3:
            pickler.save_reduce(_create_function, (obj.__code__,
                                globs, obj.__name__,
                                obj.__defaults__, obj.__closure__,
                                obj.__dict__), obj=obj)
        else:
            pickler.save_reduce(_create_function, (obj.func_code,
                                globs, obj.func_name,
                                obj.func_defaults, obj.func_closure,
                                obj.__dict__), obj=obj)
    else:
        log.info("F2: %s" % obj)
        StockPickler.save_global(pickler, obj) #NOTE: also takes name=...
    return
Exemplo n.º 4
0
 def save_global(self, obj, name=None, **kwargs):
     module = getattr(obj, '__module__', None)
     if module == '__main__':
         warnings.warn(
             MAIN_MODULE_WARNING.format(kwargs.get('name', obj.__name__))
         )
     _Pickler.save_global(self, obj, name=name, **kwargs)
Exemplo n.º 5
0
Arquivo: dill.py Projeto: mindw/dill
def save_function(pickler, obj):
    if not _locate_function(obj):  #, pickler._session):
        log.info("F1: %s" % obj)
        if getattr(pickler, '_recurse', False):
            # recurse to get all globals referred to by obj
            from .detect import globalvars
            globs = globalvars(obj, recurse=True)
        else:
            globs = obj.__globals__ if PY3 else obj.func_globals
        if PY3:
            pickler.save_reduce(
                _create_function,
                (obj.__code__, globs, obj.__name__, obj.__defaults__,
                 obj.__closure__, obj.__dict__),
                obj=obj)
        else:
            pickler.save_reduce(
                _create_function,
                (obj.func_code, globs, obj.func_name, obj.func_defaults,
                 obj.func_closure, obj.__dict__),
                obj=obj)
    else:
        log.info("F2: %s" % obj)
        StockPickler.save_global(pickler, obj)  #NOTE: also takes name=...
    return
Exemplo n.º 6
0
Arquivo: dill.py Projeto: brstrat/dill
def save_function(pickler, obj):
    if not _locate_function(obj): #, pickler._session):
        log.info("F1: %s" % obj)
        if getattr(pickler, '_recurse', False):
            # recurse to get all globals referred to by obj
            from .detect import globalvars
            globs = globalvars(obj, recurse=True, builtin=True)
            # remove objects that have already been serialized
           #stacktypes = (ClassType, TypeType, FunctionType)
           #for key,value in list(globs.items()):
           #    if isinstance(value, stacktypes) and value in stack:
           #        del globs[key]
            # ABORT: if self-references, use _recurse=False
            if obj in globs.values(): # or obj in stack:
                globs = obj.__globals__ if PY3 else obj.func_globals
        else:
            globs = obj.__globals__ if PY3 else obj.func_globals
       #stack.add(obj)
        if PY3:
            pickler.save_reduce(_create_function, (obj.__code__,
                                globs, obj.__name__,
                                obj.__defaults__, obj.__closure__,
                                obj.__dict__), obj=obj)
        else:
            pickler.save_reduce(_create_function, (obj.func_code,
                                globs, obj.func_name,
                                obj.func_defaults, obj.func_closure,
                                obj.__dict__), obj=obj)
        log.info("# F1")
    else:
        log.info("F2: %s" % obj)
        StockPickler.save_global(pickler, obj) #NOTE: also takes name=...
        log.info("# F2")
    return
Exemplo n.º 7
0
def save_builtin_method(pickler, obj):
    if obj.__self__ is not None:
        log.info("B1: %s" % obj)
        pickler.save_reduce(_get_attr, (obj.__self__, obj.__name__), obj=obj)
    else:
        log.info("B2: %s" % obj)
        StockPickler.save_global(pickler, obj)
    return
Exemplo n.º 8
0
def save_classobj(pickler, obj):
    if obj.__module__ == '__main__': #XXX: use _main_module.__name__ everywhere?
        log.info("C1: %s" % obj)
        pickler.save_reduce(ClassType, (obj.__name__, obj.__bases__,
                                        obj.__dict__), obj=obj)
                                       #XXX: or obj.__dict__.copy()), obj=obj) ?
    else:
        log.info("C2: %s" % obj)
        StockPickler.save_global(pickler, obj)
    return
Exemplo n.º 9
0
def save_type(pickler, obj):
   #stack.add(obj) #XXX: probably don't need object from all cases below
    if obj in _typemap:
        log.info("T1: %s" % obj)
        pickler.save_reduce(_load_type, (_typemap[obj],), obj=obj)
        log.info("# T1")
    elif issubclass(obj, tuple) and all([hasattr(obj, attr) for attr in ('_fields','_asdict','_make','_replace')]):
        # special case: namedtuples
        log.info("T6: %s" % obj)
        pickler.save_reduce(_create_namedtuple, (getattr(obj, "__qualname__", obj.__name__), obj._fields, obj.__module__), obj=obj)
        log.info("# T6")
        return
    elif obj.__module__ == '__main__':
        if issubclass(type(obj), type):
        #   try: # used when pickling the class as code (or the interpreter)
            if is_dill(pickler) and not pickler._byref:
                # thanks to Tom Stepleton pointing out pickler._session unneeded
                _t = 'T2'
                log.info("%s: %s" % (_t, obj))
                _dict = _dict_from_dictproxy(obj.__dict__)
        #   except: # punt to StockPickler (pickle by class reference)
            else:
                log.info("T5: %s" % obj)
                StockPickler.save_global(pickler, obj)
                log.info("# T5")
                return
        else:
            _t = 'T3'
            log.info("%s: %s" % (_t, obj))
            _dict = obj.__dict__
       #print (_dict)
       #print ("%s\n%s" % (type(obj), obj.__name__))
       #print ("%s\n%s" % (obj.__bases__, obj.__dict__))
        for name in _dict.get("__slots__", []):
            del _dict[name]
        pickler.save_reduce(_create_type, (type(obj), obj.__name__,
                                           obj.__bases__, _dict), obj=obj)
        log.info("# %s" % _t)
    # special cases: NoneType
    elif obj is type(None):
        log.info("T7: %s" % obj)
        if PY3:
            pickler.write(bytes('c__builtin__\nNoneType\n', 'UTF-8'))
        else:
            pickler.write('c__builtin__\nNoneType\n')
        log.info("# T7")
    else:
        log.info("T4: %s" % obj)
       #print (obj.__dict__)
       #print ("%s\n%s" % (type(obj), obj.__name__))
       #print ("%s\n%s" % (obj.__bases__, obj.__dict__))
        StockPickler.save_global(pickler, obj)
        log.info("# T4")
    return
Exemplo n.º 10
0
def save_classobj(pickler, obj):  # FIXME: enable pickler._byref
    # stack.add(obj)
    if obj.__module__ == "__main__":  # XXX: use _main_module.__name__ everywhere?
        log.info("C1: %s" % obj)
        pickler.save_reduce(ClassType, (obj.__name__, obj.__bases__, obj.__dict__), obj=obj)
        # XXX: or obj.__dict__.copy()), obj=obj) ?
        log.info("# C1")
    else:
        log.info("C2: %s" % obj)
        StockPickler.save_global(pickler, obj)
        log.info("# C2")
    return
Exemplo n.º 11
0
def save_classobj(pickler, obj): #FIXME: enable pickler._byref
   #stack.add(obj)
    if obj.__module__ == '__main__': #XXX: use _main_module.__name__ everywhere?
        log.info("C1: %s" % obj)
        pickler.save_reduce(ClassType, (obj.__name__, obj.__bases__,
                                        obj.__dict__), obj=obj)
                                       #XXX: or obj.__dict__.copy()), obj=obj) ?
        log.info("# C1")
    else:
        log.info("C2: %s" % obj)
        StockPickler.save_global(pickler, obj)
        log.info("# C2")
    return
Exemplo n.º 12
0
def save_type(pickler, obj):
    #stack.add(obj) #XXX: probably don't need object from all cases below
    if obj in _builtin_typemap:
        StockPickler.save_global(pickler, obj)
    elif obj in _typemap:
        log.info("T1: %s" % obj)
        pickler.save_reduce(_load_type, (_typemap[obj], ), obj=obj)
        log.info("# T1")
    elif obj.__module__ == '__main__':
        try:  # use StockPickler for special cases [namedtuple,]
            [
                getattr(obj, attr)
                for attr in ('_fields', '_asdict', '_make', '_replace')
            ]
            log.info("T6: %s" % obj)
            StockPickler.save_global(pickler, obj)
            log.info("# T6")
            return
        except AttributeError:
            pass
        if issubclass(type(obj), type):
            #   try: # used when pickling the class as code (or the interpreter)
            if is_dill(pickler) and not pickler._byref:
                # thanks to Tom Stepleton pointing out pickler._session unneeded
                _t = 'T2'
                log.info("%s: %s" % (_t, obj))
                _dict = _dict_from_dictproxy(obj.__dict__)
        #   except: # punt to StockPickler (pickle by class reference)
            else:
                log.info("T5: %s" % obj)
                StockPickler.save_global(pickler, obj)
                log.info("# T5")
                return
        else:
            _t = 'T3'
            log.info("%s: %s" % (_t, obj))
            _dict = obj.__dict__
    #print (_dict)
    #print ("%s\n%s" % (type(obj), obj.__name__))
    #print ("%s\n%s" % (obj.__bases__, obj.__dict__))
        pickler.save_reduce(_create_type,
                            (type(obj), obj.__name__, obj.__bases__, _dict),
                            obj=obj)
        log.info("# %s" % _t)
    # special cases: NoneType
    elif obj is type(None):
        log.info("T7: %s" % obj)
        if PY3:
            pickler.write(bytes('c__builtin__\nNoneType\n', 'UTF-8'))
        else:
            pickler.write('c__builtin__\nNoneType\n')
        log.info("# T7")
    else:
        log.info("T4: %s" % obj)
        #print (obj.__dict__)
        #print ("%s\n%s" % (type(obj), obj.__name__))
        #print ("%s\n%s" % (obj.__bases__, obj.__dict__))
        StockPickler.save_global(pickler, obj)
        log.info("# T4")
    return
Exemplo n.º 13
0
Arquivo: dill.py Projeto: numpand/dill
def save_function(pickler, obj):
    if not _locate_function(obj): #, pickler._session):
        log.info("F1: %s" % obj)
        if PYTHON3:
            pickler.save_reduce(FunctionType, (obj.__code__, obj.__globals__,
                                               obj.__name__, obj.__defaults__,
                                               obj.__closure__), obj=obj)
        else:
            pickler.save_reduce(FunctionType, (obj.func_code, obj.func_globals,
                                               obj.func_name, obj.func_defaults,
                                               obj.func_closure), obj=obj)
    else:
        log.info("F2: %s" % obj)
        StockPickler.save_global(pickler, obj)
    return
Exemplo n.º 14
0
def save_builtin_method(pickler, obj):
    if obj.__self__ is not None:
        if obj.__self__ is __builtin__:
            module = 'builtins' if PY3 else '__builtin__'
            log.info("B1: %s" % obj)
        else:
            module = obj.__self__
            log.info("B3: %s" % obj)
        _recurse = pickler._recurse
        pickler._recurse = False
        pickler.save_reduce(_get_attr, (module, obj.__name__), obj=obj)
        pickler._recurse = _recurse
    else:
        log.info("B2: %s" % obj)
        StockPickler.save_global(pickler, obj)
    return
Exemplo n.º 15
0
def save_builtin_method(pickler, obj):
    if obj.__self__ is not None:
        if obj.__self__ is __builtin__:
            module = 'builtins' if PY3 else '__builtin__'
            log.info("B1: %s" % obj)
        else:
            module = obj.__self__
            log.info("B3: %s" % obj)
        _recurse = pickler._recurse
        pickler._recurse = False
        pickler.save_reduce(_get_attr, (module, obj.__name__), obj=obj)
        pickler._recurse = _recurse
    else:
        log.info("B2: %s" % obj)
        StockPickler.save_global(pickler, obj)
    return
Exemplo n.º 16
0
def save_function(pickler, obj):
    if not _locate_function(obj): #, pickler._session):
        log.info("F1: %s" % obj)
        if PY3:
            pickler.save_reduce(_create_function, (obj.__code__, 
                                obj.__globals__, obj.__name__,
                                obj.__defaults__, obj.__closure__,
                                obj.__dict__), obj=obj)
        else:
            pickler.save_reduce(_create_function, (obj.func_code,
                                obj.func_globals, obj.func_name,
                                obj.func_defaults, obj.func_closure,
                                obj.__dict__), obj=obj)
    else:
        log.info("F2: %s" % obj)
        StockPickler.save_global(pickler, obj) #NOTE: also takes name=...
    return
Exemplo n.º 17
0
def save_type(pickler, obj):
    # stack.add(obj) #XXX: probably don't need object from all cases below
    if obj in _builtin_typemap:
        StockPickler.save_global(pickler, obj)
    elif obj in _typemap:
        log.info("T1: %s" % obj)
        pickler.save_reduce(_load_type, (_typemap[obj],), obj=obj)
        log.info("# T1")
    elif obj.__module__ == "__main__":
        try:  # use StockPickler for special cases [namedtuple,]
            [getattr(obj, attr) for attr in ("_fields", "_asdict", "_make", "_replace")]
            log.info("T6: %s" % obj)
            StockPickler.save_global(pickler, obj)
            log.info("# T6")
            return
        except AttributeError:
            pass
        if issubclass(type(obj), type):
            #   try: # used when pickling the class as code (or the interpreter)
            if is_dill(pickler) and not pickler._byref:
                # thanks to Tom Stepleton pointing out pickler._session unneeded
                _t = "T2"
                log.info("%s: %s" % (_t, obj))
                _dict = _dict_from_dictproxy(obj.__dict__)
            #   except: # punt to StockPickler (pickle by class reference)
            else:
                log.info("T5: %s" % obj)
                StockPickler.save_global(pickler, obj)
                log.info("# T5")
                return
        else:
            _t = "T3"
            log.info("%s: %s" % (_t, obj))
            _dict = obj.__dict__
        # print (_dict)
        # print ("%s\n%s" % (type(obj), obj.__name__))
        # print ("%s\n%s" % (obj.__bases__, obj.__dict__))
        pickler.save_reduce(_create_type, (type(obj), obj.__name__, obj.__bases__, _dict), obj=obj)
        log.info("# %s" % _t)
    # special cases: NoneType
    elif obj is type(None):
        log.info("T7: %s" % obj)
        if PY3:
            pickler.write(bytes("c__builtin__\nNoneType\n", "UTF-8"))
        else:
            pickler.write("c__builtin__\nNoneType\n")
        log.info("# T7")
    else:
        log.info("T4: %s" % obj)
        # print (obj.__dict__)
        # print ("%s\n%s" % (type(obj), obj.__name__))
        # print ("%s\n%s" % (obj.__bases__, obj.__dict__))
        StockPickler.save_global(pickler, obj)
        log.info("# T4")
    return
Exemplo n.º 18
0
Arquivo: dill.py Projeto: Futrell/dill
def save_builtin_method(pickler, obj):
    if obj.__self__ is not None:
        if obj.__self__ is __builtin__:
            module = 'builtins' if PY3 else '__builtin__'
            _t = "B1"
            log.info("%s: %s" % (_t, obj))
        else:
            module = obj.__self__
            _t = "B3"
            log.info("%s: %s" % (_t, obj))
        _recurse = pickler._recurse
        pickler._recurse = False
        pickler.save_reduce(_get_attr, (module, obj.__name__), obj=obj)
        pickler._recurse = _recurse
        log.info("# %s" % _t)
    else:
        log.info("B2: %s" % obj)
        StockPickler.save_global(pickler, obj)
        log.info("# B2")
    return
Exemplo n.º 19
0
Arquivo: dill.py Projeto: wxiang7/dill
def save_function(pickler, obj):
    if not _locate_function(obj, pickler):
        log.info("F1: %s" % obj)
        globs = get_function_globals(obj)
        mod_name = obj.__module__

        pickler.save_reduce(_create_function, (get_function_code(obj),
                                               {},
                                               obj.__name__,
                                               get_function_defaults(obj),
                                               get_function_closure(obj),
                                               obj.__dict__,
                                               mod_name), obj=obj, func_globals=globs)

        log.info("# F1 %s" % obj)
    else:
        log.info("F2: %s" % obj)
        StockPickler.save_global(pickler, obj)
        log.info("# F2 %s" % obj)
    return
Exemplo n.º 20
0
Arquivo: dill.py Projeto: wxiang7/dill
def save_classobj(pickler, obj):
    if obj.__module__ == '__main__':
        log.info("C1: %s" % obj)
        pickler.save_reduce(ClassType, (obj.__name__, obj.__bases__,
                                        obj.__dict__), obj=obj)
        log.info("# C1")
    elif obj.__module__ in sys.modules and _from_ship_path(sys.modules[obj.__module__].__file__, pickler.ship_path):
        log.info("C3: %s" % obj)
        class_dict = obj.__dict__
        class_funcs = dict([(k, v) for k, v in iteritems(class_dict) \
                            if isinstance(v, FunctionType) or isinstance(v, classmethod) or isinstance(v, staticmethod)])
        class_non_funcs = dict([(k, v) for k, v in iteritems(class_dict) \
                                if not (isinstance(v, FunctionType) or isinstance(v, classmethod) or isinstance(v, staticmethod))])
        pickler.save_reduce(ClassType, (obj.__name__, obj.__bases__,
                                        class_non_funcs), obj=obj, class_dict=class_funcs)
        log.info("# C3")
    else:
        log.info("C2: %s" % obj)
        StockPickler.save_global(pickler, obj)
        log.info("# C2")
    return
Exemplo n.º 21
0
    def save_function(self, obj, name=None):
        """ Registered with the dispatch to handle all function types.

        Determines what kind of function obj is (e.g. lambda, defined at
        interactive prompt, etc) and handles the pickling appropriately.
        """
        if _is_importable_by_name(obj, name=name):
            return Pickler.save_global(self, obj, name=name)
        elif PYPY and isinstance(obj.__code__, builtin_code_type):
            return self.save_pypy_builtin_func(obj)
        else:
            return self.save_function_tuple(obj)
Exemplo n.º 22
0
def save_builtin_method(pickler, obj):
    if obj.__self__ is not None:
        if obj.__self__ is __builtin__:
            module = 'builtins' if PY3 else '__builtin__'
            _t = "B1"
            log.info("%s: %s" % (_t, obj))
        else:
            module = obj.__self__
            _t = "B3"
            log.info("%s: %s" % (_t, obj))
        if is_dill(pickler):
            _recurse = pickler._recurse
            pickler._recurse = False
        pickler.save_reduce(_get_attr, (module, obj.__name__), obj=obj)
        if is_dill(pickler):
            pickler._recurse = _recurse
        log.info("# %s" % _t)
    else:
        log.info("B2: %s" % obj)
        StockPickler.save_global(pickler, obj)
        log.info("# B2")
    return
Exemplo n.º 23
0
    def save_global(self, obj, name=None, pack=struct.pack):
        """
        Save a "global".

        The name of this method is somewhat misleading: all types get
        dispatched here.
        """
        if obj is type(None):
            return self.save_reduce(type, (None, ), obj=obj)
        elif obj is type(Ellipsis):
            return self.save_reduce(type, (Ellipsis, ), obj=obj)
        elif obj is type(NotImplemented):
            return self.save_reduce(type, (NotImplemented, ), obj=obj)
        elif obj in _BUILTIN_TYPE_NAMES:
            return self.save_reduce(_builtin_type,
                                    (_BUILTIN_TYPE_NAMES[obj], ),
                                    obj=obj)
        elif name is not None:
            Pickler.save_global(self, obj, name=name)
        elif not _is_importable_by_name(obj, name=name):
            self.save_dynamic_class(obj)
        else:
            Pickler.save_global(self, obj, name=name)
Exemplo n.º 24
0
Arquivo: dill.py Projeto: Futrell/dill
def save_type(pickler, obj):
   #stack.add(obj) #XXX: probably don't need object from all cases below
    if obj in _typemap:
        log.info("T1: %s" % obj)
        pickler.save_reduce(_load_type, (_typemap[obj],), obj=obj)
        log.info("# T1")
    elif obj.__module__ == '__main__':
        try: # use StockPickler for special cases [namedtuple,]
            [getattr(obj, attr) for attr in ('_fields','_asdict',
                                             '_make','_replace')]
            log.info("T6: %s" % obj)
            StockPickler.save_global(pickler, obj)
            log.info("# T6")
            return
        except AttributeError: pass
        if issubclass(type(obj), type):
        #   try: # used when pickling the class as code (or the interpreter)
            if is_dill(pickler) and not pickler._byref:
                # thanks to Tom Stepleton pointing out pickler._session unneeded
                _t = 'T2'
                log.info("%s: %s" % (_t, obj))
                _dict = _dict_from_dictproxy(obj.__dict__)
        #   except: # punt to StockPickler (pickle by class reference)
            else:
                log.info("T5: %s" % obj)
                StockPickler.save_global(pickler, obj)
                log.info("# T5")
                return
        else:
            _t = 'T3'
            log.info("%s: %s" % (_t, obj))
            _dict = obj.__dict__
       #print (_dict)
       #print ("%s\n%s" % (type(obj), obj.__name__))
       #print ("%s\n%s" % (obj.__bases__, obj.__dict__))
        pickler.save_reduce(_create_type, (type(obj), obj.__name__,
                                           obj.__bases__, _dict), obj=obj)
        log.info("# %s" % _t)
    else:
        log.info("T4: %s" % obj)
       #print (obj.__dict__)
       #print ("%s\n%s" % (type(obj), obj.__name__))
       #print ("%s\n%s" % (obj.__bases__, obj.__dict__))
        StockPickler.save_global(pickler, obj)
        log.info("# T4")
    return
Exemplo n.º 25
0
Arquivo: dill.py Projeto: wxiang7/dill
def save_type(pickler, obj):
    if obj in _type_map:
        log.info("T1: %s" % obj)
        pickler.save_reduce(_load_type, (_type_map[obj],), obj=obj)
        log.info("# T1")
    elif obj.__module__ == '__main__':
        try:  # use StockPickler for special cases [namedtuple,]
            [getattr(obj, attr) for attr in ('_fields', '_asdict',
                                             '_make', '_replace')]
            log.info("T6: %s" % obj)
            StockPickler.save_global(pickler, obj)
            log.info("# T6")
            return
        except AttributeError:
            pass
        if issubclass(type(obj), type):
            #   try: # used when pickling the class as code (or the interpreter)
            if is_dill(pickler) and not pickler._byref:
                # thanks to Tom Stepleton pointing out pickler._session unneeded
                _t = 'T2'
                log.info("%s: %s" % (_t, obj))
                _dict = _dict_from_dictproxy(obj.__dict__)
            else:
                log.info("T5: %s" % obj)
                StockPickler.save_global(pickler, obj)
                log.info("# T5")
                return
        else:
            _t = 'T3'
            log.info("%s: %s" % (_t, obj))
            _dict = obj.__dict__
        pickler.save_reduce(_create_type, (type(obj), obj.__name__,
                                           obj.__bases__, _dict), obj=obj)
        log.info("# %s" % _t)
    # special cases: NoneType
    elif isinstance(obj, type(None)):
        log.info("T7: %s" % obj)
        pickler.write_lines('c__builtin__\nNoneType\n')
        log.info("# T7")
    else:
        log.info("T4: %s" % obj)
        StockPickler.save_global(pickler, obj)
        log.info("# T4")
    return
Exemplo n.º 26
0
def save_type(pickler, obj):
    if obj in _typemap:
        log.info("T1: %s" % obj)
        pickler.save_reduce(_load_type, (_typemap[obj], ), obj=obj)
    elif obj.__module__ == '__main__':
        try:  # use StockPickler for special cases [namedtuple,]
            [
                getattr(obj, attr)
                for attr in ('_fields', '_asdict', '_make', '_replace')
            ]
            log.info("T6: %s" % obj)
            StockPickler.save_global(pickler, obj)
            return
        except AttributeError:
            pass
        if issubclass(type(obj), type):
            #   try: # used when pickling the class as code (or the interpreter)
            if is_dill(pickler) and not pickler._byref:
                # thanks to Tom Stepleton pointing out pickler._session unneeded
                log.info("T2: %s" % obj)
                _dict = _dict_from_dictproxy(obj.__dict__)
        #   except: # punt to StockPickler (pickle by class reference)
            else:
                log.info("T5: %s" % obj)
                StockPickler.save_global(pickler, obj)
                return
        else:
            log.info("T3: %s" % obj)
            _dict = obj.__dict__
    #print (_dict)
    #print ("%s\n%s" % (type(obj), obj.__name__))
    #print ("%s\n%s" % (obj.__bases__, obj.__dict__))
        pickler.save_reduce(_create_type,
                            (type(obj), obj.__name__, obj.__bases__, _dict),
                            obj=obj)
    else:
        log.info("T4: %s" % obj)
        #print (obj.__dict__)
        #print ("%s\n%s" % (type(obj), obj.__name__))
        #print ("%s\n%s" % (obj.__bases__, obj.__dict__))
        StockPickler.save_global(pickler, obj)
    return
Exemplo n.º 27
0
def save_type(pickler, obj):
    if obj in _typemap:
        log.info("T1: %s" % obj)
        pickler.save_reduce(_load_type, (_typemap[obj],), obj=obj)
    elif obj.__module__ == '__main__':
        try: # use StockPickler for special cases [namedtuple,]
            [getattr(obj, attr) for attr in ('_fields','_asdict',
                                             '_make','_replace')]
            log.info("T6: %s" % obj)
            StockPickler.save_global(pickler, obj)
            return
        except AttributeError: pass
        if type(obj) == type:
        #   try: # used when pickling the class as code (or the interpreter)
            if is_dill(pickler) and not pickler._byref:
                # thanks to Tom Stepleton pointing out pickler._session unneeded
                log.info("T2: %s" % obj)
                _dict = _dict_from_dictproxy(obj.__dict__)
        #   except: # punt to StockPickler (pickle by class reference)
            else:
                log.info("T5: %s" % obj)
                StockPickler.save_global(pickler, obj)
                return
        else:
            log.info("T3: %s" % obj)
            _dict = obj.__dict__
       #print (_dict)
       #print ("%s\n%s" % (type(obj), obj.__name__))
       #print ("%s\n%s" % (obj.__bases__, obj.__dict__))
        pickler.save_reduce(_create_type, (type(obj), obj.__name__,
                                           obj.__bases__, _dict), obj=obj)
    else:
        log.info("T4: %s" % obj)
       #print (obj.__dict__)
       #print ("%s\n%s" % (type(obj), obj.__name__))
       #print ("%s\n%s" % (obj.__bases__, obj.__dict__))
        StockPickler.save_global(pickler, obj)
    return
Exemplo n.º 28
0
Arquivo: dill.py Projeto: brstrat/dill
 def save_numpy_ufunc(pickler, obj):
     log.info("Nu: %s" % obj)
     StockPickler.save_global(pickler, obj)
     log.info("# Nu")
     return
Exemplo n.º 29
0
 def save_numpy_ufunc(pickler, obj):
     log.info("Nu: %s" % obj)
     StockPickler.save_global(pickler, obj)
     return