Django Channels Rest Framework V3 @model_observer сообщение None

Я пытался найти в документации model observer что-либо, что могло бы объяснить, при каких условиях вызывается model observer с message = None, но ничего особо подсказывающего в нужном направлении не нашёл. Из того, что я понял из примера:

class MyConsumer(GenericAsyncAPIConsumer):
    queryset = User.objects.all()
    serializer_class = UserSerializer

    @model_observer(Comments)
    async def comment_activity(
        self,
        message: CommentSerializer,
        observer=None,
        subscribing_request_ids=[]
        **kwargs
    ):
        await self.send_json(message.data)

    @comment_activity.serializer
    def comment_activity(self, instance: Comment, action, **kwargs) -> CommentSerializer:
        '''This will return the comment serializer'''
        return CommentSerializer(instance)

    @action()
    async def subscribe_to_comment_activity(self, request_id, **kwargs):
        await self.comment_activity.subscribe(request_id=request_id)

Сообщение должно быть выходом сериализатора комментариев, поэтому единственная возможность для сообщения стать нулевым - это если сериализатор не вернет ничего!

Чтобы проверить, так ли это, я добавил отпечатки логов, которые, к сожалению, показывают, что сериализатор получает данные, и нет никаких причин, по которым сообщение могло бы быть None. Это также происходит только время от времени, поэтому любой совет о непонимании того, как работает наблюдатель внутри, будет высоко оценен.

В нашей реализации:

class StorageConsumer(ListModelMixin, AsyncAPIConsumer):
    """
    Async API endpoint that allows Storage updates to be pushed.
    """

    async def accept(self, **kwargs):
        await super().accept()
        await self.model_change_bess.subscribe()

    @model_observer(Bess)
    async def model_change_bess(self, message, **kwargs):
        if message is None:
            logger.warning(f"model_change_bess change without a message")
            return

        message["model"] = kwargs["observer"].model_cls.__name__
        await self.send_json(message)

    @model_change_bess.serializer
    def model_serialize(self, instance, action, **kwargs):
        data = BessSerializer(instance).data

        # TODO remove once the message is None bug is fixed
        logger.info(f"model_serialize bess instance: {instance} data: {data}")

        serialized_data = {
            "project_id": data["project"],
            "simulation_id": data["simulation"],
            "data": data,
        }
        return serialized_data

соответствующие логи в случае, если сообщение None, выглядят следующим образом:

16/06/2022 13:09:25 [INFO] api_consumers: model_serialize bess instance: Bess object (37227) data: {'id': 37227, 'created': '2022-06-16T13:09:25Z', 'modified': '2022-06-16T13:09:25Z', 'time_stamp': '2022-06-16T13:09:25Z', 'cycles': '0.02541166724274896000000000000000', 'p_bess': '-74.0000', 'soc': '0.45109075850806520000000000000000', 'soh': '0.99514591796314000000000000000000', 'temperature_bess': None, 'time_to_eol': None, 'feedback': True, 'project': 1, 'simulation': 1}
16/06/2022 13:09:25 [WARNING] api_consumers: model_change_bess change without a message
Вернуться на верх