Fala Pedro! Olhei a documentação aqui e não entendi uma coisa. Você chama o método .send
nessa linha do erro e esse método não está definido em NotificationConsumer
pelo que vi. Esse método, por acaso, é herdado de AsyncWebsocketConsumer
?
É sim Otto! Eu herdo esse método da classe. Mas acabei descobrindo o problema. Por algum motivo, eu naturalmente não consigo acessar alguns atributos da classe fora de seu próprio escopo. Nunca tinha visto isso antes no python. Acho que me falta algum conhecimento sobre orientação a objetos, e sobre como a declaração e acesso de atributos funciona, já que no python não existem variáveis privadas, apenas representações das mesmas.
Para corrigir o problema eu tive que importar uma função da própria biblioteca channels
, e uma outra função para que pudesse utilizar métodos assíncronos dentro de um outro método que é síncrono.
from asgiref.sync import async_to_sync
from channels.layers import get_channel_layer
E depois, foi só seguir normalmente a documentação, chamando os métodos como descritos nela. Declarando qual o nome do grupo, o tipo, e a mensagem a ser enviada, consegui fazer funcionar.
data = json.loads(body.decode())
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)('chat_my_room', {'type': 'notification', 'message': data})