Fixed CDN upload

This commit is contained in:
Fergal Moran
2015-08-24 22:59:30 +01:00
parent 45e345c9d0
commit 7989af7af3
22 changed files with 277 additions and 67 deletions

View File

@@ -1,10 +1,11 @@
import logging
import os
from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied, ObjectDoesNotExist, SuspiciousOperation
from django.core.files.base import ContentFile
from django.core.files.storage import FileSystemStorage
from django.db.models import Count
from django.db.models import Count, Q
from django.http.response import HttpResponse
from rest_framework import viewsets
from rest_framework import views
@@ -147,15 +148,30 @@ class AttachedImageUploadView(views.APIView):
class SearchResultsView(views.APIView):
def get(self, request, format=None):
q = request.GET.get('q', '')
q_type = request.GET.get('type', '')
if len(q) > 0:
m = [{
'title': mix.title,
'image': mix.get_image_url(),
'slug': mix.slug,
'url': mix.get_absolute_url(),
'description': mix.description
} for mix in Mix.objects.filter(title__icontains=q)[0:10]]
return Response(m)
if q_type == 'user':
r_s = [
{
'title': user.display_name,
'image': user.get_sized_avatar_image(64, 64),
'slug': user.slug,
'url': user.get_absolute_url(),
'description': user.description
} for user in UserProfile.objects.filter(
Q(user__first_name__icontains=q) |
Q(user__last_name__icontains=q) |
Q(display_name__icontains=q))[0:10]
]
else:
r_s = [{
'title': mix.title,
'image': mix.get_image_url(),
'slug': mix.slug,
'url': mix.get_absolute_url(),
'description': mix.description
} for mix in Mix.objects.filter(title__icontains=q)[0:10]]
return Response(r_s)
return HttpResponse(status=HTTP_204_NO_CONTENT)

View File

@@ -10,25 +10,16 @@ from dss.storagesettings import AZURE_ACCOUNT_NAME, AZURE_ACCOUNT_KEY, AZURE_CON
def upload_file_to_azure(in_file, file_name, container_name=settings.AZURE_CONTAINER):
if os.path.isfile(in_file):
print("Uploading file for: %s" % in_file)
with open(in_file, 'rb') as iterator:
return upload_stream_to_azure(iterator, file_name, container_name=container_name)
else:
print("infile not found")
return None
def upload_stream_to_azure(iterator, file_name, container_name=settings.AZURE_CONTAINER):
cls = get_driver(Provider.AZURE_BLOBS)
driver = cls(settings.AZURE_ACCOUNT_NAME, settings.AZURE_ACCOUNT_KEY)
container = driver.get_container(container_name)
obj = driver.upload_object_via_stream(
iterator=iterator,
container=container,
object_name=file_name
)
return obj
try:
blob_service = BlobService(AZURE_ACCOUNT_NAME, AZURE_ACCOUNT_KEY)
blob_service.put_block_blob_from_path(
container_name=container_name,
blob_name=file_name,
file_path=in_file,
x_ms_blob_content_type='application/octet-stream'
)
except Exception as ex:
print("Failed to upload blob: {0}".format(ex))
def set_azure_details(blob_name, download_name, container_name=AZURE_CONTAINER):

View File

@@ -20,9 +20,10 @@ def generate_waveform(input_file, output_file):
from PIL import Image
import glob
print(output_file)
im = Image.open(output_file)
w, h = im.size
im.crop((0, 0, w, h / 2)).save(output_file)
im.crop((0, 0, int(w), int(h / 2))).save(output_file)
return output_file
else:
@@ -30,5 +31,5 @@ def generate_waveform(input_file, output_file):
return ""
except Exception as ex:
print("Error generating waveform %s" % (ex))
print("Error generating waveform {0}".format(ex))

View File

@@ -84,7 +84,7 @@ MIDDLEWARE_CLASSES = (
# 'htmlmin.middleware.MarkRequestMiddleware',
'django_user_agents.middleware.UserAgentMiddleware',
# 'spa.middleware.uploadify.SWFUploadMiddleware',
# 'spa.middleware.sqlprinter.SqlPrintingMiddleware' if DEBUG else None,
'spa.middleware.sqlprinter.SqlPrintingMiddleware' if DEBUG else None,
# 'debug_toolbar.middleware.DebugToolbarMiddleware',
)

View File

@@ -16,6 +16,7 @@ django-model_utils
django-dbbackup
django-user-agents
redis
git+git://github.com/llazzaro/django-scheduler.git#django-scheduler
django-celery
django-scheduler
azure

View File

@@ -2,7 +2,6 @@ from django.contrib import admin
from spa.models.genre import Genre
from spa.models.userprofile import UserProfile
from spa.models.chatmessage import ChatMessage
from spa.models.recurrence import Recurrence
from spa.models.release import Release
from spa.models.label import Label
from spa.models.mix import Mix
@@ -23,5 +22,4 @@ admin.site.register(Release, DefaultAdmin)
admin.site.register(ReleaseAudio)
admin.site.register(Venue)
admin.site.register(UserProfile)
admin.site.register(Recurrence)
admin.site.register(ChatMessage)

View File

@@ -198,16 +198,6 @@ class Migration(migrations.Migration):
('release', models.ForeignKey(related_name='release_audio', blank=True, null=True, to='spa.Release')),
],
),
migrations.CreateModel(
name='Show',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)),
('object_created', models.DateTimeField(auto_now_add=True)),
('object_updated', models.DateTimeField(db_index=True, auto_now=True)),
('test_field', models.CharField(max_length=400)),
('mix', models.ForeignKey(related_name='show', to='spa.Mix')),
],
),
migrations.CreateModel(
name='Tracklist',
fields=[

View File

@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('spa', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Show',
fields=[
('id', models.AutoField(auto_created=True, serialize=False, verbose_name='ID', primary_key=True)),
('object_created', models.DateTimeField(auto_now_add=True)),
('object_updated', models.DateTimeField(db_index=True, auto_now=True)),
('test_field', models.CharField(max_length=400)),
('mix', models.ForeignKey(related_name='show', to='spa.Mix')),
],
),
]

View File

@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('spa', '0002_show'),
]
operations = [
migrations.RemoveField(
model_name='show',
name='test_field',
),
migrations.AddField(
model_name='show',
name='user',
field=models.ForeignKey(default=2, related_name='show', to='spa.UserProfile'),
preserve_default=False,
),
]

View File

@@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import datetime
class Migration(migrations.Migration):
dependencies = [
('spa', '0003_auto_20150820_2209'),
]
operations = [
migrations.AddField(
model_name='show',
name='description',
field=models.CharField(max_length=2048, default='New Event'),
preserve_default=False,
),
migrations.AddField(
model_name='show',
name='recurrence',
field=models.CharField(max_length=30, default='R'),
preserve_default=False,
),
migrations.AddField(
model_name='show',
name='start_date',
field=models.DateField(default=datetime.datetime(2015, 8, 20, 22, 57, 40, 815435)),
preserve_default=False,
),
]

View File

@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import datetime
class Migration(migrations.Migration):
dependencies = [
('spa', '0004_auto_20150820_2257'),
]
operations = [
migrations.AddField(
model_name='show',
name='end_date',
field=models.DateField(default=datetime.datetime(2015, 8, 20, 23, 3, 54, 33809)),
preserve_default=False,
),
]

View File

@@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import recurrence.fields
class Migration(migrations.Migration):
dependencies = [
('spa', '0005_show_end_date'),
]
operations = [
migrations.RemoveField(
model_name='recurrence',
name='_lookup_ptr',
),
migrations.AlterField(
model_name='show',
name='recurrence',
field=recurrence.fields.RecurrenceField(),
),
migrations.DeleteModel(
name='_Lookup',
),
migrations.DeleteModel(
name='Recurrence',
),
]

View File

@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('spa', '0006_auto_20150820_2347'),
]
operations = [
migrations.AlterField(
model_name='show',
name='end_date',
field=models.DateTimeField(),
),
migrations.AlterField(
model_name='show',
name='start_date',
field=models.DateTimeField(),
),
]

View File

@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('spa', '0007_auto_20150821_1928'),
]
operations = [
migrations.AlterField(
model_name='show',
name='end_date',
field=models.DateTimeField(auto_now_add=True),
),
migrations.AlterField(
model_name='show',
name='start_date',
field=models.DateTimeField(auto_now_add=True),
),
]

View File

@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('spa', '0008_auto_20150821_1931'),
]
operations = [
migrations.AlterField(
model_name='show',
name='end_date',
field=models.DateTimeField(),
),
migrations.AlterField(
model_name='show',
name='start_date',
field=models.DateTimeField(),
),
]

View File

@@ -1,7 +1,6 @@
from .basemodel import BaseModel
from .userprofile import UserProfile
from .chatmessage import ChatMessage
from .recurrence import Recurrence
from .comment import Comment
from .venue import Venue
from .label import Label

View File

@@ -91,6 +91,9 @@ class Mix(BaseModel):
favourites = models.ManyToManyField(UserProfile, related_name='favourites', blank=True)
likes = models.ManyToManyField(UserProfile, related_name='likes', blank=True)
def __str__(self):
return self.__unicode__()
def __unicode__(self):
return self.title

View File

@@ -1,4 +0,0 @@
from spa.models._lookup import _Lookup
class Recurrence(_Lookup):
pass

View File

@@ -1,37 +1,45 @@
<<<<<<< HEAD
=======
from datetime import datetime
from django.db import models
>>>>>>> master
from django.db.models import Q, ForeignKey
# from schedule.models import Event
from spa.models.mix import Mix
from spa.models.userprofile import UserProfile
from spa.models.basemodel import BaseModel
import recurrence
import recurrence.fields
class ShowOverlapException(Exception):
pass
class Show(BaseModel): # Event):
mix = ForeignKey(Mix, related_name='show')
test_field = models.CharField(max_length=400)
class Show(BaseModel):
mix = models.ForeignKey(Mix, related_name='show')
user = models.ForeignKey(UserProfile, related_name='show')
start_date = models.DateTimeField()
end_date = models.DateTimeField()
recurrence = recurrence.fields.RecurrenceField()
description = models.CharField(max_length=2048)
class Meta:
app_label = 'spa'
<<<<<<< HEAD
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
=======
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
# throw an exception if event overlaps with another event
>>>>>>> master
# DEBUG
self.start_date = datetime.now()
self.end_date = datetime.now()
# END DEBUG
overlaps = Show.objects.filter(
Q(start__gte=self.start, end__lte=self.start) |
Q(start__gte=self.end, end__lte=self.end)
models.Q(start_date__gte=self.start_date, end_date__lte=self.start_date) |
models.Q(start_date__gte=self.end_date, end_date__lte=self.end_date)
)
if len(overlaps) != 0:
raise ShowOverlapException()
self.recurrence = recurrence.Recurrence(
dtstart=datetime(2014, 1, 2, 0, 0, 0),
dtend=datetime(2014, 1, 3, 0, 0, 0),
rrules=[recurrence.Rule(recurrence.WEEKLY), ]
)
return super(Show, self).save(force_insert, force_update, using, update_fields)

View File

@@ -1,7 +1,7 @@
import logging
import os
import urllib.parse
import urllib.parse
from bitfield.models import BitField
from django.contrib.auth.models import User
from django.core.exceptions import SuspiciousOperation
@@ -9,7 +9,6 @@ from django.db import models
from django.db.models import Count
from django_gravatar.helpers import has_gravatar, get_gravatar_url
from sorl import thumbnail
from sorl.thumbnail import get_thumbnail
from core.utils.file import generate_save_file_name
from core.utils.url import unique_slugify
@@ -70,6 +69,9 @@ class UserProfile(BaseModel):
last_known_session = models.CharField(max_length=250, blank=True, null=True)
def __str__(self):
return self.__unicode__()
def __unicode__(self):
return "%s - %s" % (self.user.get_full_name(), self.slug)

View File

@@ -30,12 +30,13 @@ def create_waveform_task(in_file, uid):
logger.error("Outfile is missing")
@task(timse_limit=3600)
@task(time_limit=3600)
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:
file_name = "{0}.{1}".format(uid, filetype)
print(source_file)
cdn.upload_file_to_azure(source_file, file_name, container_name)
return source_file
except Exception as ex: