swampdragon
swampdragon copied to clipboard
0.4.3: DRF Serializer AttributeError: type object 'ToDoItemSerializer' has no attribute 'get_base_channel'
I noticed that the 0.4.3 branch is supposed to have DRF Serializer support, which is a feature I'm looking forward to very much. While attempting to use that branch though I ran into the following error:
ERROR:tornado.general:WebSocket
Traceback (most recent call last):
File "****\Python35-32\lib\site-packages\sockjs\tornado\transports\websocket.py", line 60, in on_message
self.session.on_messages(msg)
File "****\Python35-32\lib\site-packages\sockjs\tornado\session.py", line 418, in on_messages
self.conn.on_message(msg)
File "****\Python35-32\lib\site-packages\swampdragon-0.4.2.2-py3.5.egg\swampdragon\connections\sockjs_connection.py", line 87, in on_message
handler(self).handle(data)
File "****\Python35-32\lib\site-packages\swampdragon-0.4.2.2-py3.5.egg\swampdragon\route_handler.py", line 66, in handle
m(**kwargs)
File "****\Python35-32\lib\site-packages\swampdragon-0.4.2.2-py3.5.egg\swampdragon\route_handler.py", line 266, in subscribe
server_channels = make_channels(self.serializer_class, self.include_related, self.get_subscription_contexts(**kwargs))
File "****\Python35-32\lib\site-packages\swampdragon-0.4.2.2-py3.5.egg\swampdragon\pubsub_providers\model_channel_builder.py", line 21, in make_channels
base_channel = serializer.get_base_channel()
AttributeError: type object 'ToDoItemSerializer' has no attribute 'get_base_channel'
As far as I know I completely copied the setup as described in the tests/models.py
, tests/serializers_drf.py
, and tests/test_drf_serializer.py
. I also tried running the test cases myself but there I ran into the error AttributeError: 'Action' object has no attribute 'envconfig'
I'm hoping you could shed some light on what I'm doing wrong here.
models.py
from django.contrib.auth.models import User, Group
from django.db import models
class ToDoItem(models.Model):
created = models.DateTimeField(auto_now_add=True)
task = models.CharField(max_length=100, blank=True, default='')
completed = models.BooleanField(default=False)
owner = models.ForeignKey('auth.User', related_name='todos')
serializers.py
from .models import ToDoItem
from rest_framework.serializers import ModelSerializer as DRFModelSerializer
class ToDoItemSerializer(DRFModelSerializer):
class Meta:
model = ToDoItem
routers.py
from swampdragon import route_handler
from swampdragon.route_handler import BaseModelRouter
from .models import ToDoItem
from .serializers import ToDoItemSerializer
class ToDoItemRouter(BaseModelRouter):
route_name = 'todoSocket'
serializer_class = ToDoItemSerializer
model = ToDoItem
def get_object(self, **kwargs):
return self.model.objects.first()
def get_query_set(self, **kwargs):
return self.model.objects.all()
route_handler.register(ToDoItemRouter)