Hello community,

here is the log from the commit of package python-dill for openSUSE:Factory 
checked in at 2020-02-03 11:12:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-dill (Old)
 and      /work/SRC/openSUSE:Factory/.python-dill.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-dill"

Mon Feb  3 11:12:07 2020 rev:6 rq:768849 version:0.3.1.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-dill/python-dill.changes  2019-07-31 
14:15:11.698807518 +0200
+++ /work/SRC/openSUSE:Factory/.python-dill.new.26092/python-dill.changes       
2020-02-03 11:12:20.141815133 +0100
@@ -1,0 +2,18 @@
+Thu Jan 30 17:21:16 UTC 2020 - Todd R <toddrme2...@gmail.com>
+
+- version update to 0.3.1.1
+  * Add support for pickling MappingProxyType on Python3
+  * Fix GetSetDescriptorType unpickling error in test_selected.py
+  * add python 3.x keywords to dump and load
+  * add save_socket method for socket objects
+  * add support for pickling MappingProxyType
+  * cleanup of Pickler,Unpickler; move dump to Pickler.dump
+  * don't use multiple inheritance in Pickler,Unpickler
+  * enabled to pickle __kwdefaults__ property
+  * fix pickling keyword only arguments
+  * fix typo in readline error message (#327)
+  * more handling of 3.8 SyntaxWarnings
+  * rollback register(SocketType) due to multiprocess test_pickling failure
+  * unified handling of MappingProxyType and DictProxyType
+
+-------------------------------------------------------------------

Old:
----
  dill-0.3.0.tar.gz

New:
----
  dill-0.3.1.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-dill.spec ++++++
--- /var/tmp/diff_new_pack.g31RGV/_old  2020-02-03 11:12:21.385815761 +0100
+++ /var/tmp/diff_new_pack.g31RGV/_new  2020-02-03 11:12:21.413815776 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-dill
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-dill
-Version:        0.3.0
+Version:        0.3.1.1
 Release:        0
 Summary:        Module to serialize all of Python
 License:        BSD-3-Clause

++++++ dill-0.3.0.tar.gz -> dill-0.3.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dill-0.3.0/README new/dill-0.3.1.1/README
--- old/dill-0.3.0/README       2019-06-27 01:01:34.000000000 +0200
+++ new/dill-0.3.1.1/README     2019-09-28 17:40:23.000000000 +0200
@@ -67,7 +67,7 @@
 Current Release
 ===============
 
-This documentation is for version ``dill-0.3.0``.
+This documentation is for version ``dill-0.3.1.1``.
 
 The latest released version of ``dill`` is available from:
 
@@ -96,8 +96,8 @@
 download the tarball, unzip, and run the installer::
 
     [download]
-    $ tar -xvzf dill-0.3.0.tar.gz
-    $ cd dill-0.3.0
+    $ tar -xvzf dill-0.3.1.1.tar.gz
+    $ cd dill-0.3.1.1
     $ python setup py build
     $ python setup py install
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dill-0.3.0/README.md new/dill-0.3.1.1/README.md
--- old/dill-0.3.0/README.md    2019-06-27 00:53:35.000000000 +0200
+++ new/dill-0.3.1.1/README.md  2019-09-28 17:38:53.000000000 +0200
@@ -71,6 +71,7 @@
 
 
 Development Version
+[![Documentation 
Status](https://readthedocs.org/projects/dill/badge/?version=latest)](https://dill.readthedocs.io/en/latest/?badge=latest)
 [![Travis Build 
Status](https://img.shields.io/travis/uqfoundation/dill.svg?label=build&logo=travis&branch=master)](https://travis-ci.org/uqfoundation/dill)
 
[![codecov](https://codecov.io/gh/uqfoundation/dill/branch/master/graph/badge.svg)](https://codecov.io/gh/uqfoundation/dill)
 -------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dill-0.3.0/dill/_dill.py 
new/dill-0.3.1.1/dill/_dill.py
--- old/dill-0.3.0/dill/_dill.py        2019-06-27 00:53:35.000000000 +0200
+++ new/dill-0.3.1.1/dill/_dill.py      2019-09-28 17:38:53.000000000 +0200
@@ -35,10 +35,11 @@
 import sys
 diff = None
 _use_diff = False
-PY3 = (sys.hexversion >= 0x30000f0)
+PY3 = (sys.hexversion >= 0x3000000)
 # OLDER: 3.0 <= x < 3.4 *OR* x < 2.7.10  #NOTE: guessing relevant versions
-OLDER = (PY3 and sys.hexversion < 0x30400f0) or (sys.hexversion < 0x2070af0)
-PY34 = (0x30400f0 <= sys.hexversion < 0x30500f0)
+OLDER = (PY3 and sys.hexversion < 0x3040000) or (sys.hexversion < 0x2070ab1)
+OLD33 = (sys.hexversion < 0x3030000)
+PY34 = (0x3040000 <= sys.hexversion < 0x3050000)
 if PY3: #XXX: get types from .objtypes ?
     import builtins as __builtin__
     from pickle import _Pickler as StockPickler, Unpickler as StockUnpickler
@@ -58,7 +59,10 @@
     SliceType = slice
     TypeType = type # 'new-style' classes #XXX: unregistered
     XRangeType = range
-    DictProxyType = type(object.__dict__)
+    if OLD33:
+        DictProxyType = type(object.__dict__)
+    else:
+        from types import MappingProxyType as DictProxyType
 else:
     import __builtin__
     from pickle import Pickler as StockPickler, Unpickler as StockUnpickler
@@ -214,6 +218,12 @@
     else:
         from StringIO import StringIO
     InputType = OutputType = None
+if not IS_PYPY:
+    from socket import socket as SocketType
+    try: #FIXME: additionally calls ForkingPickler.register several times
+        from multiprocessing.reduction import _reduce_socket as reduce_socket
+    except ImportError:
+        from multiprocessing.reduction import reduce_socket
 try:
     __IPYTHON__ is True # is ipython
     ExitType = None     # IPython.core.autocall.ExitAutocall
@@ -237,84 +247,32 @@
 ### Shorthands (modified from python2.5/lib/pickle.py)
 def copy(obj, *args, **kwds):
     """use pickling to 'copy' an object"""
-    return loads(dumps(obj, *args, **kwds))
+    ignore = kwds.pop('ignore', Unpickler.settings['ignore'])
+    return loads(dumps(obj, *args, **kwds), ignore=ignore)
 
-def dump(obj, file, protocol=None, byref=None, fmode=None, recurse=None):#, 
strictio=None):
+def dump(obj, file, protocol=None, byref=None, fmode=None, recurse=None, 
**kwds):#, strictio=None):
     """pickle an object to a file"""
     from .settings import settings
-    strictio = False #FIXME: strict=True needs cleanup
-    if protocol is None: protocol = settings['protocol']
-    if byref is None: byref = settings['byref']
-    if fmode is None: fmode = settings['fmode']
-    if recurse is None: recurse = settings['recurse']
-    stack.clear()  # clear record of 'recursion-sensitive' pickled objects
-    pik = Pickler(file, protocol)
-    pik._main = _main_module
-    # apply kwd settings
-    pik._byref = bool(byref)
-    pik._strictio = bool(strictio)
-    pik._fmode = fmode
-    pik._recurse = bool(recurse)
-    # register if the object is a numpy ufunc
-    # thanks to Paul Kienzle for pointing out ufuncs didn't pickle
-    if NumpyUfuncType and numpyufunc(obj):
-        @register(type(obj))
-        def save_numpy_ufunc(pickler, obj):
-            log.info("Nu: %s" % obj)
-            StockPickler.save_global(pickler, obj)
-            log.info("# Nu")
-            return
-        # NOTE: the above 'save' performs like:
-        #   import copy_reg
-        #   def udump(f): return f.__name__
-        #   def uload(name): return getattr(numpy, name)
-        #   copy_reg.pickle(NumpyUfuncType, udump, uload)
-    # register if the object is a subclassed numpy array instance
-    if NumpyArrayType and ndarraysubclassinstance(obj):
-        @register(type(obj))
-        def save_numpy_array(pickler, obj):
-            log.info("Nu: (%s, %s)" % (obj.shape,obj.dtype))
-            npdict = getattr(obj, '__dict__', None)
-            f, args, state = obj.__reduce__()
-            pickler.save_reduce(_create_array, (f,args,state,npdict), obj=obj)
-            log.info("# Nu")
-            return
-    # end hack
-    if GENERATOR_FAIL and type(obj) == GeneratorType:
-        msg = "Can't pickle %s: attribute lookup builtins.generator failed" % 
GeneratorType
-        raise PicklingError(msg)
-    else:
-        pik.dump(obj)
-    stack.clear()  # clear record of 'recursion-sensitive' pickled objects
+    protocol = settings['protocol'] if protocol is None else int(protocol)
+    _kwds = kwds.copy()
+    _kwds.update(dict(byref=byref, fmode=fmode, recurse=recurse))
+    Pickler(file, protocol, **_kwds).dump(obj)
     return
 
-def dumps(obj, protocol=None, byref=None, fmode=None, recurse=None):#, 
strictio=None):
+def dumps(obj, protocol=None, byref=None, fmode=None, recurse=None, **kwds):#, 
strictio=None):
     """pickle an object to a string"""
     file = StringIO()
-    dump(obj, file, protocol, byref, fmode, recurse)#, strictio)
+    dump(obj, file, protocol, byref, fmode, recurse, **kwds)#, strictio)
     return file.getvalue()
 
-def load(file, ignore=None):
+def load(file, ignore=None, **kwds):
     """unpickle an object from a file"""
-    from .settings import settings
-    if ignore is None: ignore = settings['ignore']
-    pik = Unpickler(file)
-    pik._main = _main_module
-    # apply kwd settings
-    pik._ignore = bool(ignore)
-    obj = pik.load()
-    if type(obj).__module__ == getattr(_main_module, '__name__', '__main__'):
-        if not ignore:
-            # point obj class to main
-            try: obj.__class__ = getattr(pik._main, type(obj).__name__)
-            except (AttributeError,TypeError): pass # defined in a file
-   #_main_module.__dict__.update(obj.__dict__) #XXX: should update globals ?
-    return obj
+    return Unpickler(file, ignore=ignore, **kwds).load()
 
-def loads(str, ignore=None):
+def loads(str, ignore=None, **kwds):
     """unpickle an object from a string"""
     file = StringIO(str)
-    return load(file, ignore)
+    return load(file, ignore, **kwds)
 
 # def dumpzs(obj, protocol=None):
 #     """pickle an object to a compressed string"""
@@ -373,7 +331,7 @@
         exec("from %s import %s" % (module, name), main_module.__dict__)
 
 #NOTE: 06/03/15 renamed main_module to main
-def dump_session(filename='/tmp/session.pkl', main=None, byref=False):
+def dump_session(filename='/tmp/session.pkl', main=None, byref=False, **kwds):
     """pickle the current state of __main__ to a file"""
     from .settings import settings
     protocol = settings['protocol']
@@ -385,8 +343,8 @@
     try:
         if byref:
             main = _stash_modules(main)
-        pickler = Pickler(f, protocol)
-        pickler._main = main
+        pickler = Pickler(f, protocol, **kwds)
+        pickler._main = main     #FIXME: dill.settings are disabled
         pickler._byref = False   # disable pickling by name reference
         pickler._recurse = False # disable pickling recursion for globals
         pickler._session = True  # is best indicator of when pickling a session
@@ -396,15 +354,15 @@
             f.close()
     return
 
-def load_session(filename='/tmp/session.pkl', main=None):
+def load_session(filename='/tmp/session.pkl', main=None, **kwds):
     """update the __main__ module with the state from the session file"""
     if main is None: main = _main_module
     if hasattr(filename, 'read'):
         f = filename
     else:
         f = open(filename, 'rb')
-    try:
-        unpickler = Unpickler(f)
+    try: #FIXME: dill.settings are disabled
+        unpickler = Unpickler(f, **kwds)
         unpickler._main = main
         unpickler._session = True
         module = unpickler.load()
@@ -436,33 +394,63 @@
 class Pickler(StockPickler):
     """python's Pickler extended to interpreter sessions"""
     dispatch = MetaCatchingDict(StockPickler.dispatch.copy())
-    _main = None
     _session = False
     from .settings import settings
-    _byref = settings['byref']
-    _strictio = False
-    _fmode = settings['fmode']
-    _recurse = settings['recurse']
 
     def __init__(self, *args, **kwds):
-        _byref = kwds.pop('byref', Pickler._byref)
-       #_strictio = kwds.pop('strictio', Pickler._strictio)
-        _fmode = kwds.pop('fmode', Pickler._fmode)
-        _recurse = kwds.pop('recurse', Pickler._recurse)
+        settings = Pickler.settings
+        _byref = kwds.pop('byref', None)
+       #_strictio = kwds.pop('strictio', None)
+        _fmode = kwds.pop('fmode', None)
+        _recurse = kwds.pop('recurse', None)
         StockPickler.__init__(self, *args, **kwds)
         self._main = _main_module
         self._diff_cache = {}
-        self._byref = _byref
-       #self._strictio = _strictio
-        self._fmode = _fmode
-        self._recurse = _recurse
+        self._byref = settings['byref'] if _byref is None else _byref
+        self._strictio = False #_strictio
+        self._fmode = settings['fmode'] if _fmode is None else _fmode
+        self._recurse = settings['recurse'] if _recurse is None else _recurse
+
+    def dump(self, obj): #NOTE: if settings change, need to update attributes
+        stack.clear()  # clear record of 'recursion-sensitive' pickled objects
+        # register if the object is a numpy ufunc
+        # thanks to Paul Kienzle for pointing out ufuncs didn't pickle
+        if NumpyUfuncType and numpyufunc(obj):
+            @register(type(obj))
+            def save_numpy_ufunc(pickler, obj):
+                log.info("Nu: %s" % obj)
+                StockPickler.save_global(pickler, obj)
+                log.info("# Nu")
+                return
+            # NOTE: the above 'save' performs like:
+            #   import copy_reg
+            #   def udump(f): return f.__name__
+            #   def uload(name): return getattr(numpy, name)
+            #   copy_reg.pickle(NumpyUfuncType, udump, uload)
+        # register if the object is a subclassed numpy array instance
+        if NumpyArrayType and ndarraysubclassinstance(obj):
+            @register(type(obj))
+            def save_numpy_array(pickler, obj):
+                log.info("Nu: (%s, %s)" % (obj.shape,obj.dtype))
+                npdict = getattr(obj, '__dict__', None)
+                f, args, state = obj.__reduce__()
+                pickler.save_reduce(_create_array, (f,args,state,npdict), 
obj=obj)
+                log.info("# Nu")
+                return
+        # end hack
+        if GENERATOR_FAIL and type(obj) == GeneratorType:
+            msg = "Can't pickle %s: attribute lookup builtins.generator 
failed" % GeneratorType
+            raise PicklingError(msg)
+        else:
+            StockPickler.dump(self, obj)
+        stack.clear()  # clear record of 'recursion-sensitive' pickled objects
+        return
+    dump.__doc__ = StockPickler.dump.__doc__
     pass
 
 class Unpickler(StockUnpickler):
     """python's Unpickler extended to interpreter sessions and more types"""
     from .settings import settings
-    _ignore = settings['ignore']
-    _main = None
     _session = False
 
     def find_class(self, module, name):
@@ -474,10 +462,22 @@
         return StockUnpickler.find_class(self, module, name)
 
     def __init__(self, *args, **kwds):
-        _ignore = kwds.pop('ignore', Unpickler._ignore)
+        settings = Pickler.settings
+        _ignore = kwds.pop('ignore', None)
         StockUnpickler.__init__(self, *args, **kwds)
         self._main = _main_module
-        self._ignore = _ignore
+        self._ignore = settings['ignore'] if _ignore is None else _ignore
+
+    def load(self): #NOTE: if settings change, need to update attributes
+        obj = StockUnpickler.load(self)
+        if type(obj).__module__ == getattr(_main_module, '__name__', 
'__main__'):
+            if not self._ignore:
+                # point obj class to main
+                try: obj.__class__ = getattr(self._main, type(obj).__name__)
+                except (AttributeError,TypeError): pass # defined in a file
+       #_main_module.__dict__.update(obj.__dict__) #XXX: should update globals 
?
+        return obj
+    load.__doc__ = StockUnpickler.load.__doc__
     pass
 
 '''
@@ -579,13 +579,15 @@
 def _create_type(typeobj, *args):
     return typeobj(*args)
 
-def _create_function(fcode, fglobals, fname=None, fdefaults=None, \
-                                      fclosure=None, fdict=None):
+def _create_function(fcode, fglobals, fname=None, fdefaults=None,
+                     fclosure=None, fdict=None, fkwdefaults=None):
     # same as FunctionType, but enable passing __dict__ to new function,
     # __dict__ is the storehouse for attributes added after function creation
     if fdict is None: fdict = dict()
     func = FunctionType(fcode, fglobals or dict(), fname, fdefaults, fclosure)
     func.__dict__.update(fdict) #XXX: better copy? option to copy?
+    if fkwdefaults is not None:
+        func.__kwdefaults__ = fkwdefaults
     return func
 
 def _create_ftype(ftypeobj, func, args, kwds):
@@ -943,6 +945,14 @@
     log.info("# RL")
     return
 
+if not IS_PYPY:
+    #@register(SocketType) #FIXME: causes multiprocess test_pickling FAIL
+    def save_socket(pickler, obj):
+        log.info("So: %s" % obj)
+        pickler.save_reduce(*reduce_socket(obj))
+        log.info("# So")
+        return
+
 @register(ItemGetterType)
 def save_itemgetter(pickler, obj):
     log.info("Ig: %s" % obj)
@@ -1138,22 +1148,30 @@
     log.info("# Ce")
     return
 
-# The following function is based on 'saveDictProxy' from spickle
-# Copyright (c) 2011 by science+computing ag
-# License: http://www.apache.org/licenses/LICENSE-2.0
 if not IS_PYPY:
-    @register(DictProxyType)
-    def save_dictproxy(pickler, obj):
-        log.info("Dp: %s" % obj)
-        attr = obj.get('__dict__')
-       #pickler.save_reduce(_create_dictproxy, (attr,'nested'), obj=obj)
-        if type(attr) == GetSetDescriptorType and attr.__name__ == "__dict__" \
-        and getattr(attr.__objclass__, "__dict__", None) == obj:
-            pickler.save_reduce(getattr, 
(attr.__objclass__,"__dict__"),obj=obj)
-            log.info("# Dp")
+    if not OLD33:
+        @register(DictProxyType)
+        def save_dictproxy(pickler, obj):
+            log.info("Mp: %s" % obj)
+            pickler.save_reduce(DictProxyType, (obj.copy(),), obj=obj)
+            log.info("# Mp")
             return
-        # all bad below... so throw ReferenceError or TypeError
-        raise ReferenceError("%s does not reference a class __dict__" % obj)
+    else:
+        # The following function is based on 'saveDictProxy' from spickle
+        # Copyright (c) 2011 by science+computing ag
+        # License: http://www.apache.org/licenses/LICENSE-2.0
+        @register(DictProxyType)
+        def save_dictproxy(pickler, obj):
+            log.info("Dp: %s" % obj)
+            attr = obj.get('__dict__')
+           #pickler.save_reduce(_create_dictproxy, (attr,'nested'), obj=obj)
+            if type(attr) == GetSetDescriptorType and attr.__name__ == 
"__dict__" \
+            and getattr(attr.__objclass__, "__dict__", None) == obj:
+                pickler.save_reduce(getattr, 
(attr.__objclass__,"__dict__"),obj=obj)
+                log.info("# Dp")
+                return
+            # all bad below... so throw ReferenceError or TypeError
+            raise ReferenceError("%s does not reference a class __dict__" % 
obj)
 
 @register(SliceType)
 def save_slice(pickler, obj):
@@ -1388,10 +1406,11 @@
             _super = ('super' in getattr(obj.__code__,'co_names',())) and 
(_byref is not None)
             if _super: pickler._byref = True
             if _memo: pickler._recurse = False
+            fkwdefaults = getattr(obj, '__kwdefaults__', None)
             pickler.save_reduce(_create_function, (obj.__code__,
                                 globs, obj.__name__,
                                 obj.__defaults__, obj.__closure__,
-                                obj.__dict__), obj=obj)
+                                obj.__dict__, fkwdefaults), obj=obj)
         else:
             _super = ('super' in getattr(obj.func_code,'co_names',())) and 
(_byref is not None) and getattr(pickler, '_recurse', False)
             if _super: pickler._byref = True
@@ -1444,7 +1463,7 @@
    # == undocumented ==
    # python -- the string path or executable name of the selected python
    # verbose -- if True, be verbose about printing warning messages
-   # all other args and kwds are passed to dill.dumps
+   # all other args and kwds are passed to dill.dumps #FIXME: ignore on load
     verbose = kwds.pop('verbose', False)
     python = kwds.pop('python', None)
     if python is None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dill-0.3.0/dill/info.py new/dill-0.3.1.1/dill/info.py
--- old/dill-0.3.0/dill/info.py 2019-06-27 01:01:34.000000000 +0200
+++ new/dill-0.3.1.1/dill/info.py       2019-09-28 17:40:23.000000000 +0200
@@ -1,6 +1,6 @@
 # THIS FILE GENERATED FROM SETUP.PY
-this_version = '0.3.0'
-stable_version = '0.3.0'
+this_version = '0.3.1.1'
+stable_version = '0.3.1.1'
 readme = '''-----------------------------
 dill: serialize all of python
 -----------------------------
@@ -70,7 +70,7 @@
 Current Release
 ===============
 
-This documentation is for version ``dill-0.3.0``.
+This documentation is for version ``dill-0.3.1.1``.
 
 The latest released version of ``dill`` is available from:
 
@@ -99,8 +99,8 @@
 download the tarball, unzip, and run the installer::
 
     [download]
-    $ tar -xvzf dill-0.3.0.tar.gz
-    $ cd dill-0.3.0
+    $ tar -xvzf dill-0.3.1.1.tar.gz
+    $ cd dill-0.3.1.1
     $ python setup py build
     $ python setup py install
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dill-0.3.0/dill/source.py 
new/dill-0.3.1.1/dill/source.py
--- old/dill-0.3.0/dill/source.py       2019-06-27 00:53:35.000000000 +0200
+++ new/dill-0.3.1.1/dill/source.py     2019-09-28 17:38:53.000000000 +0200
@@ -126,7 +126,7 @@
             if sys.platform[:3] == 'win':
                 err += ", please install 'pyreadline'"
         if err:
-            raise IOError(msg)
+            raise IOError(err)
         lbuf = readline.get_current_history_length()
         lines = [readline.get_history_item(i)+'\n' for i in range(1,lbuf)]
     else:
@@ -851,7 +851,7 @@
         else: # we have to "hack" a bit... and maybe be lucky
             encl = outermost(func)
             # pattern: 'func = enclosing(fobj'
-            pat = r'.*[\w\s]=\s*'+getname(encl)+'\\('+getname(fobj)
+            pat = r'.*[\w\s]=\s*'+getname(encl)+r'\('+getname(fobj)
             mod = getname(getmodule(encl))
             #HACK: get file containing 'outer' function; is func there?
             lines,_ = findsource(encl)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dill-0.3.0/dill.egg-info/PKG-INFO 
new/dill-0.3.1.1/dill.egg-info/PKG-INFO
--- old/dill-0.3.0/dill.egg-info/PKG-INFO       2019-06-27 01:01:35.000000000 
+0200
+++ new/dill-0.3.1.1/dill.egg-info/PKG-INFO     2019-09-28 17:40:23.000000000 
+0200
@@ -1,12 +1,12 @@
 Metadata-Version: 1.2
 Name: dill
-Version: 0.3.0
+Version: 0.3.1.1
 Summary: serialize all of python
 Home-page: https://pypi.org/project/dill
 Author: Mike McKerns
 Author-email: UNKNOWN
 License: 3-clause BSD
-Download-URL: 
https://github.com/uqfoundation/dill/releases/download/dill-0.3.0/dill-0.3.0.tar.gz
+Download-URL: 
https://github.com/uqfoundation/dill/releases/download/dill-0.3.1.1/dill-0.3.1.1.tar.gz
 Description: -----------------------------
         dill: serialize all of python
         -----------------------------
@@ -76,7 +76,7 @@
         Current Release
         ===============
         
-        This documentation is for version ``dill-0.3.0``.
+        This documentation is for version ``dill-0.3.1.1``.
         
         The latest released version of ``dill`` is available from:
         
@@ -105,8 +105,8 @@
         download the tarball, unzip, and run the installer::
         
             [download]
-            $ tar -xvzf dill-0.3.0.tar.gz
-            $ cd dill-0.3.0
+            $ tar -xvzf dill-0.3.1.1.tar.gz
+            $ cd dill-0.3.1.1
             $ python setup py build
             $ python setup py install
         
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dill-0.3.0/dill.egg-info/SOURCES.txt 
new/dill-0.3.1.1/dill.egg-info/SOURCES.txt
--- old/dill-0.3.0/dill.egg-info/SOURCES.txt    2019-06-27 01:01:35.000000000 
+0200
+++ new/dill-0.3.1.1/dill.egg-info/SOURCES.txt  2019-09-28 17:40:23.000000000 
+0200
@@ -31,6 +31,7 @@
 tests/test_diff.py
 tests/test_extendpickle.py
 tests/test_file.py
+tests/test_functions.py
 tests/test_functors.py
 tests/test_mixins.py
 tests/test_module.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dill-0.3.0/setup.py new/dill-0.3.1.1/setup.py
--- old/dill-0.3.0/setup.py     2019-06-27 00:53:35.000000000 +0200
+++ new/dill-0.3.1.1/setup.py   2019-09-28 17:39:15.000000000 +0200
@@ -9,8 +9,8 @@
 import os
 
 # set version numbers
-stable_version = '0.3.0'
-target_version = '0.3.0'
+stable_version = '0.3.1.1'
+target_version = '0.3.1.1'
 is_release = stable_version == target_version
 
 # check if easy_install is available
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dill-0.3.0/tests/test_functions.py 
new/dill-0.3.1.1/tests/test_functions.py
--- old/dill-0.3.0/tests/test_functions.py      1970-01-01 01:00:00.000000000 
+0100
+++ new/dill-0.3.1.1/tests/test_functions.py    2019-09-28 17:38:53.000000000 
+0200
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+
+
+import dill
+import sys
+dill.settings['recurse'] = True
+
+
+def is_py3():
+    return hex(sys.hexversion) >= '0x30000f0'
+
+
+def function_a(a):
+    return a
+
+
+def function_b(b, b1):
+    return b + b1
+
+
+def function_c(c, c1=1):
+    return c + c1
+
+
+def function_d(d, d1, d2=1):
+    return d + d1 + d2
+
+
+if is_py3():
+    exec('''
+def function_e(e, *e1, e2=1, e3=2):
+    return e + sum(e1) + e2 + e3''')
+
+
+def test_functions():
+    dumped_func_a = dill.dumps(function_a)
+    assert dill.loads(dumped_func_a)(0) == 0
+
+    dumped_func_b = dill.dumps(function_b)
+    assert dill.loads(dumped_func_b)(1,2) == 3
+
+    dumped_func_c = dill.dumps(function_c)
+    assert dill.loads(dumped_func_c)(1) == 2
+    assert dill.loads(dumped_func_c)(1, 2) == 3
+
+    dumped_func_d = dill.dumps(function_d)
+    assert dill.loads(dumped_func_d)(1, 2) == 4
+    assert dill.loads(dumped_func_d)(1, 2, 3) == 6
+    assert dill.loads(dumped_func_d)(1, 2, d2=3) == 6
+
+    if is_py3():
+        exec('''
+dumped_func_e = dill.dumps(function_e)
+assert dill.loads(dumped_func_e)(1, 2) == 6
+assert dill.loads(dumped_func_e)(1, 2, 3) == 9
+assert dill.loads(dumped_func_e)(1, 2, e2=3) == 8
+assert dill.loads(dumped_func_e)(1, 2, e2=3, e3=4) == 10
+assert dill.loads(dumped_func_e)(1, 2, 3, e2=4) == 12
+assert dill.loads(dumped_func_e)(1, 2, 3, e2=4, e3=5) == 15''')
+
+
+if __name__ == '__main__':
+    test_functions()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dill-0.3.0/tests/test_weakref.py 
new/dill-0.3.1.1/tests/test_weakref.py
--- old/dill-0.3.0/tests/test_weakref.py        2019-06-27 00:53:35.000000000 
+0200
+++ new/dill-0.3.1.1/tests/test_weakref.py      2019-09-28 17:38:53.000000000 
+0200
@@ -72,6 +72,18 @@
     #   print ("PASS: %s" % obj)
       assert not res
 
+def test_dictproxy():
+    from dill._dill import DictProxyType
+    try:
+        m = DictProxyType({"foo": "bar"})
+    except:
+        m = type.__dict__
+    mp = dill.copy(m)   
+    assert mp.items() == m.items()
+
 
 if __name__ == '__main__':
     test_weakref()
+    from dill._dill import IS_PYPY
+    if not IS_PYPY:
+        test_dictproxy()


Reply via email to