Жангирхан Шаку, 404 FilterQueue 17995
Арсен Жуматай,304 FilterQueue 17854
t1import asynciot1import asyncio
2from collections import deque2from collections import deque
33
4class FilterQueue(asyncio.Queue):4class FilterQueue(asyncio.Queue):
55
6    def __init__(self, maxsize=0):6    def __init__(self, maxsize=0):
7        super().__init__(maxsize)7        super().__init__(maxsize)
8        self._window = None8        self._window = None
99
10    @property10    @property
11    def window(self):11    def window(self):
12        if self.empty():12        if self.empty():
13            return None13            return None
14        return self._queue[0]14        return self._queue[0]
1515
16    def __contains__(self, filter_func):16    def __contains__(self, filter_func):
17        return any((filter_func(item) for item in self._queue))17        return any((filter_func(item) for item in self._queue))
1818
19    def later(self):19    def later(self):
20        if self.empty():20        if self.empty():
21            raise asyncio.QueueEmpty21            raise asyncio.QueueEmpty
22        item = self._queue.popleft()22        item = self._queue.popleft()
23        self._queue.append(item)23        self._queue.append(item)
2424
25    async def get(self, filter_func=None):25    async def get(self, filter_func=None):
26        if filter_func is None:26        if filter_func is None:
27            return await super().get()27            return await super().get()
28        for _ in range(len(self._queue)):28        for _ in range(len(self._queue)):
29            item = self._queue[0]29            item = self._queue[0]
30            if filter_func(item):30            if filter_func(item):
31                return await super().get()31                return await super().get()
32            self.later()32            self.later()
33        return await super().get()33        return await super().get()
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op