示例#1
0
 async def _async_notify_consumers(self, data):
     try:
         # send notification only if is a notification channel is running
         get_chan(self.FEED_CHANNEL.get_name())
         await self.feed_send_coroutine(data)
     except KeyError:
         self.logger.error(
             "Can't send notification data: no initialized channel found")
示例#2
0
async def test_unregister_producer():
    del_chan(EMPTY_TEST_CHANNEL)
    await create_channel_instance(EmptyTestChannel, set_chan)
    assert get_chan(EMPTY_TEST_CHANNEL).producers == []
    producer = EmptyTestProducer(None)
    await get_chan(EMPTY_TEST_CHANNEL).register_producer(producer)
    assert get_chan(EMPTY_TEST_CHANNEL).producers == [producer]
    await get_chan(EMPTY_TEST_CHANNEL).stop()
示例#3
0
async def test_remove_consumer():
    del_chan(EMPTY_TEST_CHANNEL)
    await create_channel_instance(EmptyTestChannel, set_chan)
    consumer = await get_chan(EMPTY_TEST_CHANNEL).new_consumer(empty_test_callback)
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumers() == [consumer]
    await get_chan(EMPTY_TEST_CHANNEL).remove_consumer(consumer)
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumers() == []
    await get_chan(EMPTY_TEST_CHANNEL).stop()
async def send_notification(notification: Notification) -> None:
    try:
        # send notification only if is a notification channel is running
        get_chan(NotificationChannel.get_name())
        await NotificationChannelProducer.instance().send(
            {"notification": notification})
    except KeyError:
        if len(pending_notifications) < MAX_PENDING_NOTIFICATION:
            pending_notifications.append(notification)
示例#5
0
async def test_get_internal_producer():
    class TestChannel(Channel):
        pass

    del_chan(TEST_CHANNEL)
    await create_channel_instance(TestChannel, set_chan)
    with pytest.raises(TypeError):
        get_chan(TEST_CHANNEL).get_internal_producer()
    await get_chan(TEST_CHANNEL).stop()
示例#6
0
async def test_new_consumer_with_filters():
    del_chan(EMPTY_TEST_CHANNEL)
    await create_channel_instance(EmptyTestChannel, set_chan)
    consumer = await get_chan(EMPTY_TEST_CHANNEL).new_consumer(empty_test_callback, {"test_key": 1})
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumers() == [consumer]
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters({}) == [consumer]   # returns all if empty
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters({"test_key": 2}) == []
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters({"test_key": 1, "test2": 2}) == []
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters({"test_key": 1}) == [consumer]
    await get_chan(EMPTY_TEST_CHANNEL).stop()
示例#7
0
async def test_send_producer_without_consumer():
    class TestProducer(Producer):
        async def send(self, data, **kwargs):
            await super().send(data)
            await get_chan(TEST_CHANNEL).stop()

        async def pause(self):
            pass

        async def resume(self):
            pass

    class TestConsumer(Consumer):
        async def consume(self):
            while not self.should_stop:
                await self.callback(**(await self.queue.get()))

    class TestChannel(Channel):
        PRODUCER_CLASS = TestProducer
        CONSUMER_CLASS = TestConsumer

    del_chan(TEST_CHANNEL)
    await create_channel_instance(TestChannel, set_chan)

    producer = TestProducer(get_chan(TEST_CHANNEL))
    await producer.run()
    await producer.send({})
 async def _create_notification_channel_if_not_existing() -> Channel:
     try:
         return get_chan(NotificationChannel.get_name())
     except KeyError:
         channel = await create_channel_instance(NotificationChannel, set_chan)
         await channel.register_producer(NotificationChannelProducer.instance(channel))
         return channel
async def init_consumer_test():
    class TestChannel(Channel):
        PRODUCER_CLASS = EmptyTestProducer
        CONSUMER_CLASS = EmptyTestConsumer

    del_chan(TEST_CHANNEL)
    await create_channel_instance(TestChannel, set_chan)
    producer = EmptyTestProducer(get_chan(TEST_CHANNEL))
    await producer.run()
    return await get_chan(TEST_CHANNEL).new_consumer(empty_test_callback)
    async def initialize(self):
        try:
            self.time_manager = TimeManager(self.config)
            self.time_manager.initialize()

            await create_channel_instance(TimeChannel, set_chan)

            await TimeUpdater(get_chan(TIME_CHANNEL), self).run()
        except Exception as e:
            self.logger.error(f"Error when initializing backtesting : {e}.")
            self.logger.exception(e)
示例#11
0
async def test_producer_is_running():
    class TestChannel(Channel):
        PRODUCER_CLASS = EmptyTestProducer

    del_chan(TEST_CHANNEL)
    await create_channel_instance(TestChannel, set_chan)
    producer = EmptyTestProducer(get_chan(TEST_CHANNEL))
    assert not producer.is_running
    await producer.run()
    assert producer.is_running
    await get_chan(TEST_CHANNEL).stop()
    assert not producer.is_running
async def test_supervised_consumer():
    class TestSupervisedConsumer(SupervisedConsumer):
        pass

    class TestChannel(Channel):
        PRODUCER_CLASS = EmptyTestProducer
        CONSUMER_CLASS = TestSupervisedConsumer

    del_chan(TEST_CHANNEL)
    await create_channel_instance(TestChannel, set_chan)
    producer = EmptyTestProducer(get_chan(TEST_CHANNEL))
    await producer.run()
    consumer = await get_chan(TEST_CHANNEL).new_consumer(empty_test_callback)
    await get_chan(TEST_CHANNEL).get_internal_producer().send({})
    await consumer.queue.join()
    await get_chan(TEST_CHANNEL).stop()
示例#13
0
async def test_resume_producer():
    class TestSupervisedConsumer(SupervisedConsumer):
        pass

    class TestChannel(Channel):
        PRODUCER_CLASS = EmptyTestProducer
        CONSUMER_CLASS = TestSupervisedConsumer

    del_chan(TEST_CHANNEL)
    await create_channel_instance(TestChannel, set_chan)
    producer = EmptyTestProducer(get_chan(TEST_CHANNEL))
    await producer.run()
    await get_chan(TEST_CHANNEL).new_consumer(empty_test_callback)
    await get_chan(TEST_CHANNEL).new_consumer(empty_test_callback)
    await get_chan(TEST_CHANNEL).new_consumer(empty_test_callback)
    await producer.send({"data": "test"})
    await producer.wait_for_processing()
    await get_chan(TEST_CHANNEL).stop()
示例#14
0
async def test_pause_producer_without_consumers():
    class TestProducer(Producer):
        async def pause(self):
            await get_chan(TEST_CHANNEL).stop()

        async def pause(self):
            pass

        async def resume(self):
            pass

    class TestChannel(Channel):
        PRODUCER_CLASS = TestProducer
        CONSUMER_CLASS = EmptyTestConsumer

    del_chan(TEST_CHANNEL)
    await create_channel_instance(TestChannel, set_chan)
    await TestProducer(get_chan(TEST_CHANNEL)).run()
示例#15
0
async def test_send_producer_with_consumer():
    class TestConsumer(Consumer):
        pass

    class TestChannel(Channel):
        PRODUCER_CLASS = EmptyTestProducer
        CONSUMER_CLASS = TestConsumer

    async def callback(data):
        assert data == "test"
        await get_chan(TEST_CHANNEL).stop()

    del_chan(TEST_CHANNEL)
    await create_channel_instance(TestChannel, set_chan)
    await get_chan(TEST_CHANNEL).new_consumer(callback)

    producer = EmptyTestProducer(get_chan(TEST_CHANNEL))
    await producer.run()
    await producer.send({"data": "test"})
async def test_internal_consumer():
    class TestInternalConsumer(InternalConsumer):
        async def perform(self, kwargs):
            pass

    class TestChannel(Channel):
        PRODUCER_CLASS = EmptyTestProducer
        CONSUMER_CLASS = TestInternalConsumer

    del_chan(TEST_CHANNEL)
    await create_channel_instance(TestChannel, set_chan)
    producer = EmptyTestProducer(get_chan(TEST_CHANNEL))
    await producer.run()
    consumer = TestInternalConsumer()
    await get_chan(TEST_CHANNEL).new_consumer(internal_consumer=consumer)

    with patch.object(consumer, 'perform',
                      new=AsyncMock()) as mocked_consume_ends:
        await get_chan(TEST_CHANNEL).get_internal_producer().send({})
        await mock_was_called_once(mocked_consume_ends)

    await get_chan(TEST_CHANNEL).stop()
示例#17
0
async def test_new_consumer_without_producer():
    del_chan(EMPTY_TEST_CHANNEL)
    await create_channel_instance(EmptyTestChannel, set_chan)
    await get_chan(EMPTY_TEST_CHANNEL).new_consumer(empty_test_callback)
    assert len(get_chan(EMPTY_TEST_CHANNEL).consumers) == 1
    await get_chan(EMPTY_TEST_CHANNEL).stop()
示例#18
0
 async def _init_channel(self):
     channel = get_chan(self.FEED_CHANNEL.get_name())
     await channel.register_producer(self)
示例#19
0
async def test_new_consumer_with_consumer_wildcard_filters():
    del_chan(EMPTY_TEST_CHANNEL)
    await create_channel_instance(EmptyTestChannel, set_chan)
    consumer = await get_chan(EMPTY_TEST_CHANNEL).new_consumer(empty_test_callback, {"test_key": 1,
                                                                                     "test_key_2": "abc",
                                                                                     "test_key_3": CHANNEL_WILDCARD})
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumers() == [consumer]
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters({}) == [consumer]  # returns all if empty
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters({"test_key": 1, "test_key_2": "abc"}) == [consumer]
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters(
        {"test_key": 1, "test_key_2": "abc", "test_key_3": 45}) == [consumer]
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters(
        {"test_key": 1, "test_key_2": "abc", "test_key_3": CHANNEL_WILDCARD}) == [consumer]
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters({"test_key": 4, "test_key_2": "bc"}) == []
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters({"test_key": 1, "test_key_2": CHANNEL_WILDCARD}) == [
        consumer]
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters({"test_key": 1}) == [consumer]
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters({"test_key_2": CHANNEL_WILDCARD}) == [consumer]
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters({"test_key_3": CHANNEL_WILDCARD}) == [consumer]
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters({"test_key_3": "e"}) == [consumer]
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters({"test_key": 3, "test_key_2": CHANNEL_WILDCARD}) == []
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters(
        {"test_key": CHANNEL_WILDCARD, "test_key_2": "abc"}) == [consumer]
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters(
        {"test_key": CHANNEL_WILDCARD, "test_key_2": "a"}) == []
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters(
        {"test_key": CHANNEL_WILDCARD, "test_key_2": "a", "test_key_3": CHANNEL_WILDCARD}) == []
    assert get_chan(EMPTY_TEST_CHANNEL).get_consumer_from_filters(
        {"test_key": CHANNEL_WILDCARD, "test_key_2": CHANNEL_WILDCARD}) == [consumer]
    await get_chan(EMPTY_TEST_CHANNEL).stop()