Files
dss.api/spa/management/commands/archive_mixes.py
2016-09-23 00:21:02 +01:00

50 lines
2.1 KiB
Python

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 urllib.parse
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 as ex:
print("Debug exception: %s" % ex.message)