Files
dss.api/api/helpers.py
Fergal Moran e5fc34ed47 Pre switch
2015-10-15 20:03:32 +01:00

94 lines
3.2 KiB
Python

import datetime
from rest_framework.response import Response
from rest_framework.status import HTTP_400_BAD_REQUEST, HTTP_201_CREATED, HTTP_204_NO_CONTENT, HTTP_200_OK
from rest_framework.views import APIView
from core import realtime
from core.radio import ice_scrobbler
from core.realtime import activity
from dss import settings
from spa.models import Mix, UserProfile
from core.utils import session
class Helper(APIView):
pass
class ActivityHelper(APIView):
def get_session(self, request):
sessions = session.get_active_sessions(request.session)
return sessions[0]
class ChatHelper(ActivityHelper):
def post(self, request):
# do some persistence stuff with the chat
from core.realtime import chat
# user = self.get_session(request)
u = request.user
if not u.is_anonymous():
image = u.userprofile.get_sized_avatar_image(32, 32)
user = u.userprofile.get_nice_name()
else:
image = settings.DEFAULT_USER_IMAGE
user = settings.DEFAULT_USER_NAME
chat.post_chat(request.data['user'], image, user, request.data['message'])
return Response(request.data['message'], HTTP_201_CREATED)
class ActivityPlayHelper(ActivityHelper):
def post(self, request):
if 'id' in self.request.query_params:
try:
mix = Mix.objects.get(slug=self.request.query_params.get('id'))
mix.add_play(request.user)
data = {
'user': request.user.userprofile.get_nice_name() if request.user.is_authenticated() else settings.DEFAULT_USER_NAME,
'date': datetime.datetime.now()
}
return Response(data, HTTP_201_CREATED)
except Mix.DoesNotExist:
pass
return Response("Invalid URI or object does not exist", HTTP_400_BAD_REQUEST)
class UserSlugCheckHelper(Helper):
def get(self, request):
try:
UserProfile.objects.get(slug=self.request.query_params.get('slug'))
return Response(status=HTTP_204_NO_CONTENT)
except UserProfile.DoesNotExist:
return Response(status=HTTP_200_OK)
class RadioHelper(Helper):
def get(self, request):
if 'rmix' in self.request.query_params:
m = Mix.objects.order_by('?').first()
ret = {
'url': m.get_stream_url(),
'slug': m.get_full_url(),
'title': str(m)
}
elif 'np' in self.request.query_params:
ret = ice_scrobbler.get_server_details()
return Response(data=ret, status=HTTP_200_OK)
def post(self, request):
if 'action' in request.query_params:
action = request.query_params.get('action')
if action == 'shuffle':
ice_scrobbler.shuffle()
return Response(status=HTTP_200_OK)
if 'update' in request.query_params and 'url' in request.query_params:
activity.post_activity('site:radio_changed', message={
'description': request.query_params.get('update'),
'url': request.query_params.get('url')
})
return Response(status=HTTP_400_BAD_REQUEST)