Activity stream representations for user and favorites

This commit is contained in:
Eliot Berriot 2018-02-25 14:44:00 +01:00
commit 691665e3cf
No known key found for this signature in database
GPG key ID: DD6965E2476E5C27
12 changed files with 159 additions and 0 deletions

View file

View file

@ -0,0 +1,9 @@
from rest_framework import serializers
class ModelSerializer(serializers.ModelSerializer):
id = serializers.CharField(source='get_activity_url')
# url = serializers.SerializerMethodField()
def get_url(self, obj):
return self.get_id(obj)

View file

@ -1,8 +1,10 @@
from django.conf import settings
from django.db import models
from django.utils import timezone
from funkwhale_api.music.models import Track
class TrackFavorite(models.Model):
creation_date = models.DateTimeField(default=timezone.now)
user = models.ForeignKey(
@ -18,3 +20,7 @@ class TrackFavorite(models.Model):
def add(cls, track, user):
favorite, created = cls.objects.get_or_create(user=user, track=track)
return favorite
def get_activity_url(self):
return '{}/favorites/tracks/{}'.format(
self.user.get_activity_url(), self.pk)

View file

@ -1,10 +1,43 @@
from django.conf import settings
from rest_framework import serializers
from funkwhale_api.activity import serializers as activity_serializers
from funkwhale_api.music.serializers import TrackSerializerNested
from funkwhale_api.users.serializers import UserActivitySerializer
from . import models
class TrackFavoriteActivitySerializer(activity_serializers.ModelSerializer):
type = serializers.SerializerMethodField()
object = serializers.CharField(source='track.get_activity_url')
actor = UserActivitySerializer(source='user')
published = serializers.DateTimeField(source='creation_date')
class Meta:
model = models.TrackFavorite
fields = [
'id',
'object',
'type',
'actor',
'published'
]
def get_actor(self, obj):
return UserActivitySerializer(obj.user).data
def get_type(self, obj):
return 'Like'
def get_object(self, obj):
return obj.track.get_activity_url()
class UserTrackFavoriteSerializer(serializers.ModelSerializer):
# track = TrackSerializerNested(read_only=True)
class Meta:

View file

@ -0,0 +1,17 @@
from funkwhale_api.common.consumers import JsonAuthConsumer
class MyConsumer(JsonAuthConsumer):
groups = ["broadcast"]
def receive_json(self, payload):
print(payload, self.scope["user"])
# Called with either text_data or bytes_data for each frame
# You can call:
self.send_json({'test': 'me'})
# Or, to send a binary frame:
# self.send(bytes_data="{Hello} world!")
# Want to force-close the connection? Call:
# self.close()
# # Or add a custom WebSocket error code!
# self.close(code=4123)

View file

@ -360,6 +360,12 @@ class Track(APIModelMixin):
self.title,
)
def get_activity_url(self):
if self.mbid:
return 'https://musicbrainz.org/recording/{}'.format(
self.mbid)
return settings.FUNKWHALE_URL + '/tracks/{}'.format(self.pk)
class TrackFile(models.Model):
track = models.ForeignKey(

View file

@ -3,6 +3,7 @@ from __future__ import unicode_literals, absolute_import
import uuid
from django.conf import settings
from django.contrib.auth.models import AbstractUser
from django.urls import reverse
from django.db import models
@ -43,3 +44,6 @@ class User(AbstractUser):
def set_password(self, raw_password):
super().set_password(raw_password)
self.update_secret_key()
def get_activity_url(self):
return settings.FUNKWHALE_URL + '/@{}'.format(self.username)

View file

@ -1,8 +1,26 @@
from rest_framework import serializers
from funkwhale_api.activity import serializers as activity_serializers
from . import models
class UserActivitySerializer(activity_serializers.ModelSerializer):
type = serializers.SerializerMethodField()
name = serializers.CharField(source='username')
class Meta:
model = models.User
fields = [
'id',
'name',
'type'
]
def get_type(self, obj):
return 'Person'
class UserBasicSerializer(serializers.ModelSerializer):
class Meta:
model = models.User