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() |