diff --git a/api/views.py b/api/views.py index 1ab0fad..53349de 100755 --- a/api/views.py +++ b/api/views.py @@ -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.cdn import upload_to_azure from dss import settings -from core.tasks import create_waveform_task, archive_mix_task +from spa.tasks import create_waveform_task, archive_mix_task from spa.models.genre import Genre from spa.models.activity import ActivityPlay from spa.models.mix import Mix diff --git a/dss/__init__.py b/dss/__init__.py index e69de29..d1956f9 100755 --- a/dss/__init__.py +++ b/dss/__init__.py @@ -0,0 +1,2 @@ +from __future__ import absolute_import +from .celeryconf import app as celery_app diff --git a/dss/celeryconf.py b/dss/celeryconf.py index 11b75a8..2625d86 100644 --- a/dss/celeryconf.py +++ b/dss/celeryconf.py @@ -1,13 +1,17 @@ +from __future__ import absolute_import + import os from celery import Celery -from django.conf import settings -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dss.settings") +# set the default Django settings module for the 'celery' program. +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings') + +from django.conf import settings app = Celery('dss') -CELERY_TIMEZONE = 'UTC' - +# Using a string here means the worker will not have to +# pickle the object when using Windows. app.config_from_object('django.conf:settings') -app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) +app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) \ No newline at end of file diff --git a/dss/settings.py b/dss/settings.py index 2904ec6..40e662e 100755 --- a/dss/settings.py +++ b/dss/settings.py @@ -3,7 +3,6 @@ import os import mimetypes from datetime import timedelta from django.core.urlresolvers import reverse_lazy -import djcelery from django.conf import global_settings from utils import here @@ -106,7 +105,6 @@ INSTALLED_APPS = ( #'django_facebook', 'django_extensions', 'django_gravatar', - 'djcelery', 'corsheaders', 'sorl.thumbnail', 'spa', diff --git a/requirements.txt b/requirements.txt index 1246684..e3dd54e 100755 --- a/requirements.txt +++ b/requirements.txt @@ -30,10 +30,11 @@ apache-libcloud mandrill djrill +celery + djangorestframework==3.1.3 djangorestframework-jwt==1.6.0 drf-nested-routers -django-celery pillow django-gravatar2 diff --git a/spa/api/v1/UserResource.py b/spa/api/v1/UserResource.py index 16757f2..3e8f7ea 100755 --- a/spa/api/v1/UserResource.py +++ b/spa/api/v1/UserResource.py @@ -1,21 +1,19 @@ from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned -from django.db.models import Count, Q, F +from django.db.models import Count, Q +from django.conf.urls import url + from tastypie import fields from tastypie.authentication import Authentication from tastypie.authorization import Authorization -from django.conf.urls import url from tastypie.constants import ALL, ALL_WITH_RELATIONS from tastypie.http import HttpGone, HttpMultipleChoices from tastypie.utils import trailing_slash from tastypie_msgpack import Serializer - from dss import settings from spa.api.v1.BaseResource import BaseResource from spa.api.v1.PlaylistResource import PlaylistResource -from spa.models.basemodel import BaseModel from spa.models.userprofile import UserProfile from spa.models.mix import Mix -from core.tasks import update_geo_info_task class UserResource(BaseResource): diff --git a/spa/management/commands/waveforms.py b/spa/management/commands/waveforms.py index 8824b7c..3d90b59 100755 --- a/spa/management/commands/waveforms.py +++ b/spa/management/commands/waveforms.py @@ -1,10 +1,11 @@ from optparse import make_option import os -from django.core.management.base import NoArgsCommand, BaseCommand -from spa.management.commands import helpers +from django.core.management.base import BaseCommand + +from spa.management.commands import helpers from spa.models.mix import Mix -from core.tasks import create_waveform_task +from spa.tasks import create_waveform_task class Command(BaseCommand): @@ -40,7 +41,7 @@ class Command(BaseCommand): return processed_file except Exception, ex: - print "Error generating waveform: %s" % ex.message + print "Error generating waveform: {0}".format(ex.message) return "" diff --git a/spa/tasks.py b/spa/tasks.py new file mode 100755 index 0000000..a823dc1 --- /dev/null +++ b/spa/tasks.py @@ -0,0 +1,54 @@ +import shutil +from celery.task import task +import os +from core.utils.cdn import upload_to_azure +from spa.signals import waveform_generated_signal + +try: + from django.contrib.gis.geoip import GeoIP +except ImportError: + pass + +from core.utils.waveform import generate_waveform +from dss import settings + + +@task(time_limit=3600) +def create_waveform_task(in_file, uid): + out_file = os.path.join(settings.MEDIA_ROOT, 'waveforms/%s.png' % uid) + print "Creating waveform \n\tIn: %s\n\tOut: %s" % (in_file, out_file) + generate_waveform(in_file, out_file) + if os.path.isfile(out_file): + print "Waveform generated successfully" + out_file, extension = os.path.splitext(in_file) + new_file = os.path.join(settings.MEDIA_ROOT, "mixes", "%s%s" % (uid, extension)) + print "Moving cache audio clip from %s to %s" % (in_file, new_file) + shutil.move(in_file, new_file) + print "Uid: %s" % uid + waveform_generated_signal.send(sender=None, uid=uid) + return new_file + else: + print "Outfile is missing" + + +@task(time_limit=3600) +def archive_mix_task(in_file, filetype, uid): + print "Sending {0} to azure".format(uid) + try: + upload_to_azure(in_file, filetype, uid) + except Exception, ex: + print "Unable to upload: {0}".format(ex.message) + + +@task +def update_geo_info_task(ip_address, profile_id): + try: + ip = '188.141.70.110' if ip_address == '127.0.0.1' else ip_address + if ip: + g = GeoIP() + city = g.city(ip) + country = g.country(ip) + print "Updated user location" + except Exception, e: + print e.message + pass