commit:     71c59145e0c7b631ec3f41e0d711445786d16f8f
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu Mar 15 02:45:31 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu Mar 15 02:49:02 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=71c59145

portage.util.futures.wait: fix arguments for asyncio compat

The bare "*" is not supported in python2.7, and in python3
the bare "*" means that keyword arguments must be used for
the arguments that follow.

Fixes: e43f6c583ed9 ("Add iter_completed convenience function (bug 648790)")

 pym/portage/util/futures/iter_completed.py |  2 +-
 pym/portage/util/futures/wait.py           | 16 +++-------------
 2 files changed, 4 insertions(+), 14 deletions(-)

diff --git a/pym/portage/util/futures/iter_completed.py 
b/pym/portage/util/futures/iter_completed.py
index 1050b6fa7..ad6275b49 100644
--- a/pym/portage/util/futures/iter_completed.py
+++ b/pym/portage/util/futures/iter_completed.py
@@ -52,7 +52,7 @@ def iter_completed(futures, max_jobs=None, max_load=None, 
loop=None):
                # task_generator is exhausted
                while future_map:
                        done, pending = loop.run_until_complete(
-                               wait(*list(future_map.values()), 
return_when=FIRST_COMPLETED))
+                               wait(list(future_map.values()), 
return_when=FIRST_COMPLETED))
                        for future in done:
                                del future_map[id(future)]
                                yield future

diff --git a/pym/portage/util/futures/wait.py b/pym/portage/util/futures/wait.py
index 3f0bdbff5..bd85bb053 100644
--- a/pym/portage/util/futures/wait.py
+++ b/pym/portage/util/futures/wait.py
@@ -11,15 +11,13 @@ except ImportError:
 from portage.util._eventloop.global_event_loop import global_event_loop
 
 
-# Use **kwargs since python2.7 does not allow arguments with defaults
-# to follow *futures.
-def wait(*futures, **kwargs):
+def wait(futures, loop=None, timeout=None, return_when=ALL_COMPLETED):
        """
        Use portage's internal EventLoop to emulate asyncio.wait:
        https://docs.python.org/3/library/asyncio-task.html#asyncio.wait
 
-       @param future: future to wait for
-       @type future: asyncio.Future (or compatible)
+       @param futures: futures to wait for
+       @type futures: asyncio.Future (or compatible)
        @param timeout: number of seconds to wait (wait indefinitely if
                not specified)
        @type timeout: int or float
@@ -32,14 +30,6 @@ def wait(*futures, **kwargs):
        @return: tuple of (done, pending).
        @rtype: asyncio.Future (or compatible)
        """
-       if not futures:
-               raise TypeError("wait() missing 1 required positional argument: 
'future'")
-       loop = kwargs.pop('loop', None)
-       timeout = kwargs.pop('timeout', None)
-       return_when = kwargs.pop('return_when', ALL_COMPLETED)
-       if kwargs:
-               raise TypeError("wait() got an unexpected keyword argument 
'{}'".\
-                       format(next(iter(kwargs))))
        loop = loop or global_event_loop()
        result_future = loop.create_future()
        _Waiter(futures, timeout, return_when, result_future, loop)

Reply via email to