Files
dss/spa/management/commands/archive_mixes.py
2014-08-27 22:19:18 +01:00

50 lines
2.1 KiB
Python
Executable File

from django.core.management.base import NoArgsCommand
from libcloud.storage.types import Provider
from libcloud.storage.providers import get_driver
from core.utils.url import url_path_join
from dss import settings
from spa.models.mix import Mix
from datetime import datetime, timedelta
from django.db.models import Count
import os
import urlparse
from os.path import isfile, join, basename
class Command(NoArgsCommand):
def handle_noargs(self, **options):
try:
cls = get_driver(Provider.AZURE_BLOBS)
driver = cls(settings.AZURE_ACCOUNT_NAME, settings.AZURE_ACCOUNT_KEY)
container = driver.get_container(container_name=settings.AZURE_CONTAINER)
#.filter(upload_date__lte=datetime.today() - timedelta(days=180)) \
mixes = Mix.objects \
.exclude(archive_path__isnull=False) \
.annotate(num_plays=Count('activity_plays')) \
.order_by('num_plays')
for mix in mixes:
if os.path.isfile(mix.get_absolute_path()):
print "Uploading file for: %s" % mix.slug
file_name = "%s.%s" % (mix.uid, mix.filetype)
archive_path = url_path_join(settings.AZURE_ITEM_BASE_URL, settings.AZURE_CONTAINER, file_name)
with open(mix.get_absolute_path(), 'rb') as iterator:
obj = driver.upload_object_via_stream(
iterator=iterator,
container=container,
object_name=file_name
)
print "Uploaded"
mix.archive_path = archive_path
mix.save()
expired_path = join(settings.MEDIA_ROOT, "mixes/archived")
new_file = os.path.join(expired_path, basename(iterator.name))
os.rename(iterator.name, new_file)
print "done- file is %s" % mix.archive_path
except Exception, ex:
print "Debug exception: %s" % ex.message