| f | import asyncio | f | import asyncio | 
            |  |  |  |  | 
            |  | class FilterQueue(asyncio.Queue): |  | class FilterQueue(asyncio.Queue): | 
            |  |  |  |  | 
            | n | def __init__(self, *args, **kwargs): | n | def __init__(self, *a, **b): | 
            |  | super().__init__(*args, **kwargs) |  | super().__init__(*a, **b) | 
            |  | self.window = None |  | self.window = None | 
            |  |  |  |  | 
            | n | def _put(self, item): | n | def _put(self, y): | 
            |  | self._queue.append(item) |  | self._queue.append(y) | 
            |  | if self.window is None: |  | if self.window is None: | 
            | n | self.window = item | n | self.window = y | 
            |  |  |  |  | 
            | n | def __contains__(self, checker): | n | def __contains__(self, c): | 
            |  | for item in self._queue: |  | for d in self._queue: | 
            |  | if checker(item): |  | if c(d): | 
            |  | return True |  | return True | 
            |  | return False |  | return False | 
            |  |  |  |  | 
            |  | def _get(self): |  | def _get(self): | 
            | n | item = self._queue.popleft() | n | e = self._queue.popleft() | 
            |  | if self._queue: |  | if self._queue: | 
            |  | self.window = self._queue[0] |  | self.window = self._queue[0] | 
            |  | else: |  | else: | 
            |  | self.window = None |  | self.window = None | 
            | n | return item | n | return e | 
            |  |  |  |  | 
            |  | def later(self): |  | def later(self): | 
            |  | if not self._queue: |  | if not self._queue: | 
            |  | self.window = None |  | self.window = None | 
            |  | raise asyncio.QueueEmpty |  | raise asyncio.QueueEmpty | 
            | n | item = self._get() | n | g = self._get() | 
            |  | self._put(item) |  | self._put(g) | 
            |  |  |  |  | 
            | n | async def get(self, checker=None): | n | async def get(self, h=None): | 
            |  | if checker is not None and checker in self: |  | if h is not None and h in self: | 
            |  | while not checker(self.window): |  | while not h(self.window): | 
            |  | self.later() |  | self.later() | 
            |  | while self.empty(): |  | while self.empty(): | 
            | n | future = self._get_loop().create_future() | n | i = self._get_loop().create_future() | 
            |  | self._getters.append(future) |  | self._getters.append(i) | 
            |  | try: |  | try: | 
            | n | await future | n | await i | 
            |  | except: |  | except: | 
            | n | future.cancel() | n | i.cancel() | 
            |  | try: |  | try: | 
            | n | self._getters.remove(future) | n | self._getters.remove(i) | 
            |  | except ValueError: |  | except ValueError: | 
            |  | pass |  | pass | 
            | t | if not self.empty() and (not future.cancelled()): | t | if not self.empty() and (not i.cancelled()): | 
            |  | self._wakeup_next(self._getters) |  | self._wakeup_next(self._getters) | 
            |  | raise |  | raise | 
            |  | return self.get_nowait() |  | return self.get_nowait() |