Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-funcy for openSUSE:Factory 
checked in at 2022-09-29 18:13:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-funcy (Old)
 and      /work/SRC/openSUSE:Factory/.python-funcy.new.2275 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-funcy"

Thu Sep 29 18:13:51 2022 rev:9 rq:1006874 version:1.17

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-funcy/python-funcy.changes        
2021-09-06 15:58:25.905289643 +0200
+++ /work/SRC/openSUSE:Factory/.python-funcy.new.2275/python-funcy.changes      
2022-09-29 18:14:53.115434575 +0200
@@ -1,0 +2,12 @@
+Wed Sep 28 19:41:40 UTC 2022 - Yogalakshmi Arunachalam <yarunacha...@suse.com>
+
+- Update to 1.17
+  - added del_in()
+  - made throttle() and limit_error_rate() work on methods
+  - added str and repr to Call objects
+  - migrated CI to Github actions (thx to Bruno Alla)
+  - fixed doc[string] for zip_dicts (Tal Einat)
+  - fixed some inspect issues
+  - minor doc fixes 
+
+-------------------------------------------------------------------

Old:
----
  funcy-1.16.tar.gz

New:
----
  funcy-1.17.tar.gz

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

Other differences:
------------------
++++++ python-funcy.spec ++++++
--- /var/tmp/diff_new_pack.o0YC0p/_old  2022-09-29 18:14:53.635435594 +0200
+++ /var/tmp/diff_new_pack.o0YC0p/_new  2022-09-29 18:14:53.639435602 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-funcy
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 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-funcy
-Version:        1.16
+Version:        1.17
 Release:        0
 Summary:        Functional tools for Python
 License:        BSD-3-Clause

++++++ funcy-1.16.tar.gz -> funcy-1.17.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/CHANGELOG new/funcy-1.17/CHANGELOG
--- old/funcy-1.16/CHANGELOG    2021-05-10 07:38:06.000000000 +0200
+++ new/funcy-1.17/CHANGELOG    2021-12-20 06:20:43.000000000 +0100
@@ -1,3 +1,12 @@
+1.17
+- added del_in()
+- made throttle() and limit_error_rate() work on methods
+- added str and repr to Call objects
+- migrated CI to Github actions (thx to Bruno Alla)
+- fixed doc[string] for zip_dicts (Tal Einat)
+- fixed some inspect issues
+- minor doc fixes
+
 1.16
 - support Python 3.9 officially
 - unify @memoize() and @cache(): both have 
.skip/.memory/.invalidate/.invalidate_all now
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/PKG-INFO new/funcy-1.17/PKG-INFO
--- old/funcy-1.16/PKG-INFO     2021-05-10 09:17:36.870961700 +0200
+++ new/funcy-1.17/PKG-INFO     2021-12-20 06:33:10.963257800 +0100
@@ -1,211 +1,11 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
 Name: funcy
-Version: 1.16
+Version: 1.17
 Summary: A fancy and practical functional tools
 Home-page: http://github.com/Suor/funcy
 Author: Alexander Schepanovski
 Author-email: suor....@gmail.com
 License: BSD
-Description: Funcy  
-        =====
-        
-        |Gitter|
-        
-        A collection of fancy functional tools focused on practicality.
-        
-        Inspired by clojure, underscore and my own abstractions. Keep reading 
to get an overview
-        or `read the docs <http://funcy.readthedocs.org/>`_.
-        Or jump directly to `cheatsheet 
<http://funcy.readthedocs.io/en/stable/cheatsheet.html>`_.
-        
-        Works with Python 2.7, 3.4+ and pypy.
-        
-        
-        Installation
-        -------------
-        
-        ::
-        
-            pip install funcy
-        
-        
-        Overview
-        --------------
-        
-        Import stuff from funcy to make things happen:
-        
-        .. code:: python
-        
-            from funcy import whatever, you, need
-        
-        
-        Merge collections of same type
-        (works for dicts, sets, lists, tuples, iterators and even strings):
-        
-        .. code:: python
-        
-            merge(coll1, coll2, coll3, ...)
-            join(colls)
-            merge_with(sum, dict1, dict2, ...)
-        
-        
-        Walk through collection, creating its transform (like map but 
preserves type):
-        
-        .. code:: python
-        
-            walk(str.upper, {'a', 'b'})            # {'A', 'B'}
-            walk(reversed, {'a': 1, 'b': 2})       # {1: 'a', 2: 'b'}
-            walk_keys(double, {'a': 1, 'b': 2})    # {'aa': 1, 'bb': 2}
-            walk_values(inc, {'a': 1, 'b': 2})     # {'a': 2, 'b': 3}
-        
-        
-        Select a part of collection:
-        
-        .. code:: python
-        
-            select(even, {1,2,3,10,20})                  # {2,10,20}
-            select(r'^a', ('a','b','ab','ba'))           # ('a','ab')
-            select_keys(callable, {str: '', None: None}) # {str: ''}
-            compact({2, None, 1, 0})                     # {1,2}
-        
-        
-        Manipulate sequences:
-        
-        .. code:: python
-        
-            take(4, iterate(double, 1)) # [1, 2, 4, 8]
-            first(drop(3, count(10)))   # 13
-        
-            lremove(even, [1, 2, 3])    # [1, 3]
-            lconcat([1, 2], [5, 6])     # [1, 2, 5, 6]
-            lcat(map(range, range(4)))  # [0, 0, 1, 0, 1, 2]
-            lmapcat(range, range(4))    # same
-            flatten(nested_structure)   # flat iter
-            distinct('abacbdd')         # iter('abcd')
-        
-            lsplit(odd, range(5))       # ([1, 3], [0, 2, 4])
-            lsplit_at(2, range(5))      # ([0, 1], [2, 3, 4])
-            group_by(mod3, range(5))    # {0: [0, 3], 1: [1, 4], 2: [2]}
-        
-            lpartition(2, range(5))     # [[0, 1], [2, 3]]
-            chunks(2, range(5))         # iter: [0, 1], [2, 3], [4]
-            pairwise(range(5))          # iter: [0, 1], [1, 2], ...
-        
-        
-        And functions:
-        
-        .. code:: python
-        
-            partial(add, 1)             # inc
-            curry(add)(1)(2)            # 3
-            compose(inc, double)(10)    # 21
-            complement(even)            # odd
-            all_fn(isa(int), even)      # is_even_int
-        
-            one_third = rpartial(operator.div, 3.0)
-            has_suffix = rcurry(str.endswith)
-        
-        
-        Create decorators easily:
-        
-        .. code:: python
-        
-            @decorator
-            def log(call):
-                print call._func.__name__, call._args
-                return call()
-        
-        
-        Abstract control flow:
-        
-        .. code:: python
-        
-            walk_values(silent(int), {'a': '1', 'b': 'no'})
-            # => {'a': 1, 'b': None}
-        
-            @once
-            def initialize():
-                "..."
-        
-            with suppress(OSError):
-                os.remove('some.file')
-        
-            @ignore(ErrorRateExceeded)
-            @limit_error_rate(fails=5, timeout=60)
-            @retry(tries=2, errors=(HttpError, ServiceDown))
-            def some_unreliable_action(...):
-                "..."
-        
-            class MyUser(AbstractBaseUser):
-                @cached_property
-                def public_phones(self):
-                    return self.phones.filter(public=True)
-        
-        
-        Ease debugging:
-        
-        .. code:: python
-        
-            squares = {tap(x, 'x'): tap(x * x, 'x^2') for x in [3, 4]}
-            # x: 3
-            # x^2: 9
-            # ...
-        
-            @print_exits
-            def some_func(...):
-                "..."
-        
-            @log_calls(log.info, errors=False)
-            @log_errors(log.exception)
-            def some_suspicious_function(...):
-                "..."
-        
-            with print_durations('Creating models'):
-                Model.objects.create(...)
-                # ...
-            # 10.2 ms in Creating models
-        
-        
-        And `much more <http://funcy.readthedocs.org/>`_.
-        
-        
-        Dive in
-        -------
-        
-        Funcy is an embodiment of ideas I explain in several essays:
-        
-        - `Why Every Language Needs Its Underscore 
<http://hackflow.com/blog/2014/06/22/why-every-language-needs-its-underscore/>`_
-        - `Functional Python Made Easy 
<http://hackflow.com/blog/2013/10/13/functional-python-made-easy/>`_
-        - `Abstracting Control Flow 
<http://hackflow.com/blog/2013/10/08/abstracting-control-flow/>`_
-        - `Painless Decorators 
<http://hackflow.com/blog/2013/11/03/painless-decorators/>`_
-        
-        
-        Running tests
-        --------------
-        
-        To run the tests using your default python:
-        
-        ::
-        
-            pip install -r test_requirements.txt
-            py.test
-        
-        To fully run ``tox`` you need all the supported pythons to be 
installed. These are
-        2.6+, 3.3+, PyPy and PyPy3. You can run it for particular environment 
even in absense
-        of all of the above::
-        
-            tox -e py27
-            tox -e py36
-            tox -e lint
-        
-        
-        .. |Build Status| image:: 
https://travis-ci.org/Suor/funcy.svg?branch=master
-           :target: https://travis-ci.org/Suor/funcy
-        
-        
-        .. |Gitter| image:: https://badges.gitter.im/JoinChat.svg
-           :alt: Join the chat at https://gitter.im/Suor/funcy
-           :target: 
https://gitter.im/Suor/funcy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
-        
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: License :: OSI Approved :: BSD License
@@ -220,7 +20,205 @@
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Classifier: Intended Audience :: Developers
+Description-Content-Type: text/x-rst
+License-File: LICENSE
+
+Funcy 
+=====
+
+A collection of fancy functional tools focused on practicality.
+
+Inspired by clojure, underscore and my own abstractions. Keep reading to get 
an overview
+or `read the docs <http://funcy.readthedocs.org/>`_.
+Or jump directly to `cheatsheet 
<http://funcy.readthedocs.io/en/stable/cheatsheet.html>`_.
+
+Works with Python 2.7, 3.4+ and pypy.
+
+
+Installation
+-------------
+
+::
+
+    pip install funcy
+
+
+Overview
+--------------
+
+Import stuff from funcy to make things happen:
+
+.. code:: python
+
+    from funcy import whatever, you, need
+
+
+Merge collections of same type
+(works for dicts, sets, lists, tuples, iterators and even strings):
+
+.. code:: python
+
+    merge(coll1, coll2, coll3, ...)
+    join(colls)
+    merge_with(sum, dict1, dict2, ...)
+
+
+Walk through collection, creating its transform (like map but preserves type):
+
+.. code:: python
+
+    walk(str.upper, {'a', 'b'})            # {'A', 'B'}
+    walk(reversed, {'a': 1, 'b': 2})       # {1: 'a', 2: 'b'}
+    walk_keys(double, {'a': 1, 'b': 2})    # {'aa': 1, 'bb': 2}
+    walk_values(inc, {'a': 1, 'b': 2})     # {'a': 2, 'b': 3}
+
+
+Select a part of collection:
+
+.. code:: python
+
+    select(even, {1,2,3,10,20})                  # {2,10,20}
+    select(r'^a', ('a','b','ab','ba'))           # ('a','ab')
+    select_keys(callable, {str: '', None: None}) # {str: ''}
+    compact({2, None, 1, 0})                     # {1,2}
+
+
+Manipulate sequences:
+
+.. code:: python
+
+    take(4, iterate(double, 1)) # [1, 2, 4, 8]
+    first(drop(3, count(10)))   # 13
+
+    lremove(even, [1, 2, 3])    # [1, 3]
+    lconcat([1, 2], [5, 6])     # [1, 2, 5, 6]
+    lcat(map(range, range(4)))  # [0, 0, 1, 0, 1, 2]
+    lmapcat(range, range(4))    # same
+    flatten(nested_structure)   # flat iter
+    distinct('abacbdd')         # iter('abcd')
+
+    lsplit(odd, range(5))       # ([1, 3], [0, 2, 4])
+    lsplit_at(2, range(5))      # ([0, 1], [2, 3, 4])
+    group_by(mod3, range(5))    # {0: [0, 3], 1: [1, 4], 2: [2]}
+
+    lpartition(2, range(5))     # [[0, 1], [2, 3]]
+    chunks(2, range(5))         # iter: [0, 1], [2, 3], [4]
+    pairwise(range(5))          # iter: [0, 1], [1, 2], ...
+
+
+And functions:
+
+.. code:: python
+
+    partial(add, 1)             # inc
+    curry(add)(1)(2)            # 3
+    compose(inc, double)(10)    # 21
+    complement(even)            # odd
+    all_fn(isa(int), even)      # is_even_int
+
+    one_third = rpartial(operator.div, 3.0)
+    has_suffix = rcurry(str.endswith, 2)
+
+
+Create decorators easily:
+
+.. code:: python
+
+    @decorator
+    def log(call):
+        print call._func.__name__, call._args
+        return call()
+
+
+Abstract control flow:
+
+.. code:: python
+
+    walk_values(silent(int), {'a': '1', 'b': 'no'})
+    # => {'a': 1, 'b': None}
+
+    @once
+    def initialize():
+        "..."
+
+    with suppress(OSError):
+        os.remove('some.file')
+
+    @ignore(ErrorRateExceeded)
+    @limit_error_rate(fails=5, timeout=60)
+    @retry(tries=2, errors=(HttpError, ServiceDown))
+    def some_unreliable_action(...):
+        "..."
+
+    class MyUser(AbstractBaseUser):
+        @cached_property
+        def public_phones(self):
+            return self.phones.filter(public=True)
+
+
+Ease debugging:
+
+.. code:: python
+
+    squares = {tap(x, 'x'): tap(x * x, 'x^2') for x in [3, 4]}
+    # x: 3
+    # x^2: 9
+    # ...
+
+    @print_exits
+    def some_func(...):
+        "..."
+
+    @log_calls(log.info, errors=False)
+    @log_errors(log.exception)
+    def some_suspicious_function(...):
+        "..."
+
+    with print_durations('Creating models'):
+        Model.objects.create(...)
+        # ...
+    # 10.2 ms in Creating models
+
+
+And `much more <http://funcy.readthedocs.org/>`_.
+
+
+Dive in
+-------
+
+Funcy is an embodiment of ideas I explain in several essays:
+
+- `Why Every Language Needs Its Underscore 
<http://hackflow.com/blog/2014/06/22/why-every-language-needs-its-underscore/>`_
+- `Functional Python Made Easy 
<http://hackflow.com/blog/2013/10/13/functional-python-made-easy/>`_
+- `Abstracting Control Flow 
<http://hackflow.com/blog/2013/10/08/abstracting-control-flow/>`_
+- `Painless Decorators 
<http://hackflow.com/blog/2013/11/03/painless-decorators/>`_
+
+
+Running tests
+--------------
+
+To run the tests using your default python:
+
+::
+
+    pip install -r test_requirements.txt
+    py.test
+
+To fully run ``tox`` you need all the supported pythons to be installed. These 
are
+2.6+, 3.3+, PyPy and PyPy3. You can run it for particular environment even in 
absense
+of all of the above::
+
+    tox -e py27
+    tox -e py36
+    tox -e lint
+
+
+.. |Build Status| image:: 
https://github.com/Suor/funcy/actions/workflows/test.yml/badge.svg
+   :target: 
https://github.com/Suor/funcy/actions/workflows/test.yml?query=branch%3Amaster
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/README.rst new/funcy-1.17/README.rst
--- old/funcy-1.16/README.rst   2019-11-16 20:17:14.000000000 +0100
+++ new/funcy-1.17/README.rst   2021-11-11 11:29:12.000000000 +0100
@@ -1,4 +1,4 @@
-Funcy |Build Status| |Gitter|
+Funcy |Build Status|
 =====
 
 A collection of fancy functional tools focused on practicality.
@@ -92,7 +92,7 @@
     all_fn(isa(int), even)      # is_even_int
 
     one_third = rpartial(operator.div, 3.0)
-    has_suffix = rcurry(str.endswith)
+    has_suffix = rcurry(str.endswith, 2)
 
 
 Create decorators easily:
@@ -188,10 +188,5 @@
     tox -e lint
 
 
-.. |Build Status| image:: https://travis-ci.org/Suor/funcy.svg?branch=master
-   :target: https://travis-ci.org/Suor/funcy
-
-
-.. |Gitter| image:: https://badges.gitter.im/JoinChat.svg
-   :alt: Join the chat at https://gitter.im/Suor/funcy
-   :target: 
https://gitter.im/Suor/funcy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
+.. |Build Status| image:: 
https://github.com/Suor/funcy/actions/workflows/test.yml/badge.svg
+   :target: 
https://github.com/Suor/funcy/actions/workflows/test.yml?query=branch%3Amaster
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/VERSION new/funcy-1.17/VERSION
--- old/funcy-1.16/VERSION      2021-05-10 07:38:09.000000000 +0200
+++ new/funcy-1.17/VERSION      2021-12-20 06:20:46.000000000 +0100
@@ -1 +1 @@
-1.16
+1.17
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/funcy/_inspect.py 
new/funcy-1.17/funcy/_inspect.py
--- old/funcy-1.16/funcy/_inspect.py    2021-05-08 11:10:10.000000000 +0200
+++ new/funcy-1.17/funcy/_inspect.py    2021-11-11 10:25:47.000000000 +0100
@@ -1,5 +1,9 @@
 from __future__ import absolute_import
 from inspect import CO_VARARGS, CO_VARKEYWORDS
+try:
+    from inspect import signature
+except ImportError:
+    signature = None  #
 from collections import namedtuple
 import types
 import re
@@ -105,7 +109,7 @@
     except (KeyError, TypeError):
         pass
 
-    mod = func.__module__
+    mod = getattr(func, '__module__', None)
     if mod in STD_MODULES or mod in ARGS and func.__name__ in ARGS[mod]:
         _spec = ARGS[mod].get(func.__name__, '*')
         required, _, optional = _spec.partition('-')
@@ -144,5 +148,28 @@
             max_n = req_n + 1 if func.__code__.co_flags & CO_VARARGS else n
             return Spec(max_n=max_n, names=names, req_n=req_n, 
req_names=req_names, kw=kw)
         except AttributeError:
-            raise ValueError('Unable to introspect %s() arguments'
-                                % getattr(func, '__name__', func))
+            # We use signature last to be fully backwards compatible. Also 
it's slower
+            try:
+                sig = signature(func)
+            except (ValueError, TypeError):
+                raise ValueError('Unable to introspect %s() arguments'
+                    % (getattr(func, '__qualname__', None) or getattr(func, 
'__name__', func)))
+            else:
+                spec = _cache[func] = _sig_to_spec(sig)
+                return spec
+
+
+def _sig_to_spec(sig):
+    max_n, names, req_n, req_names, kw = 0, set(), 0, set(), False
+    for name, param in sig.parameters.items():
+        max_n += 1
+        if param.kind == param.VAR_KEYWORD:
+            kw = True
+        elif param.kind == param.VAR_POSITIONAL:
+            req_n += 1
+        else:
+            names.add(name)
+            if param.default is param.empty:
+                req_n += 1
+                req_names.add(name)
+    return Spec(max_n=max_n, names=names, req_n=req_n, req_names=req_names, 
kw=kw)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/funcy/colls.py 
new/funcy-1.17/funcy/colls.py
--- old/funcy-1.16/funcy/colls.py       2021-03-21 06:53:51.000000000 +0100
+++ new/funcy-1.17/funcy/colls.py       2021-10-11 17:27:26.000000000 +0200
@@ -2,6 +2,7 @@
     from __builtin__ import all as _all, any as _any
 except ImportError:
     from builtins import all as _all, any as _any
+from copy import copy
 from operator import itemgetter, methodcaller, attrgetter
 from itertools import chain, tee
 from collections import defaultdict
@@ -19,7 +20,7 @@
            'is_distinct', 'all', 'any', 'none', 'one', 'some',
            'zipdict', 'flip', 'project', 'omit', 'zip_values', 'zip_dicts',
            'where', 'pluck', 'pluck_attr', 'invoke', 'lwhere', 'lpluck', 
'lpluck_attr', 'linvoke',
-           'get_in', 'set_in', 'update_in', 'has_path']
+           'get_in', 'set_in', 'update_in', 'del_in', 'has_path']
 
 
 ### Generic ops
@@ -251,16 +252,16 @@
 def zip_values(*dicts):
     """Yields tuples of corresponding values of several dicts."""
     if len(dicts) < 1:
-        raise TypeError('izip_values expects at least one argument')
+        raise TypeError('zip_values expects at least one argument')
     keys = set.intersection(*map(set, dicts))
     for key in keys:
         yield tuple(d[key] for d in dicts)
 
 def zip_dicts(*dicts):
-    """Yields tuples like (key, val1, val2, ...)
+    """Yields tuples like (key, (val1, val2, ...))
        for each common key in all given dicts."""
     if len(dicts) < 1:
-        raise TypeError('izip_dicts expects at least one argument')
+        raise TypeError('zip_dicts expects at least one argument')
     keys = set.intersection(*map(set, dicts))
     for key in keys:
         yield key, tuple(d[key] for d in dicts)
@@ -293,6 +294,24 @@
         copy[path[0]] = update_in(copy.get(path[0], current_default), 
path[1:], update, default)
         return copy
 
+
+def del_in(coll, path):
+    """Creates a copy of coll with a nested key or index deleted."""
+    if not path:
+        return coll
+    try:
+        next_coll = coll[path[0]]
+    except (KeyError, IndexError):
+        return coll
+
+    coll_copy = copy(coll)
+    if len(path) == 1:
+        del coll_copy[path[0]]
+    else:
+        coll_copy[path[0]] = del_in(next_coll, path[1:])
+    return coll_copy
+
+
 def has_path(coll, path):
     """Checks if path exists in the given nested collection."""
     for p in path:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/funcy/decorators.py 
new/funcy-1.17/funcy/decorators.py
--- old/funcy-1.16/funcy/decorators.py  2021-05-08 07:56:40.000000000 +0200
+++ new/funcy-1.17/funcy/decorators.py  2021-07-17 13:18:37.000000000 +0200
@@ -74,6 +74,14 @@
         except TypeError as e:
             raise AttributeError(*e.args)
 
+    def __str__(self):
+        func = getattr(self._func, '__qualname__', str(self._func))
+        args = ", ".join(list(map(str, self._args)) + ["%s=%s" % t for t in 
self._kwargs.items()])
+        return "%s(%s)" % (func, args)
+
+    def __repr__(self):
+        return "<Call %s>" % self
+
 
 if PY2:
     def has_single_arg(func):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/funcy/flow.py new/funcy-1.17/funcy/flow.py
--- old/funcy-1.16/funcy/flow.py        2021-05-09 04:59:09.000000000 +0200
+++ new/funcy-1.17/funcy/flow.py        2021-07-17 13:06:57.000000000 +0200
@@ -169,27 +169,27 @@
         timeout = timedelta(seconds=timeout)
 
     def decorator(func):
-        func.fails = 0
-        func.blocked = None
-
         @wraps(func)
         def wrapper(*args, **kwargs):
-            if func.blocked:
-                if datetime.now() - func.blocked < timeout:
+            if wrapper.blocked:
+                if datetime.now() - wrapper.blocked < timeout:
                     raise exception
                 else:
-                    func.blocked = None
+                    wrapper.blocked = None
 
             try:
                 result = func(*args, **kwargs)
             except:  # noqa
-                func.fails += 1
-                if func.fails >= fails:
-                    func.blocked = datetime.now()
+                wrapper.fails += 1
+                if wrapper.fails >= fails:
+                    wrapper.blocked = datetime.now()
                 raise
             else:
-                func.fails = 0
+                wrapper.fails = 0
                 return result
+
+        wrapper.fails = 0
+        wrapper.blocked = None
         return wrapper
     return decorator
 
@@ -200,17 +200,17 @@
         period = period.total_seconds()
 
     def decorator(func):
-        func.blocked_until = None
 
         @wraps(func)
         def wrapper(*args, **kwargs):
             now = time.time()
-            if func.blocked_until and func.blocked_until > now:
+            if wrapper.blocked_until and wrapper.blocked_until > now:
                 return
-            func.blocked_until = now + period
+            wrapper.blocked_until = now + period
 
             return func(*args, **kwargs)
 
+        wrapper.blocked_until = None
         return wrapper
 
     return decorator
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/funcy.egg-info/PKG-INFO 
new/funcy-1.17/funcy.egg-info/PKG-INFO
--- old/funcy-1.16/funcy.egg-info/PKG-INFO      2021-05-10 09:17:36.000000000 
+0200
+++ new/funcy-1.17/funcy.egg-info/PKG-INFO      2021-12-20 06:33:10.000000000 
+0100
@@ -1,211 +1,11 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
 Name: funcy
-Version: 1.16
+Version: 1.17
 Summary: A fancy and practical functional tools
 Home-page: http://github.com/Suor/funcy
 Author: Alexander Schepanovski
 Author-email: suor....@gmail.com
 License: BSD
-Description: Funcy  
-        =====
-        
-        |Gitter|
-        
-        A collection of fancy functional tools focused on practicality.
-        
-        Inspired by clojure, underscore and my own abstractions. Keep reading 
to get an overview
-        or `read the docs <http://funcy.readthedocs.org/>`_.
-        Or jump directly to `cheatsheet 
<http://funcy.readthedocs.io/en/stable/cheatsheet.html>`_.
-        
-        Works with Python 2.7, 3.4+ and pypy.
-        
-        
-        Installation
-        -------------
-        
-        ::
-        
-            pip install funcy
-        
-        
-        Overview
-        --------------
-        
-        Import stuff from funcy to make things happen:
-        
-        .. code:: python
-        
-            from funcy import whatever, you, need
-        
-        
-        Merge collections of same type
-        (works for dicts, sets, lists, tuples, iterators and even strings):
-        
-        .. code:: python
-        
-            merge(coll1, coll2, coll3, ...)
-            join(colls)
-            merge_with(sum, dict1, dict2, ...)
-        
-        
-        Walk through collection, creating its transform (like map but 
preserves type):
-        
-        .. code:: python
-        
-            walk(str.upper, {'a', 'b'})            # {'A', 'B'}
-            walk(reversed, {'a': 1, 'b': 2})       # {1: 'a', 2: 'b'}
-            walk_keys(double, {'a': 1, 'b': 2})    # {'aa': 1, 'bb': 2}
-            walk_values(inc, {'a': 1, 'b': 2})     # {'a': 2, 'b': 3}
-        
-        
-        Select a part of collection:
-        
-        .. code:: python
-        
-            select(even, {1,2,3,10,20})                  # {2,10,20}
-            select(r'^a', ('a','b','ab','ba'))           # ('a','ab')
-            select_keys(callable, {str: '', None: None}) # {str: ''}
-            compact({2, None, 1, 0})                     # {1,2}
-        
-        
-        Manipulate sequences:
-        
-        .. code:: python
-        
-            take(4, iterate(double, 1)) # [1, 2, 4, 8]
-            first(drop(3, count(10)))   # 13
-        
-            lremove(even, [1, 2, 3])    # [1, 3]
-            lconcat([1, 2], [5, 6])     # [1, 2, 5, 6]
-            lcat(map(range, range(4)))  # [0, 0, 1, 0, 1, 2]
-            lmapcat(range, range(4))    # same
-            flatten(nested_structure)   # flat iter
-            distinct('abacbdd')         # iter('abcd')
-        
-            lsplit(odd, range(5))       # ([1, 3], [0, 2, 4])
-            lsplit_at(2, range(5))      # ([0, 1], [2, 3, 4])
-            group_by(mod3, range(5))    # {0: [0, 3], 1: [1, 4], 2: [2]}
-        
-            lpartition(2, range(5))     # [[0, 1], [2, 3]]
-            chunks(2, range(5))         # iter: [0, 1], [2, 3], [4]
-            pairwise(range(5))          # iter: [0, 1], [1, 2], ...
-        
-        
-        And functions:
-        
-        .. code:: python
-        
-            partial(add, 1)             # inc
-            curry(add)(1)(2)            # 3
-            compose(inc, double)(10)    # 21
-            complement(even)            # odd
-            all_fn(isa(int), even)      # is_even_int
-        
-            one_third = rpartial(operator.div, 3.0)
-            has_suffix = rcurry(str.endswith)
-        
-        
-        Create decorators easily:
-        
-        .. code:: python
-        
-            @decorator
-            def log(call):
-                print call._func.__name__, call._args
-                return call()
-        
-        
-        Abstract control flow:
-        
-        .. code:: python
-        
-            walk_values(silent(int), {'a': '1', 'b': 'no'})
-            # => {'a': 1, 'b': None}
-        
-            @once
-            def initialize():
-                "..."
-        
-            with suppress(OSError):
-                os.remove('some.file')
-        
-            @ignore(ErrorRateExceeded)
-            @limit_error_rate(fails=5, timeout=60)
-            @retry(tries=2, errors=(HttpError, ServiceDown))
-            def some_unreliable_action(...):
-                "..."
-        
-            class MyUser(AbstractBaseUser):
-                @cached_property
-                def public_phones(self):
-                    return self.phones.filter(public=True)
-        
-        
-        Ease debugging:
-        
-        .. code:: python
-        
-            squares = {tap(x, 'x'): tap(x * x, 'x^2') for x in [3, 4]}
-            # x: 3
-            # x^2: 9
-            # ...
-        
-            @print_exits
-            def some_func(...):
-                "..."
-        
-            @log_calls(log.info, errors=False)
-            @log_errors(log.exception)
-            def some_suspicious_function(...):
-                "..."
-        
-            with print_durations('Creating models'):
-                Model.objects.create(...)
-                # ...
-            # 10.2 ms in Creating models
-        
-        
-        And `much more <http://funcy.readthedocs.org/>`_.
-        
-        
-        Dive in
-        -------
-        
-        Funcy is an embodiment of ideas I explain in several essays:
-        
-        - `Why Every Language Needs Its Underscore 
<http://hackflow.com/blog/2014/06/22/why-every-language-needs-its-underscore/>`_
-        - `Functional Python Made Easy 
<http://hackflow.com/blog/2013/10/13/functional-python-made-easy/>`_
-        - `Abstracting Control Flow 
<http://hackflow.com/blog/2013/10/08/abstracting-control-flow/>`_
-        - `Painless Decorators 
<http://hackflow.com/blog/2013/11/03/painless-decorators/>`_
-        
-        
-        Running tests
-        --------------
-        
-        To run the tests using your default python:
-        
-        ::
-        
-            pip install -r test_requirements.txt
-            py.test
-        
-        To fully run ``tox`` you need all the supported pythons to be 
installed. These are
-        2.6+, 3.3+, PyPy and PyPy3. You can run it for particular environment 
even in absense
-        of all of the above::
-        
-            tox -e py27
-            tox -e py36
-            tox -e lint
-        
-        
-        .. |Build Status| image:: 
https://travis-ci.org/Suor/funcy.svg?branch=master
-           :target: https://travis-ci.org/Suor/funcy
-        
-        
-        .. |Gitter| image:: https://badges.gitter.im/JoinChat.svg
-           :alt: Join the chat at https://gitter.im/Suor/funcy
-           :target: 
https://gitter.im/Suor/funcy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
-        
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: License :: OSI Approved :: BSD License
@@ -220,7 +20,205 @@
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Classifier: Intended Audience :: Developers
+Description-Content-Type: text/x-rst
+License-File: LICENSE
+
+Funcy 
+=====
+
+A collection of fancy functional tools focused on practicality.
+
+Inspired by clojure, underscore and my own abstractions. Keep reading to get 
an overview
+or `read the docs <http://funcy.readthedocs.org/>`_.
+Or jump directly to `cheatsheet 
<http://funcy.readthedocs.io/en/stable/cheatsheet.html>`_.
+
+Works with Python 2.7, 3.4+ and pypy.
+
+
+Installation
+-------------
+
+::
+
+    pip install funcy
+
+
+Overview
+--------------
+
+Import stuff from funcy to make things happen:
+
+.. code:: python
+
+    from funcy import whatever, you, need
+
+
+Merge collections of same type
+(works for dicts, sets, lists, tuples, iterators and even strings):
+
+.. code:: python
+
+    merge(coll1, coll2, coll3, ...)
+    join(colls)
+    merge_with(sum, dict1, dict2, ...)
+
+
+Walk through collection, creating its transform (like map but preserves type):
+
+.. code:: python
+
+    walk(str.upper, {'a', 'b'})            # {'A', 'B'}
+    walk(reversed, {'a': 1, 'b': 2})       # {1: 'a', 2: 'b'}
+    walk_keys(double, {'a': 1, 'b': 2})    # {'aa': 1, 'bb': 2}
+    walk_values(inc, {'a': 1, 'b': 2})     # {'a': 2, 'b': 3}
+
+
+Select a part of collection:
+
+.. code:: python
+
+    select(even, {1,2,3,10,20})                  # {2,10,20}
+    select(r'^a', ('a','b','ab','ba'))           # ('a','ab')
+    select_keys(callable, {str: '', None: None}) # {str: ''}
+    compact({2, None, 1, 0})                     # {1,2}
+
+
+Manipulate sequences:
+
+.. code:: python
+
+    take(4, iterate(double, 1)) # [1, 2, 4, 8]
+    first(drop(3, count(10)))   # 13
+
+    lremove(even, [1, 2, 3])    # [1, 3]
+    lconcat([1, 2], [5, 6])     # [1, 2, 5, 6]
+    lcat(map(range, range(4)))  # [0, 0, 1, 0, 1, 2]
+    lmapcat(range, range(4))    # same
+    flatten(nested_structure)   # flat iter
+    distinct('abacbdd')         # iter('abcd')
+
+    lsplit(odd, range(5))       # ([1, 3], [0, 2, 4])
+    lsplit_at(2, range(5))      # ([0, 1], [2, 3, 4])
+    group_by(mod3, range(5))    # {0: [0, 3], 1: [1, 4], 2: [2]}
+
+    lpartition(2, range(5))     # [[0, 1], [2, 3]]
+    chunks(2, range(5))         # iter: [0, 1], [2, 3], [4]
+    pairwise(range(5))          # iter: [0, 1], [1, 2], ...
+
+
+And functions:
+
+.. code:: python
+
+    partial(add, 1)             # inc
+    curry(add)(1)(2)            # 3
+    compose(inc, double)(10)    # 21
+    complement(even)            # odd
+    all_fn(isa(int), even)      # is_even_int
+
+    one_third = rpartial(operator.div, 3.0)
+    has_suffix = rcurry(str.endswith, 2)
+
+
+Create decorators easily:
+
+.. code:: python
+
+    @decorator
+    def log(call):
+        print call._func.__name__, call._args
+        return call()
+
+
+Abstract control flow:
+
+.. code:: python
+
+    walk_values(silent(int), {'a': '1', 'b': 'no'})
+    # => {'a': 1, 'b': None}
+
+    @once
+    def initialize():
+        "..."
+
+    with suppress(OSError):
+        os.remove('some.file')
+
+    @ignore(ErrorRateExceeded)
+    @limit_error_rate(fails=5, timeout=60)
+    @retry(tries=2, errors=(HttpError, ServiceDown))
+    def some_unreliable_action(...):
+        "..."
+
+    class MyUser(AbstractBaseUser):
+        @cached_property
+        def public_phones(self):
+            return self.phones.filter(public=True)
+
+
+Ease debugging:
+
+.. code:: python
+
+    squares = {tap(x, 'x'): tap(x * x, 'x^2') for x in [3, 4]}
+    # x: 3
+    # x^2: 9
+    # ...
+
+    @print_exits
+    def some_func(...):
+        "..."
+
+    @log_calls(log.info, errors=False)
+    @log_errors(log.exception)
+    def some_suspicious_function(...):
+        "..."
+
+    with print_durations('Creating models'):
+        Model.objects.create(...)
+        # ...
+    # 10.2 ms in Creating models
+
+
+And `much more <http://funcy.readthedocs.org/>`_.
+
+
+Dive in
+-------
+
+Funcy is an embodiment of ideas I explain in several essays:
+
+- `Why Every Language Needs Its Underscore 
<http://hackflow.com/blog/2014/06/22/why-every-language-needs-its-underscore/>`_
+- `Functional Python Made Easy 
<http://hackflow.com/blog/2013/10/13/functional-python-made-easy/>`_
+- `Abstracting Control Flow 
<http://hackflow.com/blog/2013/10/08/abstracting-control-flow/>`_
+- `Painless Decorators 
<http://hackflow.com/blog/2013/11/03/painless-decorators/>`_
+
+
+Running tests
+--------------
+
+To run the tests using your default python:
+
+::
+
+    pip install -r test_requirements.txt
+    py.test
+
+To fully run ``tox`` you need all the supported pythons to be installed. These 
are
+2.6+, 3.3+, PyPy and PyPy3. You can run it for particular environment even in 
absense
+of all of the above::
+
+    tox -e py27
+    tox -e py36
+    tox -e lint
+
+
+.. |Build Status| image:: 
https://github.com/Suor/funcy/actions/workflows/test.yml/badge.svg
+   :target: 
https://github.com/Suor/funcy/actions/workflows/test.yml?query=branch%3Amaster
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/funcy.egg-info/SOURCES.txt 
new/funcy-1.17/funcy.egg-info/SOURCES.txt
--- old/funcy-1.16/funcy.egg-info/SOURCES.txt   2021-05-10 09:17:36.000000000 
+0200
+++ new/funcy-1.17/funcy.egg-info/SOURCES.txt   2021-12-20 06:33:10.000000000 
+0100
@@ -29,7 +29,6 @@
 funcy.egg-info/dependency_links.txt
 funcy.egg-info/top_level.txt
 tests/__init__.py
-tests/__init__.pyc
 tests/test_calc.py
 tests/test_colls.py
 tests/test_debug.py
@@ -44,134 +43,18 @@
 tests/test_strings.py
 tests/test_tree.py
 tests/test_types.py
-tests/__pycache__/__init__.cpython-35.pyc
-tests/__pycache__/__init__.cpython-36.pyc
-tests/__pycache__/__init__.cpython-37.pyc
-tests/__pycache__/__init__.cpython-38.pyc
-tests/__pycache__/__init__.pypy-41.pyc
-tests/__pycache__/test_calc.cpython-27-PYTEST.pyc
-tests/__pycache__/test_calc.cpython-35-PYTEST.pyc
-tests/__pycache__/test_calc.cpython-35-pytest-5.0.1.pyc
-tests/__pycache__/test_calc.cpython-36-PYTEST.pyc
-tests/__pycache__/test_calc.cpython-37-PYTEST.pyc
-tests/__pycache__/test_calc.cpython-37-pytest-5.0.1.pyc
-tests/__pycache__/test_calc.cpython-38-pytest-5.3.1.pyc
-tests/__pycache__/test_calc.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_calc.pypy-41-PYTEST.pyc
-tests/__pycache__/test_colls.cpython-27-PYTEST.pyc
-tests/__pycache__/test_colls.cpython-35-PYTEST.pyc
-tests/__pycache__/test_colls.cpython-35-pytest-5.0.1.pyc
-tests/__pycache__/test_colls.cpython-36-PYTEST.pyc
-tests/__pycache__/test_colls.cpython-37-PYTEST.pyc
-tests/__pycache__/test_colls.cpython-37-pytest-5.0.1.pyc
-tests/__pycache__/test_colls.cpython-38-pytest-5.3.1.pyc
-tests/__pycache__/test_colls.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_colls.pypy-41-PYTEST.pyc
-tests/__pycache__/test_debug.cpython-27-PYTEST.pyc
-tests/__pycache__/test_debug.cpython-35-PYTEST.pyc
-tests/__pycache__/test_debug.cpython-35-pytest-5.0.1.pyc
-tests/__pycache__/test_debug.cpython-36-PYTEST.pyc
-tests/__pycache__/test_debug.cpython-37-PYTEST.pyc
-tests/__pycache__/test_debug.cpython-37-pytest-5.0.1.pyc
-tests/__pycache__/test_debug.cpython-38-pytest-5.3.1.pyc
-tests/__pycache__/test_debug.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_debug.pypy-41-PYTEST.pyc
-tests/__pycache__/test_decorators.cpython-27-PYTEST.pyc
-tests/__pycache__/test_decorators.cpython-35-PYTEST.pyc
-tests/__pycache__/test_decorators.cpython-35-pytest-5.0.1.pyc
-tests/__pycache__/test_decorators.cpython-36-PYTEST.pyc
-tests/__pycache__/test_decorators.cpython-37-PYTEST.pyc
-tests/__pycache__/test_decorators.cpython-37-pytest-5.0.1.pyc
-tests/__pycache__/test_decorators.cpython-38-pytest-5.3.1.pyc
-tests/__pycache__/test_decorators.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_decorators.pypy-41-PYTEST.pyc
-tests/__pycache__/test_flow.cpython-27-PYTEST.pyc
-tests/__pycache__/test_flow.cpython-35-PYTEST.pyc
-tests/__pycache__/test_flow.cpython-35-pytest-5.0.1.pyc
-tests/__pycache__/test_flow.cpython-36-PYTEST.pyc
-tests/__pycache__/test_flow.cpython-37-PYTEST.pyc
-tests/__pycache__/test_flow.cpython-37-pytest-5.0.1.pyc
-tests/__pycache__/test_flow.cpython-38-pytest-5.3.1.pyc
-tests/__pycache__/test_flow.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_flow.pypy-41-PYTEST.pyc
-tests/__pycache__/test_funcmakers.cpython-27-PYTEST.pyc
-tests/__pycache__/test_funcmakers.cpython-35-PYTEST.pyc
-tests/__pycache__/test_funcmakers.cpython-35-pytest-5.0.1.pyc
-tests/__pycache__/test_funcmakers.cpython-36-PYTEST.pyc
-tests/__pycache__/test_funcmakers.cpython-37-PYTEST.pyc
-tests/__pycache__/test_funcmakers.cpython-37-pytest-5.0.1.pyc
-tests/__pycache__/test_funcmakers.cpython-38-pytest-5.3.1.pyc
-tests/__pycache__/test_funcmakers.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_funcmakers.pypy-41-PYTEST.pyc
-tests/__pycache__/test_funcolls.cpython-27-PYTEST.pyc
-tests/__pycache__/test_funcolls.cpython-35-PYTEST.pyc
-tests/__pycache__/test_funcolls.cpython-35-pytest-5.0.1.pyc
-tests/__pycache__/test_funcolls.cpython-36-PYTEST.pyc
-tests/__pycache__/test_funcolls.cpython-37-PYTEST.pyc
-tests/__pycache__/test_funcolls.cpython-37-pytest-5.0.1.pyc
-tests/__pycache__/test_funcolls.cpython-38-pytest-5.3.1.pyc
-tests/__pycache__/test_funcolls.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_funcolls.pypy-41-PYTEST.pyc
-tests/__pycache__/test_funcs.cpython-27-PYTEST.pyc
-tests/__pycache__/test_funcs.cpython-35-PYTEST.pyc
-tests/__pycache__/test_funcs.cpython-35-pytest-5.0.1.pyc
-tests/__pycache__/test_funcs.cpython-36-PYTEST.pyc
-tests/__pycache__/test_funcs.cpython-37-PYTEST.pyc
-tests/__pycache__/test_funcs.cpython-37-pytest-5.0.1.pyc
-tests/__pycache__/test_funcs.cpython-38-pytest-5.3.1.pyc
-tests/__pycache__/test_funcs.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_funcs.pypy-41-PYTEST.pyc
-tests/__pycache__/test_interface.cpython-27-PYTEST.pyc
-tests/__pycache__/test_interface.cpython-35-PYTEST.pyc
-tests/__pycache__/test_interface.cpython-35-pytest-5.0.1.pyc
-tests/__pycache__/test_interface.cpython-36-PYTEST.pyc
-tests/__pycache__/test_interface.cpython-37-PYTEST.pyc
-tests/__pycache__/test_interface.cpython-37-pytest-5.0.1.pyc
-tests/__pycache__/test_interface.cpython-38-pytest-5.3.1.pyc
-tests/__pycache__/test_interface.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_interface.pypy-41-PYTEST.pyc
-tests/__pycache__/test_objects.cpython-27-PYTEST.pyc
-tests/__pycache__/test_objects.cpython-35-PYTEST.pyc
-tests/__pycache__/test_objects.cpython-35-pytest-5.0.1.pyc
-tests/__pycache__/test_objects.cpython-36-PYTEST.pyc
-tests/__pycache__/test_objects.cpython-37-PYTEST.pyc
-tests/__pycache__/test_objects.cpython-37-pytest-5.0.1.pyc
-tests/__pycache__/test_objects.cpython-38-pytest-5.3.1.pyc
-tests/__pycache__/test_objects.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_objects.pypy-41-PYTEST.pyc
-tests/__pycache__/test_seqs.cpython-27-PYTEST.pyc
-tests/__pycache__/test_seqs.cpython-35-PYTEST.pyc
-tests/__pycache__/test_seqs.cpython-35-pytest-5.0.1.pyc
-tests/__pycache__/test_seqs.cpython-36-PYTEST.pyc
-tests/__pycache__/test_seqs.cpython-37-PYTEST.pyc
-tests/__pycache__/test_seqs.cpython-37-pytest-5.0.1.pyc
-tests/__pycache__/test_seqs.cpython-38-pytest-5.3.1.pyc
-tests/__pycache__/test_seqs.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_seqs.pypy-41-PYTEST.pyc
-tests/__pycache__/test_strings.cpython-27-PYTEST.pyc
-tests/__pycache__/test_strings.cpython-35-PYTEST.pyc
-tests/__pycache__/test_strings.cpython-35-pytest-5.0.1.pyc
-tests/__pycache__/test_strings.cpython-36-PYTEST.pyc
-tests/__pycache__/test_strings.cpython-37-PYTEST.pyc
-tests/__pycache__/test_strings.cpython-37-pytest-5.0.1.pyc
-tests/__pycache__/test_strings.cpython-38-pytest-5.3.1.pyc
-tests/__pycache__/test_strings.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_strings.pypy-41-PYTEST.pyc
-tests/__pycache__/test_tree.cpython-27-PYTEST.pyc
-tests/__pycache__/test_tree.cpython-35-PYTEST.pyc
-tests/__pycache__/test_tree.cpython-35-pytest-5.0.1.pyc
-tests/__pycache__/test_tree.cpython-36-PYTEST.pyc
-tests/__pycache__/test_tree.cpython-37-PYTEST.pyc
-tests/__pycache__/test_tree.cpython-37-pytest-5.0.1.pyc
-tests/__pycache__/test_tree.cpython-38-pytest-5.3.1.pyc
-tests/__pycache__/test_tree.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_tree.pypy-41-PYTEST.pyc
-tests/__pycache__/test_types.cpython-27-PYTEST.pyc
-tests/__pycache__/test_types.cpython-35-PYTEST.pyc
-tests/__pycache__/test_types.cpython-35-pytest-5.0.1.pyc
-tests/__pycache__/test_types.cpython-36-PYTEST.pyc
-tests/__pycache__/test_types.cpython-37-PYTEST.pyc
-tests/__pycache__/test_types.cpython-37-pytest-5.0.1.pyc
-tests/__pycache__/test_types.cpython-38-pytest-5.3.1.pyc
-tests/__pycache__/test_types.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_types.pypy-41-PYTEST.pyc
\ No newline at end of file
+tests/__pycache__/__init__.cpython-39.pyc
+tests/__pycache__/test_calc.cpython-39-pytest-6.2.5.pyc
+tests/__pycache__/test_colls.cpython-39-pytest-6.2.5.pyc
+tests/__pycache__/test_debug.cpython-39-pytest-6.2.5.pyc
+tests/__pycache__/test_decorators.cpython-39-pytest-6.2.5.pyc
+tests/__pycache__/test_flow.cpython-39-pytest-6.2.5.pyc
+tests/__pycache__/test_funcmakers.cpython-39-pytest-6.2.5.pyc
+tests/__pycache__/test_funcolls.cpython-39-pytest-6.2.5.pyc
+tests/__pycache__/test_funcs.cpython-39-pytest-6.2.5.pyc
+tests/__pycache__/test_interface.cpython-39-pytest-6.2.5.pyc
+tests/__pycache__/test_objects.cpython-39-pytest-6.2.5.pyc
+tests/__pycache__/test_seqs.cpython-39-pytest-6.2.5.pyc
+tests/__pycache__/test_strings.cpython-39-pytest-6.2.5.pyc
+tests/__pycache__/test_tree.cpython-39-pytest-6.2.5.pyc
+tests/__pycache__/test_types.cpython-39-pytest-6.2.5.pyc
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/setup.py new/funcy-1.17/setup.py
--- old/funcy-1.16/setup.py     2021-05-07 13:22:59.000000000 +0200
+++ new/funcy-1.17/setup.py     2021-12-20 06:31:39.000000000 +0100
@@ -3,9 +3,7 @@
 
 # Remove build status and move Gitter link under title for PyPi
 README = open('README.rst').read()    \
-    .replace('|Build Status|', '', 1) \
-    .replace('|Gitter|', '', 1)       \
-    .replace('===\n', '===\n\n|Gitter|\n')
+    .replace('|Build Status|', '', 1)
 
 
 setup(
@@ -16,6 +14,7 @@
 
     description='A fancy and practical functional tools',
     long_description=README,
+    long_description_content_type="text/x-rst",
     url='http://github.com/Suor/funcy',
     license='BSD',
 
@@ -35,6 +34,7 @@
         'Programming Language :: Python :: 3.7',
         'Programming Language :: Python :: 3.8',
         'Programming Language :: Python :: 3.9',
+        'Programming Language :: Python :: 3.10',
         'Programming Language :: Python :: Implementation :: CPython',
         'Programming Language :: Python :: Implementation :: PyPy',
 
Binary files old/funcy-1.16/tests/__init__.pyc and 
new/funcy-1.17/tests/__init__.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/__init__.cpython-35.pyc and 
new/funcy-1.17/tests/__pycache__/__init__.cpython-35.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/__init__.cpython-36.pyc and 
new/funcy-1.17/tests/__pycache__/__init__.cpython-36.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/__init__.cpython-37.pyc and 
new/funcy-1.17/tests/__pycache__/__init__.cpython-37.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/__init__.cpython-38.pyc and 
new/funcy-1.17/tests/__pycache__/__init__.cpython-38.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/__init__.cpython-39.pyc and 
new/funcy-1.17/tests/__pycache__/__init__.cpython-39.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/__init__.pypy-41.pyc and 
new/funcy-1.17/tests/__pycache__/__init__.pypy-41.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_calc.cpython-27-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_calc.cpython-27-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_calc.cpython-35-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_calc.cpython-35-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_calc.cpython-35-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_calc.cpython-35-pytest-5.0.1.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_calc.cpython-36-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_calc.cpython-36-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_calc.cpython-37-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_calc.cpython-37-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_calc.cpython-37-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_calc.cpython-37-pytest-5.0.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_calc.cpython-38-pytest-5.3.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_calc.cpython-38-pytest-5.3.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_calc.cpython-38-pytest-5.4.3.pyc and 
new/funcy-1.17/tests/__pycache__/test_calc.cpython-38-pytest-5.4.3.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_calc.cpython-39-pytest-6.2.5.pyc and 
new/funcy-1.17/tests/__pycache__/test_calc.cpython-39-pytest-6.2.5.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_calc.pypy-41-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_calc.pypy-41-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_colls.cpython-27-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_colls.cpython-27-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_colls.cpython-35-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_colls.cpython-35-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_colls.cpython-35-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_colls.cpython-35-pytest-5.0.1.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_colls.cpython-36-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_colls.cpython-36-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_colls.cpython-37-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_colls.cpython-37-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_colls.cpython-37-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_colls.cpython-37-pytest-5.0.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_colls.cpython-38-pytest-5.3.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_colls.cpython-38-pytest-5.3.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_colls.cpython-38-pytest-5.4.3.pyc and 
new/funcy-1.17/tests/__pycache__/test_colls.cpython-38-pytest-5.4.3.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_colls.cpython-39-pytest-6.2.5.pyc and 
new/funcy-1.17/tests/__pycache__/test_colls.cpython-39-pytest-6.2.5.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_colls.pypy-41-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_colls.pypy-41-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_debug.cpython-27-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_debug.cpython-27-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_debug.cpython-35-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_debug.cpython-35-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_debug.cpython-35-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_debug.cpython-35-pytest-5.0.1.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_debug.cpython-36-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_debug.cpython-36-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_debug.cpython-37-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_debug.cpython-37-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_debug.cpython-37-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_debug.cpython-37-pytest-5.0.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_debug.cpython-38-pytest-5.3.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_debug.cpython-38-pytest-5.3.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_debug.cpython-38-pytest-5.4.3.pyc and 
new/funcy-1.17/tests/__pycache__/test_debug.cpython-38-pytest-5.4.3.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_debug.cpython-39-pytest-6.2.5.pyc and 
new/funcy-1.17/tests/__pycache__/test_debug.cpython-39-pytest-6.2.5.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_debug.pypy-41-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_debug.pypy-41-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_decorators.cpython-27-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_decorators.cpython-27-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_decorators.cpython-35-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_decorators.cpython-35-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_decorators.cpython-35-pytest-5.0.1.pyc 
and 
new/funcy-1.17/tests/__pycache__/test_decorators.cpython-35-pytest-5.0.1.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_decorators.cpython-36-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_decorators.cpython-36-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_decorators.cpython-37-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_decorators.cpython-37-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_decorators.cpython-37-pytest-5.0.1.pyc 
and 
new/funcy-1.17/tests/__pycache__/test_decorators.cpython-37-pytest-5.0.1.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_decorators.cpython-38-pytest-5.3.1.pyc 
and 
new/funcy-1.17/tests/__pycache__/test_decorators.cpython-38-pytest-5.3.1.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_decorators.cpython-38-pytest-5.4.3.pyc 
and 
new/funcy-1.17/tests/__pycache__/test_decorators.cpython-38-pytest-5.4.3.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_decorators.cpython-39-pytest-6.2.5.pyc 
and 
new/funcy-1.17/tests/__pycache__/test_decorators.cpython-39-pytest-6.2.5.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_decorators.pypy-41-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_decorators.pypy-41-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_flow.cpython-27-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_flow.cpython-27-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_flow.cpython-35-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_flow.cpython-35-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_flow.cpython-35-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_flow.cpython-35-pytest-5.0.1.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_flow.cpython-36-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_flow.cpython-36-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_flow.cpython-37-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_flow.cpython-37-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_flow.cpython-37-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_flow.cpython-37-pytest-5.0.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_flow.cpython-38-pytest-5.3.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_flow.cpython-38-pytest-5.3.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_flow.cpython-38-pytest-5.4.3.pyc and 
new/funcy-1.17/tests/__pycache__/test_flow.cpython-38-pytest-5.4.3.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_flow.cpython-39-pytest-6.2.5.pyc and 
new/funcy-1.17/tests/__pycache__/test_flow.cpython-39-pytest-6.2.5.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_flow.pypy-41-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_flow.pypy-41-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-27-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-27-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-35-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-35-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-35-pytest-5.0.1.pyc 
and 
new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-35-pytest-5.0.1.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-36-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-36-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-37-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-37-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-37-pytest-5.0.1.pyc 
and 
new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-37-pytest-5.0.1.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-38-pytest-5.3.1.pyc 
and 
new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-38-pytest-5.3.1.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-38-pytest-5.4.3.pyc 
and 
new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-38-pytest-5.4.3.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcmakers.cpython-39-pytest-6.2.5.pyc 
and 
new/funcy-1.17/tests/__pycache__/test_funcmakers.cpython-39-pytest-6.2.5.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcmakers.pypy-41-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcmakers.pypy-41-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-27-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-27-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-35-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-35-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-35-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-35-pytest-5.0.1.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-36-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-36-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-37-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-37-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-37-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-37-pytest-5.0.1.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-38-pytest-5.3.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-38-pytest-5.3.1.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-38-pytest-5.4.3.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-38-pytest-5.4.3.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcolls.cpython-39-pytest-6.2.5.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcolls.cpython-39-pytest-6.2.5.pyc 
differ
Binary files old/funcy-1.16/tests/__pycache__/test_funcolls.pypy-41-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_funcolls.pypy-41-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_funcs.cpython-27-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_funcs.cpython-27-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_funcs.cpython-35-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_funcs.cpython-35-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcs.cpython-35-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcs.cpython-35-pytest-5.0.1.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_funcs.cpython-36-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_funcs.cpython-36-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_funcs.cpython-37-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_funcs.cpython-37-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcs.cpython-37-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcs.cpython-37-pytest-5.0.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcs.cpython-38-pytest-5.3.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcs.cpython-38-pytest-5.3.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcs.cpython-38-pytest-5.4.3.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcs.cpython-38-pytest-5.4.3.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_funcs.cpython-39-pytest-6.2.5.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcs.cpython-39-pytest-6.2.5.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_funcs.pypy-41-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_funcs.pypy-41-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_interface.cpython-27-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_interface.cpython-27-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_interface.cpython-35-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_interface.cpython-35-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_interface.cpython-35-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_interface.cpython-35-pytest-5.0.1.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_interface.cpython-36-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_interface.cpython-36-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_interface.cpython-37-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_interface.cpython-37-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_interface.cpython-37-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_interface.cpython-37-pytest-5.0.1.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_interface.cpython-38-pytest-5.3.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_interface.cpython-38-pytest-5.3.1.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_interface.cpython-38-pytest-5.4.3.pyc and 
new/funcy-1.17/tests/__pycache__/test_interface.cpython-38-pytest-5.4.3.pyc 
differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_interface.cpython-39-pytest-6.2.5.pyc and 
new/funcy-1.17/tests/__pycache__/test_interface.cpython-39-pytest-6.2.5.pyc 
differ
Binary files old/funcy-1.16/tests/__pycache__/test_interface.pypy-41-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_interface.pypy-41-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_objects.cpython-27-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_objects.cpython-27-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_objects.cpython-35-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_objects.cpython-35-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_objects.cpython-35-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_objects.cpython-35-pytest-5.0.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_objects.cpython-36-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_objects.cpython-36-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_objects.cpython-37-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_objects.cpython-37-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_objects.cpython-37-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_objects.cpython-37-pytest-5.0.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_objects.cpython-38-pytest-5.3.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_objects.cpython-38-pytest-5.3.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_objects.cpython-38-pytest-5.4.3.pyc and 
new/funcy-1.17/tests/__pycache__/test_objects.cpython-38-pytest-5.4.3.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_objects.cpython-39-pytest-6.2.5.pyc and 
new/funcy-1.17/tests/__pycache__/test_objects.cpython-39-pytest-6.2.5.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_objects.pypy-41-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_objects.pypy-41-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_seqs.cpython-27-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_seqs.cpython-27-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_seqs.cpython-35-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_seqs.cpython-35-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_seqs.cpython-35-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_seqs.cpython-35-pytest-5.0.1.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_seqs.cpython-36-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_seqs.cpython-36-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_seqs.cpython-37-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_seqs.cpython-37-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_seqs.cpython-37-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_seqs.cpython-37-pytest-5.0.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_seqs.cpython-38-pytest-5.3.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_seqs.cpython-38-pytest-5.3.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_seqs.cpython-38-pytest-5.4.3.pyc and 
new/funcy-1.17/tests/__pycache__/test_seqs.cpython-38-pytest-5.4.3.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_seqs.cpython-39-pytest-6.2.5.pyc and 
new/funcy-1.17/tests/__pycache__/test_seqs.cpython-39-pytest-6.2.5.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_seqs.pypy-41-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_seqs.pypy-41-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_strings.cpython-27-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_strings.cpython-27-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_strings.cpython-35-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_strings.cpython-35-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_strings.cpython-35-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_strings.cpython-35-pytest-5.0.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_strings.cpython-36-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_strings.cpython-36-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_strings.cpython-37-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_strings.cpython-37-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_strings.cpython-37-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_strings.cpython-37-pytest-5.0.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_strings.cpython-38-pytest-5.3.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_strings.cpython-38-pytest-5.3.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_strings.cpython-38-pytest-5.4.3.pyc and 
new/funcy-1.17/tests/__pycache__/test_strings.cpython-38-pytest-5.4.3.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_strings.cpython-39-pytest-6.2.5.pyc and 
new/funcy-1.17/tests/__pycache__/test_strings.cpython-39-pytest-6.2.5.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_strings.pypy-41-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_strings.pypy-41-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_tree.cpython-27-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_tree.cpython-27-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_tree.cpython-35-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_tree.cpython-35-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_tree.cpython-35-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_tree.cpython-35-pytest-5.0.1.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_tree.cpython-36-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_tree.cpython-36-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_tree.cpython-37-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_tree.cpython-37-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_tree.cpython-37-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_tree.cpython-37-pytest-5.0.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_tree.cpython-38-pytest-5.3.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_tree.cpython-38-pytest-5.3.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_tree.cpython-38-pytest-5.4.3.pyc and 
new/funcy-1.17/tests/__pycache__/test_tree.cpython-38-pytest-5.4.3.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_tree.cpython-39-pytest-6.2.5.pyc and 
new/funcy-1.17/tests/__pycache__/test_tree.cpython-39-pytest-6.2.5.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_tree.pypy-41-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_tree.pypy-41-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_types.cpython-27-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_types.cpython-27-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_types.cpython-35-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_types.cpython-35-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_types.cpython-35-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_types.cpython-35-pytest-5.0.1.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_types.cpython-36-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_types.cpython-36-PYTEST.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_types.cpython-37-PYTEST.pyc 
and new/funcy-1.17/tests/__pycache__/test_types.cpython-37-PYTEST.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_types.cpython-37-pytest-5.0.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_types.cpython-37-pytest-5.0.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_types.cpython-38-pytest-5.3.1.pyc and 
new/funcy-1.17/tests/__pycache__/test_types.cpython-38-pytest-5.3.1.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_types.cpython-38-pytest-5.4.3.pyc and 
new/funcy-1.17/tests/__pycache__/test_types.cpython-38-pytest-5.4.3.pyc differ
Binary files 
old/funcy-1.16/tests/__pycache__/test_types.cpython-39-pytest-6.2.5.pyc and 
new/funcy-1.17/tests/__pycache__/test_types.cpython-39-pytest-6.2.5.pyc differ
Binary files old/funcy-1.16/tests/__pycache__/test_types.pypy-41-PYTEST.pyc and 
new/funcy-1.17/tests/__pycache__/test_types.pypy-41-PYTEST.pyc differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/tests/test_colls.py 
new/funcy-1.17/tests/test_colls.py
--- old/funcy-1.16/tests/test_colls.py  2021-03-21 07:01:39.000000000 +0100
+++ new/funcy-1.17/tests/test_colls.py  2021-09-04 10:23:15.000000000 +0200
@@ -240,7 +240,6 @@
     assert get_in(d, ["a", "b"]) == "c"
     assert get_in(d, ["a", "f", "g"]) == "h"
 
-
 def test_get_in_list():
     assert get_in([1, 2], [0]) == 1
     assert get_in([1, 2], [3]) is None
@@ -263,14 +262,12 @@
     assert d3['e'] == {'f': 42}
     assert d3['a'] is d['a']
 
-
 def test_set_in_list():
     l = [{}, 1]
     l2 = set_in(l, [1], 7)
     assert l2 == [{}, 7]
     assert l2[0] is l[0]
 
-
 def test_update_in():
     d = {'c': []}
 
@@ -280,6 +277,14 @@
     assert d2['a']['b'] == 1
     assert d2['c'] is d['c']
 
+def test_del_in():
+    d = {'c': [1, 2, 3]}
+
+    assert del_in(d, []) is d
+    assert del_in(d, ['a', 'b']) is d
+    assert del_in(d, ['c', 1]) == {'c': [1, 3]}
+    with pytest.raises(TypeError): del_in(d, ['c', 'b'])
+
 def test_has_path():
     d = {
         "a": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/tests/test_decorators.py 
new/funcy-1.17/tests/test_decorators.py
--- old/funcy-1.16/tests/test_decorators.py     2021-05-08 07:58:29.000000000 
+0200
+++ new/funcy-1.17/tests/test_decorators.py     2021-05-10 15:54:30.000000000 
+0200
@@ -31,13 +31,13 @@
     def add(call, **kwargs):  # TODO: use real kw-only args in Python 3
         return call() + kwargs.get("n", 1)
 
-    def ten():
+    def ten(a, b):
         return 10
 
     # Should work with or without parentheses
-    assert add(n=2)(ten)() == 12
-    assert add()(ten)() == 11
-    assert add(ten)() == 11
+    assert add(n=2)(ten)(1, 2) == 12
+    assert add()(ten)(1, 2) == 11
+    assert add(ten)(1, 2) == 11
 
 
 def test_decorator_access_arg():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/tests/test_flow.py 
new/funcy-1.17/tests/test_flow.py
--- old/funcy-1.16/tests/test_flow.py   2021-05-09 05:03:27.000000000 +0200
+++ new/funcy-1.17/tests/test_flow.py   2021-07-17 13:04:02.000000000 +0200
@@ -172,6 +172,15 @@
     assert calls == [1, 3]
 
 
+def test_throttle_class():
+    class A:
+        def foo(self):
+            return 42
+
+    a = A()
+    assert throttle(1)(a.foo)() == 42
+
+
 def test_post_processing():
     @post_processing(max)
     def my_max(l):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/funcy-1.16/tests/test_funcs.py 
new/funcy-1.17/tests/test_funcs.py
--- old/funcy-1.16/tests/test_funcs.py  2021-05-08 10:33:58.000000000 +0200
+++ new/funcy-1.17/tests/test_funcs.py  2021-11-11 10:28:40.000000000 +0100
@@ -28,7 +28,7 @@
 
     assert A().f() == 11
 
-def test_back_partial():
+def test_rpartial():
     assert rpartial(__sub__, 10)(1) == -9
     assert rpartial(pow, 2, 85)(10) == 15
 
@@ -53,6 +53,7 @@
 def test_rcurry():
     assert rcurry(__sub__, 2)(10)(1) == -9
     assert rcurry(lambda x,y,z: x+y+z)('a')('b')('c') == 'cba'
+    assert rcurry(str.endswith, 2)('c')('abc') is True
 
 def test_autocurry():
     at = autocurry(lambda a, b, c: (a, b, c))
@@ -97,6 +98,8 @@
     assert autocurry(complex)(imag=1)(0) == 1j
     assert autocurry(map)(_ + 1)([1, 2]) == [2, 3]
     assert autocurry(int)(base=12)('100') == 144
+    # Only works in newer Pythons, relies on inspect.signature()
+    # assert autocurry(str.split)(sep='_')('a_1') == ['a', '1']
 
 def test_autocurry_hard():
     def required_star(f, *seqs):

Reply via email to