Алдабергенов Руслан Даниярович, 411 FilterQueue 17859
Абдикашева Вилена Ринатовна, 411 группа FilterQueue 17941
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    def __contains__(self, filter_func):10    def __contains__(self, filter_func):
11        return any((filter_func(item) for item in self._queue))11        return any((filter_func(item) for item in self._queue))
1212
13    @property13    @property
14    def window(self):14    def window(self):
15        return self._queue[0] if not self.empty() else None15        return self._queue[0] if not self.empty() else None
1616
17    def later(self):17    def later(self):
18        if self.empty():18        if self.empty():
19            raise asyncio.QueueEmpty19            raise asyncio.QueueEmpty
20        item = self._queue.popleft()20        item = self._queue.popleft()
21        self._queue.append(item)21        self._queue.append(item)
2222
23    async def get(self, filter_func=None):23    async def get(self, filter_func=None):
24        if filter_func is None:24        if filter_func is None:
25            return await super().get()25            return await super().get()
26        for _ in range(len(self._queue)):26        for _ in range(len(self._queue)):
27            item = self._queue[0]27            item = self._queue[0]
28            if filter_func(item):28            if filter_func(item):
29                return await super().get()29                return await super().get()
30            self.later()30            self.later()
31        return await super().get()31        return await super().get()
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op