hagsteel / swampdragon

swampdragon
Other
557 stars 73 forks source link

0.4.3: DRF Serializer AttributeError: type object 'ToDoItemSerializer' has no attribute 'get_base_channel' #183

Open MBrouns opened 8 years ago

MBrouns commented 8 years ago

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)