Commit b732bc8b authored by Antoine Millet's avatar Antoine Millet
Browse files

Added AsyncManager.iter iterator.

parent 5c471b8c
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -76,7 +76,19 @@ class AsyncWatcher(object):
             >>> for msg in watcher.wait(timeout=60):
             >>>     process(msg)
        '''
        responses = []
        return list(self.iter(timeout, max_wait))

    def iter(self, timeout=None, max_wait=None):
        '''
        Work like :meth:`AsyncWatcher.wait` but return an iterable, instead of
        a list object.

        .. note::

           Responses are yielded by the iterable when they are received, so you
           can start the processing of response before receiving all.
        '''

        while self.remains:
            try:
                dt, response = self._get_in_queue(timeout=timeout)
@@ -84,12 +96,10 @@ class AsyncWatcher(object):
                break
            if timeout is not None:
                timeout -= dt
            responses.append(response)
            self._expected_responses.remove(response['id'])
            yield response
            # Check for max_wait:
            if max_wait is not None:
                max_wait -= 1
                if not max_wait:
                    break
        return responses