diff --git a/api/views.py b/api/views.py index 81823a0..ec9a7a4 100755 --- a/api/views.py +++ b/api/views.py @@ -3,7 +3,7 @@ import os from django.core.exceptions import PermissionDenied, ObjectDoesNotExist from django.core.files.base import ContentFile -from django.core.files.storage import FileSystemStorage, default_storage +from django.core.files.storage import FileSystemStorage from django.db.models import Count from django.http.response import HttpResponse from rest_framework import viewsets @@ -17,9 +17,8 @@ from rest_framework.status import HTTP_202_ACCEPTED, HTTP_401_UNAUTHORIZED, HTTP HTTP_200_OK, HTTP_204_NO_CONTENT from api import serializers -from core.utils import cdn from dss import settings -from spa.tasks import create_waveform_task, upload_to_cdn_task +from spa import tasks from spa.models.genre import Genre from spa.models.activity import ActivityPlay from spa.models.mix import Mix @@ -187,13 +186,13 @@ class PartialMixUploadView(views.APIView): logger.debug("Processing input_file: {0}".format(input_file)) logger.debug("Connecting to broker: {0}".format(settings.BROKER_URL)) - from celery import group - (create_waveform_task.s(input_file, uid) | - group( - upload_to_cdn_task.s(filetype='mp3', uid=uid, container_name='mixes'), - upload_to_cdn_task.s(filetype='png', uid=uid, container_name='waveforms') - ) - ).delay() + from celery import group, chain + ( + tasks.create_waveform_task.s(input_file, uid) | + tasks.upload_to_cdn_task.subtask(('mp3', uid, 'mixes'), immutable=True) | + tasks.upload_to_cdn_task.subtask(('png', uid, 'waveforms'), immutable=True) | + tasks.notify_subscriber.subtask((request.user.userprofile.get_session_id(), uid), immutable=True) + ).delay() logger.debug("Waveform task started") except Exception, ex: diff --git a/spa/signals.py b/spa/signals.py index cb131ba..1390a55 100755 --- a/spa/signals.py +++ b/spa/signals.py @@ -4,6 +4,7 @@ from django.db.models.signals import post_save, pre_save, m2m_changed from django.dispatch import Signal, receiver from django.contrib.auth.models import User +from core.realtime import activity from core.utils.audio.mp3 import mp3_length from spa.models.activity import ActivityFollow diff --git a/spa/tasks.py b/spa/tasks.py index c921c5a..10dbd05 100755 --- a/spa/tasks.py +++ b/spa/tasks.py @@ -1,6 +1,7 @@ from celery.task import task import os import logging +from core.realtime import activity from core.utils import cdn from spa.signals import waveform_generated_signal @@ -30,7 +31,7 @@ def create_waveform_task(in_file, uid): @task(timse_limit=3600) -def upload_to_cdn_task(in_file, filetype, uid, container_name): +def upload_to_cdn_task(filetype, uid, container_name): source_file = os.path.join(settings.CACHE_ROOT, '{0}/{1}.{2}'.format(container_name, uid, filetype)) logger.info("Sending {0} to azure".format(uid)) try: @@ -53,3 +54,9 @@ def update_geo_info_task(ip_address, profile_id): except Exception, e: logger.exception(e) pass + + +@task +def notify_subscriber(session_id, uid): + if session_id is not None: + activity.post_activity('user:message', session_id, {'type': 'waveform', 'target': uid})