diff --git a/core/utils/cdn.py b/core/utils/cdn.py index 4ea6d82..55da434 100755 --- a/core/utils/cdn.py +++ b/core/utils/cdn.py @@ -48,6 +48,7 @@ def set_azure_details(blob_name, download_name): except Exception, ex: print "Error processing blob %s: %s" % (download_name, ex.message) + def file_exists(url): import httplib from urlparse import urlparse @@ -57,3 +58,18 @@ def file_exists(url): r = c.getresponse() return r.status == 200 + + +def enumerate_objects(container): + blob_service = BlobService(AZURE_ACCOUNT_NAME, AZURE_ACCOUNT_KEY) + blobs = blob_service.list_blobs(container) + items = [] + for blob in blobs: + items.append(blob.name) + + return items + + +def delete_object(container, name): + blob_service = BlobService(AZURE_ACCOUNT_NAME, AZURE_ACCOUNT_KEY) + blob_service.delete_blob(container, name) \ No newline at end of file diff --git a/dss/celeryconf.py b/dss/celeryconf.py index dcd124d..198334e 100644 --- a/dss/celeryconf.py +++ b/dss/celeryconf.py @@ -11,12 +11,9 @@ logger = logging.getLogger('dss') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dss.settings') from django.conf import settings -print 'Connecting to celery app' app = Celery('dss') -print 'Connected' # 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) -print 'Discovered tasks' diff --git a/spa/management/commands/tidy_cdn.py b/spa/management/commands/tidy_cdn.py new file mode 100755 index 0000000..0e54b5f --- /dev/null +++ b/spa/management/commands/tidy_cdn.py @@ -0,0 +1,22 @@ +import os +from django.core.management.base import NoArgsCommand +from core.utils import cdn +from spa.models import Mix + + +class Command(NoArgsCommand): + def handle_noargs(self, **options): + try: + print 'Enumerating items' + items = cdn.enumerate_objects('mixes') + for item in items: + # Check if we have a corresponding mix + uid, type = os.path.splitext(item) + try: + Mix.objects.get(uid=uid) + except Mix.DoesNotExist: + # no mix found - delete the blob + cdn.delete_object('mixes', item) + print "Deleting blob: {0}".format(uid) + except Exception, ex: + print "Debug exception: %s" % ex.message diff --git a/spa/models/basemodel.py b/spa/models/basemodel.py index 7f15512..dcf593e 100755 --- a/spa/models/basemodel.py +++ b/spa/models/basemodel.py @@ -10,7 +10,7 @@ from dss import localsettings, settings class BaseModel(models.Model): - logger = logging.getLogger(__name__) + logger = logging.getLogger('dss') object_created = models.DateTimeField(auto_now_add=True, default=datetime.now()) object_updated = models.DateTimeField(auto_now=True, default=datetime.now(), db_index=True) diff --git a/spa/models/mix.py b/spa/models/mix.py index 5a70c03..342f7a1 100755 --- a/spa/models/mix.py +++ b/spa/models/mix.py @@ -166,15 +166,10 @@ class Mix(BaseModel): def get_image_url(self, size='200x200', default=''): try: - if self.mix_image.name and self.mix_image.storage.exists(self.mix_image.name): - ret = get_thumbnail(self.mix_image, size, crop='center') - return "%s/%s" % (settings.MEDIA_URL, ret.name) - else: - return self.user.get_sized_avatar_image(170, 170) + return "{0}{1}".format(settings.MIXIMAGE_URL, os.path.basename(self.mix_image.name)) except Exception, ex: - pass - - return super(Mix, self).get_image_url(self.mix_image, settings.DEFAULT_TRACK_IMAGE) + self.logger.exception(ex) + return super(Mix, self).get_image_url(self.mix_image, settings.DEFAULT_TRACK_IMAGE) def get_stream_url(self): if self.archive_path in [None, '']: