mirror of
https://github.com/fergalmoran/dss.api.git
synced 2026-01-04 15:44:11 +00:00
Updated azure headers management command
This commit is contained in:
@@ -157,7 +157,6 @@ class MixSerializer(serializers.ModelSerializer):
|
||||
]
|
||||
|
||||
slug = serializers.ReadOnlyField(required=False)
|
||||
# user = serializers.SlugRelatedField(slug_field='slug', read_only=True)
|
||||
user = InlineUserProfileSerializer(read_only=True)
|
||||
waveform_url = serializers.ReadOnlyField(source='get_waveform_url')
|
||||
waveform_progress_url = serializers.ReadOnlyField(source='get_waveform_progress_url')
|
||||
@@ -493,5 +492,20 @@ class MessageSerializer(serializers.ModelSerializer):
|
||||
|
||||
|
||||
class ShowSerializer(serializers.ModelSerializer):
|
||||
performer = InlineUserProfileSerializer(read_only=True)
|
||||
user = InlineUserProfileSerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Show
|
||||
"""
|
||||
fields = (
|
||||
'id',
|
||||
'start_date',
|
||||
'end_date',
|
||||
'user',
|
||||
'performer',
|
||||
'recurrence',
|
||||
'description'
|
||||
)
|
||||
"""
|
||||
|
||||
|
||||
35
api/views.py
35
api/views.py
@@ -1,6 +1,5 @@
|
||||
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
|
||||
@@ -15,7 +14,7 @@ from rest_framework.parsers import FileUploadParser
|
||||
from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.status import HTTP_202_ACCEPTED, HTTP_401_UNAUTHORIZED, HTTP_400_BAD_REQUEST, HTTP_404_NOT_FOUND, \
|
||||
HTTP_200_OK, HTTP_204_NO_CONTENT
|
||||
HTTP_200_OK, HTTP_204_NO_CONTENT, HTTP_500_INTERNAL_SERVER_ERROR
|
||||
|
||||
from api import serializers
|
||||
from dss import settings
|
||||
@@ -23,7 +22,6 @@ from spa import tasks
|
||||
from spa.models import Message
|
||||
from spa.models.genre import Genre
|
||||
from spa.models.activity import ActivityPlay
|
||||
from spa.models.show import Show
|
||||
from spa.models.mix import Mix
|
||||
from spa.models.comment import Comment
|
||||
from spa.models.notification import Notification
|
||||
@@ -153,7 +151,8 @@ class SearchResultsView(views.APIView):
|
||||
if q_type == 'user':
|
||||
r_s = [
|
||||
{
|
||||
'title': user.get_nice_name(),
|
||||
'id': user.id,
|
||||
'display_name': user.get_nice_name(),
|
||||
'image': user.get_sized_avatar_image(64, 64),
|
||||
'slug': user.slug,
|
||||
'url': user.get_absolute_url(),
|
||||
@@ -162,15 +161,16 @@ class SearchResultsView(views.APIView):
|
||||
Q(user__first_name__icontains=q) |
|
||||
Q(user__last_name__icontains=q) |
|
||||
Q(display_name__icontains=q)).exclude(slug__isnull=True).exclude(slug__exact='')[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]]
|
||||
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)
|
||||
@@ -179,7 +179,7 @@ class SearchResultsView(views.APIView):
|
||||
class PartialMixUploadView(views.APIView):
|
||||
parser_classes = (FileUploadParser,)
|
||||
# TODO have to make this anonymous (for now) because dropzone doesn't play nice with JWT
|
||||
#permission_classes = (IsAuthenticated,)
|
||||
# permission_classes = (IsAuthenticated,)
|
||||
|
||||
# noinspection PyBroadException
|
||||
def post(self, request):
|
||||
@@ -337,3 +337,12 @@ class MessageViewSet(viewsets.ModelViewSet):
|
||||
class ShowViewSet(viewsets.ModelViewSet):
|
||||
queryset = Show.objects.all()
|
||||
serializer_class = serializers.ShowSerializer
|
||||
|
||||
def perform_create(self, serializer):
|
||||
try:
|
||||
performer = UserProfile.objects.get(pk=self.request.data['performer'])
|
||||
serializer.save(user=self.request.user.userprofile, performer=performer)
|
||||
except UserProfile.DoesNotExist:
|
||||
return Response(status=HTTP_400_BAD_REQUEST, data='Performer not found')
|
||||
except Exception as ex:
|
||||
return Response(status=HTTP_500_INTERNAL_SERVER_ERROR, data=ex)
|
||||
|
||||
@@ -212,8 +212,8 @@ THUMBNAIL_PREFIX = '_tn/'
|
||||
# THUMBNAIL_STORAGE = 'storages.backends.azure_storage.AzureStorage'
|
||||
|
||||
JWT_AUTH = {
|
||||
#'JWT_EXPIRATION_DELTA': timedelta(seconds=900),
|
||||
'JWT_EXPIRATION_DELTA': timedelta(seconds=5),
|
||||
'JWT_EXPIRATION_DELTA': timedelta(seconds=900),
|
||||
# 'JWT_EXPIRATION_DELTA': timedelta(seconds=5),
|
||||
'JWT_ALLOW_REFRESH': True,
|
||||
'JWT_REFRESH_EXPIRATION_DELTA': timedelta(days=30),
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import os
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.core.management.base import LabelCommand, CommandError
|
||||
import sys
|
||||
|
||||
from core.utils import cdn
|
||||
from spa.models.mix import Mix
|
||||
@@ -8,8 +9,10 @@ from spa.models.mix import Mix
|
||||
def _update_azure_headers():
|
||||
ms = Mix.objects.all()
|
||||
for m in ms:
|
||||
print("Update headers for {0}".format(m.title))
|
||||
cdn.set_azure_details('{0}.mp3'.format(m.uid), 'Deep South Sounds - {0}'.format(m.title), 'mixes')
|
||||
|
||||
|
||||
def _check_missing_mixes():
|
||||
ms = Mix.objects.all()
|
||||
found = 0
|
||||
@@ -28,16 +31,12 @@ def _check_missing_mixes():
|
||||
print(('{0} of {1} missing'.format(found, Mix.objects.count())))
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
'--delete',
|
||||
action='store_true',
|
||||
dest='delete',
|
||||
default=False,
|
||||
help='Delete poll instead of closing it')
|
||||
class Command(LabelCommand):
|
||||
|
||||
def handle_noargs(self, **options):
|
||||
def handle_label(self, label, **options):
|
||||
pass
|
||||
|
||||
def upload_mix(self, **options):
|
||||
try:
|
||||
mixes = Mix.objects.filter(archive_updated=False)
|
||||
for mix in mixes:
|
||||
@@ -49,12 +48,28 @@ class Command(BaseCommand):
|
||||
except Exception as ex:
|
||||
print("Fatal error, bailing. {0}".format(ex.message))
|
||||
|
||||
def handle(self, *args, **options):
|
||||
if len(args) == 0:
|
||||
print("Commands are \n\t_check_missing_mixes")
|
||||
elif args[0] == 'check_missing_mix':
|
||||
def handle(self, *labels, **options):
|
||||
verbosity = int(options.get('verbosity'))
|
||||
|
||||
# Django 1.4 compatibility fix
|
||||
stdout = options.get('stdout', None)
|
||||
stdout = stdout if stdout else sys.stdout
|
||||
|
||||
stderr = options.get('stderr', None)
|
||||
stderr = stderr if stderr else sys.stderr
|
||||
|
||||
if not labels:
|
||||
print(self.print_help('thumbnail', ''), file=stderr)
|
||||
sys.exit(1)
|
||||
|
||||
if len(labels) != 1:
|
||||
raise CommandError('`%s` is not a valid argument' % labels)
|
||||
label = labels[0]
|
||||
|
||||
if label not in ['check_missing_mixes', 'update_azure_headers']:
|
||||
raise CommandError('`%s` unknown action' % label)
|
||||
|
||||
if label == 'check_missing_mixes':
|
||||
_check_missing_mixes()
|
||||
elif args[0] == 'update_azure_headers':
|
||||
if label == 'update_azure_headers':
|
||||
_update_azure_headers()
|
||||
else:
|
||||
print("Commands are \n\tcheck_missing_mix")
|
||||
|
||||
30
spa/migrations/0010_auto_20150907_2238.py
Normal file
30
spa/migrations/0010_auto_20150907_2238.py
Normal 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', '0009_auto_20150821_1940'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='show',
|
||||
name='end_date',
|
||||
field=models.DateTimeField(blank=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='show',
|
||||
name='mix',
|
||||
field=models.ForeignKey(null=True, related_name='show', to='spa.Mix', blank=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='show',
|
||||
name='recurrence',
|
||||
field=recurrence.fields.RecurrenceField(blank=True),
|
||||
),
|
||||
]
|
||||
25
spa/migrations/0011_auto_20150910_1927.py
Normal file
25
spa/migrations/0011_auto_20150910_1927.py
Normal file
@@ -0,0 +1,25 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('spa', '0010_auto_20150907_2238'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='show',
|
||||
name='performer',
|
||||
field=models.ForeignKey(related_name='shows', default=2, to='spa.UserProfile'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='show',
|
||||
name='user',
|
||||
field=models.ForeignKey(related_name='owned_shows', to='spa.UserProfile'),
|
||||
),
|
||||
]
|
||||
18
spa/migrations/0012_remove_show_recurrence.py
Normal file
18
spa/migrations/0012_remove_show_recurrence.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('spa', '0011_auto_20150910_1927'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='show',
|
||||
name='recurrence',
|
||||
),
|
||||
]
|
||||
20
spa/migrations/0013_show_recurrence_rrule.py
Normal file
20
spa/migrations/0013_show_recurrence_rrule.py
Normal file
@@ -0,0 +1,20 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import recurrence.fields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('spa', '0012_remove_show_recurrence'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='show',
|
||||
name='recurrence_rrule',
|
||||
field=recurrence.fields.RecurrenceField(blank=True),
|
||||
),
|
||||
]
|
||||
20
spa/migrations/0014_show_recurrence.py
Normal file
20
spa/migrations/0014_show_recurrence.py
Normal file
@@ -0,0 +1,20 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('spa', '0013_show_recurrence_rrule'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='show',
|
||||
name='recurrence',
|
||||
field=models.SmallIntegerField(default=2),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
||||
19
spa/migrations/0015_auto_20150910_2136.py
Normal file
19
spa/migrations/0015_auto_20150910_2136.py
Normal file
@@ -0,0 +1,19 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('spa', '0014_show_recurrence'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='show',
|
||||
name='recurrence',
|
||||
field=models.CharField(max_length=1),
|
||||
),
|
||||
]
|
||||
18
spa/migrations/0016_remove_show_recurrence_rrule.py
Normal file
18
spa/migrations/0016_remove_show_recurrence_rrule.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('spa', '0015_auto_20150910_2136'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='show',
|
||||
name='recurrence_rrule',
|
||||
),
|
||||
]
|
||||
@@ -1,4 +1,4 @@
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timedelta
|
||||
from django.db import models
|
||||
from spa.models.mix import Mix
|
||||
from spa.models.userprofile import UserProfile
|
||||
@@ -12,11 +12,12 @@ class ShowOverlapException(Exception):
|
||||
|
||||
|
||||
class Show(BaseModel):
|
||||
mix = models.ForeignKey(Mix, related_name='show')
|
||||
user = models.ForeignKey(UserProfile, related_name='show')
|
||||
mix = models.ForeignKey(Mix, related_name='show', blank=True, null=True)
|
||||
user = models.ForeignKey(UserProfile, related_name='owned_shows')
|
||||
performer = models.ForeignKey(UserProfile, related_name='shows')
|
||||
start_date = models.DateTimeField()
|
||||
end_date = models.DateTimeField()
|
||||
recurrence = recurrence.fields.RecurrenceField()
|
||||
end_date = models.DateTimeField(blank=True)
|
||||
recurrence = models.CharField(max_length=1)
|
||||
description = models.CharField(max_length=2048)
|
||||
|
||||
class Meta:
|
||||
@@ -24,11 +25,10 @@ class Show(BaseModel):
|
||||
|
||||
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
|
||||
# throw an exception if event overlaps with another event
|
||||
if not self.end_date:
|
||||
# Default show is one hour
|
||||
self.end_date = self.start_date + timedelta(hours=1)
|
||||
|
||||
# DEBUG
|
||||
self.start_date = datetime.now()
|
||||
self.end_date = datetime.now()
|
||||
# END DEBUG
|
||||
overlaps = Show.objects.filter(
|
||||
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)
|
||||
@@ -36,10 +36,12 @@ class Show(BaseModel):
|
||||
if len(overlaps) != 0:
|
||||
raise ShowOverlapException()
|
||||
|
||||
self.recurrence = recurrence.Recurrence(
|
||||
dtstart=datetime(2014, 1, 2, 0, 0, 0),
|
||||
return super(Show, self).save(force_insert, force_update, using, update_fields)
|
||||
|
||||
def get_recurrence_rrule(self):
|
||||
r = recurrence.Recurrence(
|
||||
dtstart=self.start_date,
|
||||
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)
|
||||
return r
|
||||
|
||||
Reference in New Issue
Block a user