Pre switch

This commit is contained in:
Fergal Moran
2015-10-15 20:03:32 +01:00
parent d5b53c2686
commit e5fc34ed47
6 changed files with 120 additions and 21 deletions

View File

@@ -0,0 +1,93 @@
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)

View File

@@ -26,8 +26,8 @@ router.register(r'shows', views.ShowViewSet, base_name='shows')
class DebugView(APIView):
permission_classes = (IsAuthenticated, )
authentication_classes = (JSONWebTokenAuthentication, )
permission_classes = (IsAuthenticated,)
authentication_classes = (JSONWebTokenAuthentication,)
def get(self, request):
print(self.request.session)
@@ -36,7 +36,10 @@ class DebugView(APIView):
def post(self, request, format=None):
try:
activity.post_activity('user:message', request.user.userprofile.get_session_id(), 'Hello Sailor')
activity.post_activity(
channel='user:message',
message='Hello Sailor',
session=request.user.userprofile.get_session_id())
except Exception as ex:
print(ex)

View File

@@ -1,13 +1,14 @@
import requests
from bs4 import BeautifulSoup
from requests.packages.urllib3.connection import ConnectionError
from dss import settings
def get_server_details(server, port, mount):
server = "http://%s:%s/status.xsl?mount=/%s" % (server, port, mount)
print("Getting info for %s" % server)
def get_server_details():
url = "http://%s:%s/status.xsl?mount=/%s" % (settings.ICE_HOST, settings.ICE_PORT, settings.ICE_MOUNT)
print("Getting info for %s" % url)
try:
response = requests.get(server)
response = requests.get(url)
html = response.text
if html:
try:
@@ -40,6 +41,11 @@ def get_server_details(server, port, mount):
}
def shuffle():
url = "http://%s:%s/a/shuffle" % (settings.RADIO_HOST, settings.RADIO_PORT)
r = requests.post(url)
if __name__ == '__main__':
d = get_server_details("localhost", "8000", "dss")
print(d)

View File

@@ -6,12 +6,12 @@ from dss import settings
logger = logging.getLogger('dss')
def post_activity(channel, session, message):
def post_activity(channel, message, session=''):
r = redis.StrictRedis(host=settings.REDIS_HOST, port=6379, db=0)
payload = json.dumps({'session': session, 'message': message})
response = r.publish(channel, payload)
logger.debug("Message sent: {0}".format(payload))
if __name__ == '__main__':
post_activity('site:broadcast', '3a596ca6c97065a67aca3dc4a3ba230d688cf413', 'bargle')
post_activity('site:broadcast', 'bargle', '3a596ca6c97065a67aca3dc4a3ba230d688cf413')

View File

@@ -29,20 +29,14 @@ class Notification(BaseModel):
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
"""
if self._activity.should_send_email():
self.send_notification_email()
"""
post_activity(
'user:message',
self.to_user.get_session_id(),
{
channel='user:message',
message={
'from_user': self.from_user.slug if self.from_user is not None else settings.DEFAULT_USER_NAME,
'message': self.target_desc
})
},
session=self.to_user.get_session_id(),
)
return super(Notification, self).save(force_insert, force_update, using, update_fields)
def send_notification_email(self):

View File

@@ -60,4 +60,7 @@ def update_geo_info_task(ip_address, profile_id):
@task
def notify_subscriber(session_id, uid):
if session_id is not None:
activity.post_activity('user:process', session_id, {'type': 'waveform', 'target': uid})
activity.post_activity(
channel='user:process',
message={'type': 'waveform', 'target': uid},
session=session_id)