コード例 #1
0
class LimitRateDriverMixin(object):
    requests_per_period = 3
    period = 1  #seconds

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._queue = TaskQueue(self.requests_per_period, self.period)

    @wait_free_slot
    async def json(self, *args, **kwargs):
        return await super().json(*args, **kwargs)

    @wait_free_slot
    async def get_text(self, *args, **kwargs):
        return await super().get_text(*args, **kwargs)

    @wait_free_slot
    async def get_bin(self, *args, **kwargs):
        return await super().get_bin(*args, **kwargs)

    @wait_free_slot
    async def post_text(self, *args, **kwargs):
        return await super().post_text(*args, **kwargs)

    def close(self):
        super().close()
        self._queue.canel()
コード例 #2
0
ファイル: mixins.py プロジェクト: Fahreeve/aiovk
class LimitRateDriverMixin:
    requests_per_period = 3
    period = 1  # seconds

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._queue = TaskQueue(self.requests_per_period, self.period)

    @wait_free_slot
    async def json(self, *args, **kwargs):
        return await super().json(*args, **kwargs)

    @wait_free_slot
    async def get_text(self, *args, **kwargs):
        return await super().get_text(*args, **kwargs)

    @wait_free_slot
    async def get_bin(self, *args, **kwargs):
        return await super().get_bin(*args, **kwargs)

    @wait_free_slot
    async def post_text(self, *args, **kwargs):
        return await super().post_text(*args, **kwargs)

    async def close(self):
        await super().close()
        self._queue.canel()
コード例 #3
0
 async def test_long_init(self):
     size = 1
     period = 1
     q = TaskQueue(size, period)
     self.assertEqual(q.qsize(), size)
     await asyncio.sleep(period + 1)
     self.assertEqual(q.qsize(), size)
     q.canel()
コード例 #4
0
 async def test_get_elem_and_pause(self):
     size = 1
     period = 1
     q = TaskQueue(size, period)
     self.assertEqual(q.qsize(), size)
     await q.get()
     self.assertEqual(q.qsize(), size - 1)
     await asyncio.sleep(period + 1)
     self.assertEqual(q.qsize(), size)
     q.canel()
コード例 #5
0
    async def test_simple_usage(self):
        @wait_free_slot
        async def foo(a):
            pass

        size = 1
        period = 1
        q = TaskQueue(size, period)
        obj = Mock()
        obj._queue = q

        await foo(obj)
        self.assertEqual(q.qsize(), size - 1)
        q.canel()
コード例 #6
0
    async def test_get_all_plus_one_elem(self):
        size = 1
        period = 1
        q = TaskQueue(size, period)
        self.assertEqual(q.qsize(), size)
        await q.get()

        start = time.time()
        await q.get()
        stop = time.time()

        self.assertEqual(math.floor(stop - start), period)
        self.assertEqual(q.qsize(), 0)
        q.canel()
コード例 #7
0
    async def test_with_pause(self):
        @wait_free_slot
        async def foo(a):
            pass

        size = 1
        period = 1
        q = TaskQueue(size, period)
        obj = Mock()
        obj._queue = q
        await q.get()

        start = time.time()
        await foo(obj)
        stop = time.time()

        self.assertEqual(math.floor(stop - start), period)
        self.assertEqual(q.qsize(), 0)
        q.canel()