From 66668cd58f03f776548ff1e51426281bcef2dde9 Mon Sep 17 00:00:00 2001 From: Fergal Moran Date: Thu, 1 Nov 2018 19:45:33 +0000 Subject: [PATCH] Django 2.1.2 upgrade --- Dockerfile | 21 +++-- api/auth.py | 2 +- api/helpers.py | 4 +- api/serializers.py | 14 +-- api/urls.py | 16 ++-- api/views.py | 8 +- core/utils/waveform.py | 3 +- dss/pipelinesettings.py | 49 +++++----- dss/psa.py | 5 +- dss/settings.py | 48 ++++++---- dss/urls.py | 29 +++--- errors | 12 +++ manage.py | 0 requirements.txt | 16 ++-- spa/__init__.py | 1 - spa/blog/urls.py | 13 +-- spa/blog/views.py | 1 - spa/embedding/urls.py | 13 +-- spa/migrations/0001_initial.py | 104 ++++++++++++++-------- spa/migrations/0002_show.py | 2 +- spa/migrations/0003_auto_20150820_2209.py | 2 +- spa/migrations/0010_auto_20150907_2238.py | 2 +- spa/migrations/0011_auto_20150910_1927.py | 4 +- spa/migrations/0017_blog.py | 2 +- spa/migrations/0020_blogcomment.py | 4 +- spa/migrations/0023_socialaccountlink.py | 3 +- spa/models/activity.py | 14 +-- spa/models/blog.py | 6 +- spa/models/chatmessage.py | 2 +- spa/models/comment.py | 6 +- spa/models/message.py | 8 +- spa/models/mix.py | 14 +-- spa/models/notification.py | 6 +- spa/models/playlist.py | 2 +- spa/models/purchaselink.py | 2 +- spa/models/release.py | 6 +- spa/models/session.py | 2 +- spa/models/show.py | 6 +- spa/models/socialaccountlink.py | 2 +- spa/models/tracklist.py | 2 +- spa/models/userprofile.py | 8 +- spa/models/venue.py | 2 +- spa/podcast/urls.py | 17 ++-- spa/social/urls.py | 19 ++-- spa/social/views.py | 3 +- 45 files changed, 284 insertions(+), 221 deletions(-) create mode 100644 errors mode change 100755 => 100644 manage.py mode change 100755 => 100644 spa/models/mix.py diff --git a/Dockerfile b/Dockerfile index a91b95f..a911439 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,17 +2,16 @@ FROM fergalmoran/django ADD . /code/ -RUN mkdir /files/static -RUN mkdir /files/media -RUN mkdir /files/cache/mixes -RUN mkdir /files/cache/waveforms -RUN touch /files/tmp/dss.log -RUN chmod 777 /files/tmp/dss.log -RUN chmod 777 /files/cache -R - -RUN chmod +x /code/bin/wav2png -RUN chmod +x /code/run_web.sh -RUN chmod +x /code/run_celery.sh +RUN mkdir /files/static && \ + mkdir /files/media && \ + mkdir /files/cache/mixes && \ + mkdir /files/cache/waveforms && \ + touch /files/tmp/dss.log && \ + chmod 777 /files/tmp/dss.log && \ + chmod 777 /files/cache -R && \ + chmod +x /code/bin/wav2png && \ + chmod +x /code/run_web.sh && \ + chmod +x /code/run_celery.sh WORKDIR /code RUN pip install -r requirements.txt diff --git a/api/auth.py b/api/auth.py index 6b4469c..2cebe9d 100644 --- a/api/auth.py +++ b/api/auth.py @@ -175,7 +175,7 @@ class ObtainUser(APIView): return self.get(request) def get(self, request): - if request.user.is_authenticated(): + if request.user.is_authenticated: return Response( status=status.HTTP_200_OK, data={ 'id': request.user.id, diff --git a/api/helpers.py b/api/helpers.py index f41a120..692c365 100644 --- a/api/helpers.py +++ b/api/helpers.py @@ -28,7 +28,7 @@ class ChatHelper(ActivityHelper): # user = self.get_session(request) u = request.user - if not u.is_anonymous(): + if not u.is_anonymous: image = u.userprofile.get_sized_avatar_image(32, 32) user = u.userprofile.get_nice_name() else: @@ -46,7 +46,7 @@ class ActivityPlayHelper(ActivityHelper): mix = Mix.objects.get(slug=self.request.query_params.get('id')) mix.add_play(request.user) data = { - 'user': request.user.userprofile.get_nice_name() if request.user.is_authenticated() else settings.DEFAULT_USER_NAME, + 'user': request.user.userprofile.get_nice_name() if request.user.is_authenticated else settings.DEFAULT_USER_NAME, 'date': datetime.datetime.now() } return Response(data, HTTP_201_CREATED) diff --git a/api/serializers.py b/api/serializers.py index 85cff9b..3144067 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -59,7 +59,7 @@ class InlineUserProfileSerializer(serializers.ModelSerializer): return obj.get_sized_avatar_image(32, 32) def to_representation(self, instance): - if instance.user.is_anonymous(): + if instance.user.is_anonymous: return { 'avatar_image': settings.DEFAULT_USER_IMAGE, 'display_name': settings.DEFAULT_USER_NAME, @@ -240,7 +240,7 @@ class MixSerializer(serializers.ModelSerializer): user = self.context['request'].user playlists = self.initial_data['playlists'] removed = user.userprofile.playlists.exclude(slug__in=[f['slug'] for f in playlists]) - if user.is_authenticated(): + if user.is_authenticated: for r in removed: playlist = Playlist.objects.get(slug=r.slug) @@ -295,14 +295,14 @@ class MixSerializer(serializers.ModelSerializer): def get_can_edit(self, obj): user = self.context['request'].user - if user.is_authenticated(): + if user.is_authenticated: return user.is_staff or obj.user.id == user.userprofile.id return False def get_is_favourited(self, obj): user = self.context['request'].user - return obj.is_favourited(user) if user.is_authenticated() else False + return obj.is_favourited(user) if user.is_authenticated else False def get_validation_exclusions(self, instance=None): exclusions = super(MixSerializer, self).get_validation_exclusions() @@ -310,11 +310,11 @@ class MixSerializer(serializers.ModelSerializer): def get_is_liked(self, obj): user = self.context['request'].user - return obj.is_liked(user) if user.is_authenticated() else False + return obj.is_liked(user) if user.is_authenticated else False def get_playlists(self, obj): user = self.context['request'].user - if user.is_authenticated(): + if user.is_authenticated: playlists = user.userprofile.playlists.filter(mixes__in=[obj]) return list(playlists.values('slug')) else: @@ -496,7 +496,7 @@ class CommentSerializer(serializers.HyperlinkedModelSerializer): if user is not None: if user.is_staff: return True - if obj.user is not None and user.is_authenticated(): + if obj.user is not None and user.is_authenticated: return obj.user.id == user.userprofile.id return False diff --git a/api/urls.py b/api/urls.py index bfe20b4..7c24e6b 100644 --- a/api/urls.py +++ b/api/urls.py @@ -1,10 +1,11 @@ -from django.conf.urls import patterns, url, include +from django.conf.urls import url, include from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.routers import DefaultRouter from rest_framework.views import APIView from rest_framework.views import status from rest_framework_jwt.authentication import JSONWebTokenAuthentication +from rest_framework_jwt.views import refresh_jwt_token from api import views, auth, helpers from api.auth import SocialLoginHandler @@ -12,7 +13,6 @@ from core.realtime import activity router = DefaultRouter() # trailing_slash=True) - router.register(r'notification', views.NotificationViewSet) router.register(r'hitlist', views.HitlistViewSet) router.register(r'comments', views.CommentViewSet) @@ -26,9 +26,10 @@ router.register(r'playlist', views.PlaylistViewSet, base_name='playlists') router.register(r'user', views.UserProfileViewSet) router.register(r'mix', views.MixViewSet) + class DebugView(APIView): - #permission_classes = (IsAuthenticated,) - #authentication_classes = (JSONWebTokenAuthentication,) + # permission_classes = (IsAuthenticated,) + # authentication_classes = (JSONWebTokenAuthentication,) def get(self, request): print(self.request.session) @@ -52,8 +53,7 @@ class DebugView(APIView): }, status=status.HTTP_200_OK) -urlpatterns = patterns( - '', +urlpatterns = [ url(r'^', include(router.urls)), url(r'_download/', views.DownloadItemView.as_view()), url(r'_upload/$', views.PartialMixUploadView.as_view()), @@ -63,7 +63,7 @@ urlpatterns = patterns( url(r'^_login/?$', SocialLoginHandler.as_view()), url(r'^_a?$', SocialLoginHandler.as_view()), - url(r'^token-refresh/', 'rest_framework_jwt.views.refresh_jwt_token'), + url(r'^token-refresh/', refresh_jwt_token), url(r'^__u/checkslug', helpers.UserSlugCheckHelper.as_view()), url(r'^__u/', auth.ObtainUser.as_view()), @@ -76,4 +76,4 @@ urlpatterns = patterns( url(r'^__debug/', DebugView.as_view()), url('', include('social.apps.django_app.urls', namespace='social')), -) +] diff --git a/api/views.py b/api/views.py index fdbf276..1146011 100644 --- a/api/views.py +++ b/api/views.py @@ -57,7 +57,7 @@ class CommentViewSet(viewsets.ModelViewSet): if mix is not None: serializer.save( mix=mix, - user=self.request.user if self.request.user.is_authenticated() else None + user=self.request.user if self.request.user.is_authenticated else None ) except Mix.DoesNotExist: pass @@ -120,7 +120,7 @@ class MixViewSet(viewsets.ModelViewSet): def get_queryset(self): if 'friends' in self.request.query_params: - if self.request.user.is_authenticated(): + if self.request.user.is_authenticated: return self.queryset.filter(user__in=self.request.user.userprofile.following.all()) else: raise PermissionDenied("Not allowed") @@ -267,7 +267,7 @@ class ActivityViewSet(viewsets.ModelViewSet): def get_queryset(self): user = self.request.user - if not user.is_authenticated(): + if not user.is_authenticated: raise PermissionDenied("Not allowed") ret = ActivityPlay.objects.filter(mix__user=user.userprofile).order_by("-id") @@ -295,7 +295,7 @@ class NotificationViewSet(viewsets.ModelViewSet): def get_queryset(self): user = self.request.user - if not user.is_authenticated(): + if not user.is_authenticated: raise PermissionDenied("Not allowed") return Notification.objects.filter(to_user=user.userprofile).order_by('-id') diff --git a/core/utils/waveform.py b/core/utils/waveform.py index bd7b4a9..1d4a780 100644 --- a/core/utils/waveform.py +++ b/core/utils/waveform.py @@ -14,7 +14,7 @@ def generate_waveform(input_file, output_file): print(result) if os.path.exists(output_file): - #crop the image as it looks nice with zoom + # slice image in half across vertical from PIL import Image import glob @@ -30,4 +30,3 @@ def generate_waveform(input_file, output_file): except Exception as ex: print("Error generating waveform {0}".format(ex)) - diff --git a/dss/pipelinesettings.py b/dss/pipelinesettings.py index 034c63f..b3b8172 100644 --- a/dss/pipelinesettings.py +++ b/dss/pipelinesettings.py @@ -1,27 +1,28 @@ -PIPELINE_CSS = { - 'css': { - 'source_filenames': ( - 'css/*.css', - ), - 'variant': 'datauri', - 'output_filename': 'css/c.css' +PIPELINE = { + 'STYLESHEETS': { + 'css': { + 'source_filenames': ( + 'css/*.css', + ), + 'variant': 'datauri', + 'output_filename': 'css/c.css' + }, + 'embedding': { + 'source_filenames': ( + 'css/embedding/*.css', + ), + 'variant': 'datauri', + 'output_filename': 'css/e.css' + } }, - 'embedding': { - 'source_filenames': ( - 'css/embedding/*.css', - ), - 'variant': 'datauri', - 'output_filename': 'css/e.css' + 'JAVASCRIPT': { + 'embedding': { + 'source_filenames': ( + 'js/embedding/jquery.js', + 'js/embedding/jplayer.js', + 'js/embedding/jplayer.cleanskin.js', + ), + 'output_filename': 'js/e.js', + }, } } - -PIPELINE_JS = { - 'embedding': { - 'source_filenames': ( - 'js/embedding/jquery.js', - 'js/embedding/jplayer.js', - 'js/embedding/jplayer.cleanskin.js', - ), - 'output_filename': 'js/e.js', - }, -} diff --git a/dss/psa.py b/dss/psa.py index 5445510..e8c1c8b 100644 --- a/dss/psa.py +++ b/dss/psa.py @@ -1,6 +1,6 @@ from django.conf import global_settings -AUTHENTICATION_BACKENDS = global_settings.AUTHENTICATION_BACKENDS + ( +AUTHENTICATION_BACKENDS = global_settings.AUTHENTICATION_BACKENDS + [ 'social.backends.open_id.OpenIdAuth', 'social.backends.google.GoogleOAuth2', @@ -8,8 +8,7 @@ AUTHENTICATION_BACKENDS = global_settings.AUTHENTICATION_BACKENDS + ( 'social.backends.twitter.TwitterOAuth', 'social.backends.yahoo.YahooOpenId', 'social.backends.facebook.FacebookOAuth2', - -) +] SOCIAL_AUTH_PIPELINE = ( 'social.pipeline.social_auth.social_details', diff --git a/dss/settings.py b/dss/settings.py index 3072266..63f429e 100644 --- a/dss/settings.py +++ b/dss/settings.py @@ -2,8 +2,9 @@ import os import mimetypes from datetime import timedelta -from django.core.urlresolvers import reverse_lazy from django.conf import global_settings +from django.urls import reverse_lazy + from dss import storagesettings from utils import here @@ -69,16 +70,30 @@ STATICFILES_DIRS = ( ) # STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage' -STATICFILES_STORAGE = 'django_pipeline_forgiving.storages.PipelineForgivingStorage' +STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage' -TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( - 'django_facebook.context_processors.facebook', - 'django.core.context_processors.request', - 'django.core.context_processors.i18n', - 'django.core.context_processors.media', - 'django.core.context_processors.static', - 'django.contrib.auth.context_processors.auth', -) +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [ + # insert your TEMPLATE_DIRS here + ], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + # Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this + # list if you haven't customized them: + 'django.contrib.auth.context_processors.auth', + 'django.template.context_processors.debug', + 'django.template.context_processors.i18n', + 'django.template.context_processors.media', + 'django.template.context_processors.static', + 'django.template.context_processors.tz', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] MIDDLEWARE_CLASSES = [ 'django.middleware.gzip.GZipMiddleware', @@ -101,7 +116,7 @@ WSGI_APPLICATION = 'dss.wsgi.application' TEMPLATE_DIRS = (here('templates'),) INSTALLED_APPS = ( - #'grappelli', + # 'grappelli', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', @@ -113,6 +128,9 @@ INSTALLED_APPS = ( # 'django_facebook', 'django_extensions', 'django_gravatar', + 'django_filters', + 'spa', + # 'spa.signals', # TODO: remove 'allauth', @@ -123,21 +141,19 @@ INSTALLED_APPS = ( 'allauth.socialaccount.providers.twitter', 'pipeline', - #'dbbackup', + # 'dbbackup', 'gunicorn', 'corsheaders', 'sorl.thumbnail', 'djcelery', - 'spa', - 'spa.signals', 'core', 'storages', 'social.apps.django_app.default', 'djrill', 'rest_framework', - 'rest_framework.authtoken', + 'rest_framework.authtoken' ) # where to redirect users to after logging in @@ -188,7 +204,7 @@ REST_FRAMEWORK = { 'DEFAULT_MODEL_SERIALIZER_CLASS': 'rest_framework.serializers.HyperlinkedModelSerializer', 'DEFAULT_FILTER_BACKENDS': ( - 'rest_framework.filters.DjangoFilterBackend', + 'django_filters.rest_framework.DjangoFilterBackend', 'rest_framework.filters.OrderingFilter', ), 'DEFAULT_AUTHENTICATION_CLASSES': ( diff --git a/dss/urls.py b/dss/urls.py index 2e9a6f5..458e4fe 100644 --- a/dss/urls.py +++ b/dss/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import patterns, include, url +from django.conf.urls import include, url from django.contrib import admin from django.views.generic import TemplateView, RedirectView @@ -6,19 +6,18 @@ from dss import settings admin.autodiscover() -urlpatterns = patterns( - '', - url(r'^admin/', include(admin.site.urls)), +urlpatterns = [ + url(r'^admin/', admin.site.urls), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), - (r'^grappelli/', include('grappelli.urls')), - (r'^_embed/', include('spa.embedding.urls')), - (r'^__redir/blog/', include('spa.blog.urls')), - (r'^__redir/social/', include('spa.social.urls')), - (r'^podcasts/', include('spa.podcast.urls')), - (r'^podcast/', include('spa.podcast.urls')), + url(r'^grappelli/', include('grappelli.urls')), + url(r'^_embed/', include('spa.embedding.urls')), + url(r'^__redir/blog/', include('spa.blog.urls')), + url(r'^__redir/social/', include('spa.social.urls')), + url(r'^podcasts/', include('spa.podcast.urls')), + url(r'^podcast/', include('spa.podcast.urls')), url(r'', include('user_sessions.urls', 'user_sessions')), - url(r'^', include('api.urls')), -) + url(r'^', include('api.urls')) +] if settings.DEBUG: from django.views.static import serve @@ -26,9 +25,9 @@ if settings.DEBUG: _media_url = settings.MEDIA_URL if _media_url.startswith('/'): _media_url = _media_url[1:] - urlpatterns += patterns( - '', + urlpatterns += [ (r'^%s(?P.*)$' % _media_url, serve, - {'document_root': settings.MEDIA_ROOT})) + {'document_root': settings.MEDIA_ROOT}) + ] del (_media_url, serve) diff --git a/errors b/errors new file mode 100644 index 0000000..18def3a --- /dev/null +++ b/errors @@ -0,0 +1,12 @@ +django-allauth 0.38.0 has requirement Django>=1.11, but you'll have django 1.8.4 which is incompatible. +django-user-sessions 1.6.0 has requirement Django>=1.11, but you'll have django 1.8.4 which is incompatible. +social-auth-core 2.0.0 has requirement six>=1.10.0, but you'll have six 1.6.0 which is incompatible. +django-scheduler 0.8.8 has requirement Django>=1.11, but you'll have django 1.8.4 which is incompatible. +django-filter 2.0.0 has requirement Django>=1.11, but you'll have django 1.8.4 which is incompatible. +drf-nested-routers 0.91 has requirement Django>=1.11, but you'll have django 1.8.4 which is incompatible. +drf-nested-routers 0.91 has requirement djangorestframework>=3.6.0, but you'll have djangorestframework 3.3.3 which is incompatible. +prompt-toolkit 1.0.15 has requirement six>=1.9.0, but you'll have six 1.6.0 which is incompatible. +django-celery 3.2.2 has requirement celery<4.0,>=3.1.15, but you'll have celery 4.2.1 which is incompatible. +django-storages 1.7.1 has requirement Django>=1.11, but you'll have django 1.8.4 which is incompatible. +google-api-python-client 1.7.4 has requirement six<2dev,>=1.6.1, but you'll have six 1.6.0 which is incompatible. +google-auth 1.5.1 has requirement six>=1.9.0, but you'll have six 1.6.0 which is incompatible. diff --git a/manage.py b/manage.py old mode 100755 new mode 100644 diff --git a/requirements.txt b/requirements.txt index b80999e..f53693a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -Django==1.8.4 +Django==2.1.2 django-extensions django-sendfile Werkzeug @@ -9,9 +9,9 @@ django-dirtyfields django-storages django-user-sessions django-cors-headers -six==1.6.0 +six django-filter -django-grappelli==2.5.7 +django-grappelli django-model_utils redis git+git://github.com/llazzaro/django-scheduler.git#django-scheduler @@ -22,8 +22,10 @@ google-api-python-client django-celery django-scheduler django-recurrence +django-compressor azure +azure-storage==0.20.0 sorl-thumbnail @@ -34,15 +36,13 @@ social-auth-app-django django-dbbackup -django-allauth +django-allauth==0.38.0 apache-libcloud mandrill djrill -celery - -djangorestframework==3.3.3 -djangorestframework-jwt==1.6.0 +djangorestframework +djangorestframework-jwt drf-nested-routers pillow django-gravatar2 diff --git a/spa/__init__.py b/spa/__init__.py index 983e9f1..e69de29 100644 --- a/spa/__init__.py +++ b/spa/__init__.py @@ -1 +0,0 @@ -from spa import signals diff --git a/spa/blog/urls.py b/spa/blog/urls.py index d4eb282..f63f588 100644 --- a/spa/blog/urls.py +++ b/spa/blog/urls.py @@ -1,7 +1,8 @@ -from django.conf.urls import patterns, url +from django.conf.urls import url -urlpatterns = patterns( - '', - url(r'^blog/(?P[\w\d_.-]+)/?$', 'spa.blog.views.entry', name='blog_entry_slug'), - url(r'^$', 'spa.blog.views.index', name='blog_index') -) +from spa.blog.views import entry, index + +urlpatterns = [ + url(r'^blog/(?P[\w\d_.-]+)/?$', entry, name='blog_entry_slug'), + url(r'^$', index, name='blog_index') +] diff --git a/spa/blog/views.py b/spa/blog/views.py index 478f108..bb8a414 100644 --- a/spa/blog/views.py +++ b/spa/blog/views.py @@ -3,7 +3,6 @@ import logging from django.conf.urls import url from django.contrib.sites.models import Site -from django.core.urlresolvers import resolve from django.http import Http404 from django.shortcuts import render_to_response from django.template.context import RequestContext diff --git a/spa/embedding/urls.py b/spa/embedding/urls.py index 10a3e67..44de664 100644 --- a/spa/embedding/urls.py +++ b/spa/embedding/urls.py @@ -1,7 +1,8 @@ -from django.conf.urls import patterns, url +from django.conf.urls import url -urlpatterns = patterns( - '', - url(r'^mix/(?P\d+)/$', 'spa.embedding.views.mix', name='embed_mix'), - url(r'^mix/(?P[\w\d_.-]+)/$', 'spa.embedding.views.mix', name='embed_mix_slug'), -) \ No newline at end of file +from spa.embedding.views import mix + +urlpatterns = [ + url(r'^mix/(?P\d+)/$', mix, name='embed_mix'), + url(r'^mix/(?P[\w\d_.-]+)/$', mix, name='embed_mix_slug'), +] \ No newline at end of file diff --git a/spa/migrations/0001_initial.py b/spa/migrations/0001_initial.py index c9e7d8b..40cb947 100644 --- a/spa/migrations/0001_initial.py +++ b/spa/migrations/0001_initial.py @@ -11,7 +11,6 @@ import spa.models.release class Migration(migrations.Migration): - dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] @@ -122,7 +121,8 @@ class Migration(migrations.Migration): ('slug', models.SlugField()), ], options={ - 'permissions': (('mix_add_homepage', 'Can add a mix to the homepage'), ('mix_allow_download', 'Can allow downloads on a mix')), + 'permissions': (('mix_add_homepage', 'Can add a mix to the homepage'), + ('mix_allow_download', 'Can allow downloads on a mix')), 'ordering': ('-id',), }, ), @@ -185,7 +185,7 @@ class Migration(migrations.Migration): ('release_date', models.DateField(auto_now=True)), ('embed_code', models.TextField(blank=True)), ('is_active', models.BooleanField(default=True)), - ('release_label', models.ForeignKey(to='spa.Label')), + ('release_label', models.ForeignKey(to='spa.Label', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -195,7 +195,8 @@ class Migration(migrations.Migration): ('object_created', models.DateTimeField(auto_now_add=True)), ('object_updated', models.DateTimeField(db_index=True, auto_now=True)), ('description', models.TextField()), - ('release', models.ForeignKey(related_name='release_audio', blank=True, null=True, to='spa.Release')), + ('release', models.ForeignKey(related_name='release_audio', blank=True, null=True, to='spa.Release', + on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -211,7 +212,7 @@ class Migration(migrations.Migration): ('title', models.CharField(max_length=255)), ('remixer', models.CharField(max_length=255)), ('label', models.CharField(max_length=255)), - ('mix', models.ForeignKey(related_name='tracklist', to='spa.Mix')), + ('mix', models.ForeignKey(related_name='tracklist', to='spa.Mix', on_delete=models.CASCADE)), ], options={ 'abstract': False, @@ -224,19 +225,29 @@ class Migration(migrations.Migration): ('object_created', models.DateTimeField(auto_now_add=True)), ('object_updated', models.DateTimeField(db_index=True, auto_now=True)), ('avatar_type', models.CharField(max_length=15, default='social')), - ('avatar_image', models.ImageField(upload_to=spa.models.userprofile.avatar_name, max_length=1024, blank=True)), + ('avatar_image', + models.ImageField(upload_to=spa.models.userprofile.avatar_name, max_length=1024, blank=True)), ('display_name', models.CharField(max_length=35, blank=True)), ('description', models.CharField(max_length=2048, blank=True)), ('slug', models.SlugField(default=None, null=True, blank=True)), ('activity_sharing_networks', models.IntegerField(default=0)), - ('activity_sharing_facebook', bitfield.models.BitField((('plays', 'Plays'), ('likes', 'Likes'), ('favourites', 'Favourites'), ('follows', 'Follows'), ('comments', 'Comments')), default=0)), - ('activity_sharing_twitter', bitfield.models.BitField((('plays', 'Plays'), ('likes', 'Likes'), ('favourites', 'Favourites'), ('follows', 'Follows'), ('comments', 'Comments')), default=0)), - ('email_notifications', bitfield.models.BitField((('plays', 'Plays'), ('likes', 'Likes'), ('favourites', 'Favourites'), ('follows', 'Follows'), ('comments', 'Comments')), default=0)), + ('activity_sharing_facebook', bitfield.models.BitField((('plays', 'Plays'), ('likes', 'Likes'), + ('favourites', 'Favourites'), + ('follows', 'Follows'), + ('comments', 'Comments')), default=0)), + ('activity_sharing_twitter', bitfield.models.BitField((('plays', 'Plays'), ('likes', 'Likes'), + ('favourites', 'Favourites'), + ('follows', 'Follows'), + ('comments', 'Comments')), default=0)), + ('email_notifications', bitfield.models.BitField((('plays', 'Plays'), ('likes', 'Likes'), + ('favourites', 'Favourites'), ('follows', 'Follows'), + ('comments', 'Comments')), default=0)), ('city', models.CharField(max_length=100, null=True, blank=True)), ('country', models.CharField(max_length=100, null=True, blank=True)), ('last_known_session', models.CharField(max_length=250, null=True, blank=True)), ('following', models.ManyToManyField(related_name='followers', to='spa.UserProfile', blank=True)), - ('user', models.OneToOneField(related_name='userprofile', to=settings.AUTH_USER_MODEL)), + ('user', models.OneToOneField(related_name='userprofile', to=settings.AUTH_USER_MODEL, + on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -248,13 +259,15 @@ class Migration(migrations.Migration): ('venue_name', models.CharField(max_length=250)), ('venue_address', models.CharField(max_length=1024)), ('venue_image', models.ImageField(upload_to=spa.models.venue.venue_image_name, blank=True)), - ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)), + ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)), ], ), migrations.CreateModel( name='ActivityComment', fields=[ - ('activity_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, parent_link=True, to='spa.Activity')), + ('activity_ptr', + models.OneToOneField(auto_created=True, primary_key=True, serialize=False, parent_link=True, + to='spa.Activity', on_delete=models.CASCADE)), ], options={ 'abstract': False, @@ -264,7 +277,9 @@ class Migration(migrations.Migration): migrations.CreateModel( name='ActivityDownload', fields=[ - ('activity_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, parent_link=True, to='spa.Activity')), + ('activity_ptr', + models.OneToOneField(auto_created=True, primary_key=True, serialize=False, parent_link=True, + to='spa.Activity', on_delete=models.CASCADE)), ], options={ 'abstract': False, @@ -274,7 +289,9 @@ class Migration(migrations.Migration): migrations.CreateModel( name='ActivityFavourite', fields=[ - ('activity_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, parent_link=True, to='spa.Activity')), + ('activity_ptr', + models.OneToOneField(auto_created=True, primary_key=True, serialize=False, parent_link=True, + to='spa.Activity', on_delete=models.CASCADE)), ], options={ 'abstract': False, @@ -284,8 +301,11 @@ class Migration(migrations.Migration): migrations.CreateModel( name='ActivityFollow', fields=[ - ('activity_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, parent_link=True, to='spa.Activity')), - ('to_user', models.ForeignKey(related_name='activity_follow', to='spa.UserProfile')), + ('activity_ptr', + models.OneToOneField(auto_created=True, primary_key=True, serialize=False, parent_link=True, + to='spa.Activity', on_delete=models.CASCADE)), + ('to_user', + models.ForeignKey(related_name='activity_follow', to='spa.UserProfile', on_delete=models.CASCADE)), ], options={ 'abstract': False, @@ -295,14 +315,18 @@ class Migration(migrations.Migration): migrations.CreateModel( name='ActivityLike', fields=[ - ('activity_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, parent_link=True, to='spa.Activity')), + ('activity_ptr', + models.OneToOneField(auto_created=True, primary_key=True, serialize=False, parent_link=True, + to='spa.Activity', on_delete=models.CASCADE)), ], bases=('spa.activity',), ), migrations.CreateModel( name='ActivityPlay', fields=[ - ('activity_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, parent_link=True, to='spa.Activity')), + ('activity_ptr', + models.OneToOneField(auto_created=True, primary_key=True, serialize=False, parent_link=True, + to='spa.Activity', on_delete=models.CASCADE)), ], options={ 'abstract': False, @@ -312,7 +336,9 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Recurrence', fields=[ - ('_lookup_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, parent_link=True, to='spa._Lookup')), + ('_lookup_ptr', + models.OneToOneField(auto_created=True, primary_key=True, serialize=False, parent_link=True, + to='spa._Lookup', on_delete=models.CASCADE)), ], options={ 'abstract': False, @@ -322,27 +348,28 @@ class Migration(migrations.Migration): migrations.AddField( model_name='release', name='user', - field=models.ForeignKey(editable=False, to='spa.UserProfile'), + field=models.ForeignKey(editable=False, to='spa.UserProfile', on_delete=models.CASCADE), ), migrations.AddField( model_name='purchaselink', name='track', - field=models.ForeignKey(related_name='purchase_link', to='spa.Tracklist'), + field=models.ForeignKey(related_name='purchase_link', to='spa.Tracklist', on_delete=models.CASCADE), ), migrations.AddField( model_name='playlist', name='user', - field=models.ForeignKey(related_name='playlists', to='spa.UserProfile'), + field=models.ForeignKey(related_name='playlists', to='spa.UserProfile', on_delete=models.CASCADE), ), migrations.AddField( model_name='notification', name='from_user', - field=models.ForeignKey(related_name='notifications', blank=True, null=True, to='spa.UserProfile'), + field=models.ForeignKey(related_name='notifications', blank=True, null=True, to='spa.UserProfile', + on_delete=models.CASCADE), ), migrations.AddField( model_name='notification', name='to_user', - field=models.ForeignKey(related_name='to_notications', to='spa.UserProfile'), + field=models.ForeignKey(related_name='to_notications', to='spa.UserProfile', on_delete=models.CASCADE), ), migrations.AddField( model_name='mix', @@ -362,17 +389,19 @@ class Migration(migrations.Migration): migrations.AddField( model_name='mix', name='user', - field=models.ForeignKey(related_name='mixes', to='spa.UserProfile'), + field=models.ForeignKey(related_name='mixes', to='spa.UserProfile', on_delete=models.CASCADE), ), migrations.AddField( model_name='message', name='from_user', - field=models.ForeignKey(related_name='sent_messages', blank=True, null=True, to='spa.UserProfile'), + field=models.ForeignKey(related_name='sent_messages', blank=True, null=True, to='spa.UserProfile', + on_delete=models.CASCADE), ), migrations.AddField( model_name='message', name='to_user', - field=models.ForeignKey(related_name='messages', blank=True, null=True, to='spa.UserProfile'), + field=models.ForeignKey(related_name='messages', blank=True, null=True, to='spa.UserProfile', + on_delete=models.CASCADE), ), migrations.AddField( model_name='comment', @@ -382,46 +411,49 @@ class Migration(migrations.Migration): migrations.AddField( model_name='comment', name='mix', - field=models.ForeignKey(related_name='comments', editable=False, blank=True, null=True, to='spa.Mix'), + field=models.ForeignKey(related_name='comments', editable=False, blank=True, null=True, to='spa.Mix', + on_delete=models.CASCADE), ), migrations.AddField( model_name='comment', name='user', - field=models.ForeignKey(editable=False, blank=True, null=True, to=settings.AUTH_USER_MODEL), + field=models.ForeignKey(editable=False, blank=True, null=True, to=settings.AUTH_USER_MODEL, + on_delete=models.CASCADE), ), migrations.AddField( model_name='chatmessage', name='user', - field=models.ForeignKey(related_name='chat_messages', blank=True, null=True, to='spa.UserProfile'), + field=models.ForeignKey(related_name='chat_messages', blank=True, null=True, to='spa.UserProfile', + on_delete=models.CASCADE), ), migrations.AddField( model_name='activity', name='user', - field=models.ForeignKey(blank=True, null=True, to='spa.UserProfile'), + field=models.ForeignKey(blank=True, null=True, to='spa.UserProfile', on_delete=models.CASCADE), ), migrations.AddField( model_name='activityplay', name='mix', - field=models.ForeignKey(related_name='activity_plays', to='spa.Mix'), + field=models.ForeignKey(related_name='activity_plays', to='spa.Mix', on_delete=models.CASCADE), ), migrations.AddField( model_name='activitylike', name='mix', - field=models.ForeignKey(related_name='activity_likes', to='spa.Mix'), + field=models.ForeignKey(related_name='activity_likes', to='spa.Mix', on_delete=models.CASCADE), ), migrations.AddField( model_name='activityfavourite', name='mix', - field=models.ForeignKey(related_name='activity_favourites', to='spa.Mix'), + field=models.ForeignKey(related_name='activity_favourites', to='spa.Mix', on_delete=models.CASCADE), ), migrations.AddField( model_name='activitydownload', name='mix', - field=models.ForeignKey(related_name='activity_downloads', to='spa.Mix'), + field=models.ForeignKey(related_name='activity_downloads', to='spa.Mix', on_delete=models.CASCADE), ), migrations.AddField( model_name='activitycomment', name='mix', - field=models.ForeignKey(related_name='activity_comments', to='spa.Mix'), + field=models.ForeignKey(related_name='activity_comments', to='spa.Mix', on_delete=models.CASCADE), ), ] diff --git a/spa/migrations/0002_show.py b/spa/migrations/0002_show.py index 6436d5e..0870189 100644 --- a/spa/migrations/0002_show.py +++ b/spa/migrations/0002_show.py @@ -18,7 +18,7 @@ class Migration(migrations.Migration): ('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')), + ('mix', models.ForeignKey(related_name='show', to='spa.Mix', on_delete=models.CASCADE)), ], ), ] diff --git a/spa/migrations/0003_auto_20150820_2209.py b/spa/migrations/0003_auto_20150820_2209.py index 360f174..c281ff2 100644 --- a/spa/migrations/0003_auto_20150820_2209.py +++ b/spa/migrations/0003_auto_20150820_2209.py @@ -18,7 +18,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='show', name='user', - field=models.ForeignKey(default=2, related_name='show', to='spa.UserProfile'), + field=models.ForeignKey(default=2, related_name='show', to='spa.UserProfile', on_delete=models.CASCADE), preserve_default=False, ), ] diff --git a/spa/migrations/0010_auto_20150907_2238.py b/spa/migrations/0010_auto_20150907_2238.py index f60865d..ab3942c 100644 --- a/spa/migrations/0010_auto_20150907_2238.py +++ b/spa/migrations/0010_auto_20150907_2238.py @@ -20,7 +20,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='show', name='mix', - field=models.ForeignKey(null=True, related_name='show', to='spa.Mix', blank=True), + field=models.ForeignKey(null=True, related_name='show', to='spa.Mix', blank=True, on_delete=models.CASCADE), ), migrations.AlterField( model_name='show', diff --git a/spa/migrations/0011_auto_20150910_1927.py b/spa/migrations/0011_auto_20150910_1927.py index 0f3b91e..6e9a4f2 100644 --- a/spa/migrations/0011_auto_20150910_1927.py +++ b/spa/migrations/0011_auto_20150910_1927.py @@ -14,12 +14,12 @@ class Migration(migrations.Migration): migrations.AddField( model_name='show', name='performer', - field=models.ForeignKey(related_name='shows', default=2, to='spa.UserProfile'), + field=models.ForeignKey(related_name='shows', default=2, to='spa.UserProfile', on_delete=models.CASCADE), preserve_default=False, ), migrations.AlterField( model_name='show', name='user', - field=models.ForeignKey(related_name='owned_shows', to='spa.UserProfile'), + field=models.ForeignKey(related_name='owned_shows', to='spa.UserProfile', on_delete=models.CASCADE), ), ] diff --git a/spa/migrations/0017_blog.py b/spa/migrations/0017_blog.py index 180474c..e620860 100644 --- a/spa/migrations/0017_blog.py +++ b/spa/migrations/0017_blog.py @@ -20,7 +20,7 @@ class Migration(migrations.Migration): ('date_created', models.DateField(auto_now=True)), ('title', models.CharField(max_length=1024)), ('body', models.TextField()), - ('user', models.ForeignKey(blank=True, to='spa.UserProfile', null=True)), + ('user', models.ForeignKey(blank=True, to='spa.UserProfile', null=True, on_delete=models.CASCADE)), ], options={ 'abstract': False, diff --git a/spa/migrations/0020_blogcomment.py b/spa/migrations/0020_blogcomment.py index bef0d7d..2f0c4f1 100644 --- a/spa/migrations/0020_blogcomment.py +++ b/spa/migrations/0020_blogcomment.py @@ -19,8 +19,8 @@ class Migration(migrations.Migration): ('object_updated', models.DateTimeField(auto_now=True, db_index=True)), ('comment', models.CharField(max_length=1024)), ('date_created', models.DateField(auto_now_add=True)), - ('blog', models.ForeignKey(to='spa.Blog')), - ('user', models.ForeignKey(null=True, to='spa.UserProfile', blank=True)), + ('blog', models.ForeignKey(to='spa.Blog', on_delete=models.CASCADE)), + ('user', models.ForeignKey(null=True, to='spa.UserProfile', blank=True, on_delete=models.CASCADE)), ], options={ 'abstract': False, diff --git a/spa/migrations/0023_socialaccountlink.py b/spa/migrations/0023_socialaccountlink.py index be51623..79966fd 100644 --- a/spa/migrations/0023_socialaccountlink.py +++ b/spa/migrations/0023_socialaccountlink.py @@ -19,7 +19,8 @@ class Migration(migrations.Migration): ('type', models.CharField(max_length=30, choices=[('twitter', 'Twitter'), ('facebook', 'Facebook'), ('google', 'Google')])), ('social_id', models.CharField(max_length=150)), - ('user', models.ForeignKey(to='spa.UserProfile', related_name='social_accounts')), + ('user', + models.ForeignKey(to='spa.UserProfile', related_name='social_accounts', on_delete=models.CASCADE)), ], options={ 'abstract': False, diff --git a/spa/models/activity.py b/spa/models/activity.py index d7e4168..1f92f09 100644 --- a/spa/models/activity.py +++ b/spa/models/activity.py @@ -25,7 +25,7 @@ ACTIVITYTYPES = ( class Activity(BaseModel): objects = InheritanceManager() - user = models.ForeignKey(UserProfile, null=True, blank=True) + user = models.ForeignKey(UserProfile, null=True, blank=True, on_delete=models.CASCADE) date = models.DateTimeField(auto_now_add=True) def __unicode__(self): @@ -131,7 +131,7 @@ class Activity(BaseModel): class ActivityLike(Activity): - mix = models.ForeignKey('spa.Mix', related_name='activity_likes') + mix = models.ForeignKey('spa.Mix', related_name='activity_likes', on_delete=models.CASCADE) class Meta: app_label = 'spa' @@ -159,7 +159,7 @@ class ActivityLike(Activity): class ActivityFollow(Activity): - to_user = models.ForeignKey('spa.UserProfile', related_name='activity_follow') + to_user = models.ForeignKey('spa.UserProfile', related_name='activity_follow', on_delete=models.CASCADE) def get_object_type(self): return "user" @@ -187,7 +187,7 @@ class ActivityFollow(Activity): class ActivityFavourite(Activity): - mix = models.ForeignKey('spa.Mix', related_name='activity_favourites') + mix = models.ForeignKey('spa.Mix', related_name='activity_favourites', on_delete=models.CASCADE) def get_object_type(self): return "mix" @@ -212,7 +212,7 @@ class ActivityFavourite(Activity): class ActivityPlay(Activity): - mix = models.ForeignKey('spa.Mix', related_name='activity_plays') + mix = models.ForeignKey('spa.Mix', related_name='activity_plays', on_delete=models.CASCADE) def get_object_type(self): return "mix" @@ -237,7 +237,7 @@ class ActivityPlay(Activity): class ActivityDownload(Activity): - mix = models.ForeignKey('spa.Mix', related_name='activity_downloads') + mix = models.ForeignKey('spa.Mix', related_name='activity_downloads', on_delete=models.CASCADE) def get_object_type(self): return "mix" @@ -262,7 +262,7 @@ class ActivityDownload(Activity): class ActivityComment(Activity): - mix = models.ForeignKey('spa.Mix', related_name='activity_comments') + mix = models.ForeignKey('spa.Mix', related_name='activity_comments', on_delete=models.CASCADE) def get_object_type(self): return "mix" diff --git a/spa/models/blog.py b/spa/models/blog.py index 90543b3..5994c8b 100644 --- a/spa/models/blog.py +++ b/spa/models/blog.py @@ -4,7 +4,7 @@ from django.db import models class Blog(BaseModel): - user = models.ForeignKey(UserProfile, null=True, blank=True) + user = models.ForeignKey(UserProfile, null=True, blank=True, on_delete=models.CASCADE) date_created = models.DateField(auto_now=True) published = models.BooleanField(default=False) slug = models.SlugField() @@ -20,7 +20,7 @@ class Blog(BaseModel): class BlogComment(BaseModel): - blog = models.ForeignKey(Blog) - user = models.ForeignKey(UserProfile, null=True, blank=True) + blog = models.ForeignKey(Blog, on_delete=models.CASCADE) + user = models.ForeignKey(UserProfile, null=True, blank=True, on_delete=models.CASCADE) comment = models.CharField(max_length=1024) date_created = models.DateField(auto_now_add=True) diff --git a/spa/models/chatmessage.py b/spa/models/chatmessage.py index 1b54efa..ed5e781 100644 --- a/spa/models/chatmessage.py +++ b/spa/models/chatmessage.py @@ -6,4 +6,4 @@ from spa.models.userprofile import UserProfile class ChatMessage(BaseModel): message = models.TextField('Message') timestamp = models.DateTimeField('Timestamp', auto_now_add=True) - user = models.ForeignKey(UserProfile, related_name='chat_messages', blank=True, null=True) \ No newline at end of file + user = models.ForeignKey(UserProfile, related_name='chat_messages', blank=True, null=True, on_delete=models.CASCADE) diff --git a/spa/models/comment.py b/spa/models/comment.py index 186ba92..83e461a 100644 --- a/spa/models/comment.py +++ b/spa/models/comment.py @@ -9,8 +9,8 @@ class Comment(BaseModel): class Meta: app_label = 'spa' - user = models.ForeignKey(User, editable=False, null=True, blank=True) - mix = models.ForeignKey(Mix, editable=False, null=True, blank=True, related_name='comments') + user = models.ForeignKey(User, editable=False, null=True, blank=True, on_delete=models.CASCADE) + mix = models.ForeignKey(Mix, editable=False, null=True, blank=True, related_name='comments', on_delete=models.CASCADE) comment = models.CharField(max_length=1024) date_created = models.DateTimeField(auto_now_add=True) time_index = models.IntegerField(default=0) @@ -23,7 +23,7 @@ class Comment(BaseModel): pass def get_user(self): - return self.user.userprofile if self.user.is_authenticated() else self.user + return self.user.userprofile if self.user.is_authenticated else self.user @property def avatar_image(self): diff --git a/spa/models/message.py b/spa/models/message.py index bb4806d..b7fe48d 100644 --- a/spa/models/message.py +++ b/spa/models/message.py @@ -21,8 +21,10 @@ class MessageManager(models.Manager): class Message(BaseModel): objects = MessageManager() - from_user = models.ForeignKey('spa.UserProfile', null=True, blank=True, related_name='sent_messages') - to_user = models.ForeignKey('spa.UserProfile', null=True, blank=True, related_name='messages') + from_user = models.ForeignKey('spa.UserProfile', null=True, blank=True, related_name='sent_messages', + on_delete=models.CASCADE) + to_user = models.ForeignKey('spa.UserProfile', null=True, blank=True, related_name='messages', + on_delete=models.CASCADE) sent_at = models.DateTimeField(null=True, blank=True, auto_now=True) read_at = models.DateTimeField(null=True, blank=True) @@ -47,4 +49,4 @@ class Message(BaseModel): notification.save() except Exception as ex: - print("Error creating message notification: %s" % ex) \ No newline at end of file + print("Error creating message notification: %s" % ex) diff --git a/spa/models/mix.py b/spa/models/mix.py old mode 100755 new mode 100644 index 654f2e8..bc681aa --- a/spa/models/mix.py +++ b/spa/models/mix.py @@ -74,7 +74,7 @@ class Mix(BaseModel): is_featured = models.BooleanField(default=False) is_private = models.BooleanField(default=False) is_downloadable = models.BooleanField(default=True) - user = models.ForeignKey(UserProfile, related_name='mixes') + user = models.ForeignKey(UserProfile, related_name='mixes', on_delete=models.CASCADE) waveform_generated = models.BooleanField(default=False) waveform_version = models.IntegerField(default=1) mp3tags_updated = models.BooleanField(default=False) @@ -203,7 +203,7 @@ class Mix(BaseModel): def add_download(self, user): try: - if user.is_authenticated(): + if user.is_authenticated: ActivityDownload(user=user, mix=self).save() except Exception as e: self.logger.exception("Error adding mix download: %s" % e) @@ -223,7 +223,7 @@ class Mix(BaseModel): def add_play(self, user): try: - if user.is_authenticated(): + if user.is_authenticated: ActivityPlay(user=user.userprofile, mix=self).save() else: ActivityPlay(user=None, mix=self).save() @@ -235,7 +235,7 @@ class Mix(BaseModel): try: if user is None: return - if user.user.is_authenticated(): + if user.user.is_authenticated: if value: if self.favourites.filter(user=user.user).count() == 0: fav = ActivityFavourite(user=user, mix=self) @@ -253,7 +253,7 @@ class Mix(BaseModel): try: if user is None: return - if user.user.is_authenticated(): + if user.user.is_authenticated: if value: if self.likes.filter(user=user.user).count() == 0: v = ActivityLike(user=user, mix=self) @@ -270,7 +270,7 @@ class Mix(BaseModel): def is_favourited(self, user): if user is None: return False - if user.is_authenticated(): + if user.is_authenticated: return self.favourites.filter(user=user).count() != 0 else: return False @@ -278,7 +278,7 @@ class Mix(BaseModel): def is_liked(self, user): if user is None: return False - if user.is_authenticated(): + if user.is_authenticated: return self.likes.filter(user=user).count() != 0 return False diff --git a/spa/models/notification.py b/spa/models/notification.py index 8d1c95e..2b87034 100644 --- a/spa/models/notification.py +++ b/spa/models/notification.py @@ -9,8 +9,8 @@ from spa.models import BaseModel, UserProfile class Notification(BaseModel): - to_user = models.ForeignKey('spa.UserProfile', related_name='to_notications') - from_user = models.ForeignKey('spa.UserProfile', related_name='notifications', null=True, blank=True) + to_user = models.ForeignKey('spa.UserProfile', related_name='to_notications', on_delete=models.CASCADE) + from_user = models.ForeignKey('spa.UserProfile', related_name='notifications', null=True, blank=True, on_delete=models.CASCADE) date = models.DateTimeField(auto_now_add=True) verb = models.CharField(max_length=200, null=True) @@ -55,7 +55,7 @@ class Notification(BaseModel): 'text': 'Get yourself some HTML man!', } - result = mandrill_client.messages.send(message=message, async=False) + result = mandrill_client.messages.send(message=message) print(result) except mandrill.Error as e: # Mandrill errors are thrown as exceptions diff --git a/spa/models/playlist.py b/spa/models/playlist.py index f401d20..c9ff54e 100644 --- a/spa/models/playlist.py +++ b/spa/models/playlist.py @@ -18,7 +18,7 @@ class PlaylistManager(models.Manager): class Playlist(BaseModel): name = models.CharField(max_length=255) date_created = models.DateTimeField(auto_now_add=True) - user = models.ForeignKey(UserProfile, related_name='playlists') + user = models.ForeignKey(UserProfile, related_name='playlists', on_delete=models.CASCADE) mixes = models.ManyToManyField(Mix) public = models.BooleanField(default=True) slug = models.SlugField() diff --git a/spa/models/purchaselink.py b/spa/models/purchaselink.py index 57c2e8f..0797211 100644 --- a/spa/models/purchaselink.py +++ b/spa/models/purchaselink.py @@ -4,6 +4,6 @@ from spa.models.tracklist import Tracklist from django.db import models class PurchaseLink(BaseModel): - track = models.ForeignKey(Tracklist, related_name='purchase_link') + track = models.ForeignKey(Tracklist, related_name='purchase_link', on_delete=models.CASCADE) url = models.URLField() provider = models.CharField(max_length=255) \ No newline at end of file diff --git a/spa/models/release.py b/spa/models/release.py index 3cc067d..8c94e9b 100644 --- a/spa/models/release.py +++ b/spa/models/release.py @@ -20,13 +20,13 @@ class Release(BaseModel): release_title = models.CharField(max_length=100) release_description = models.TextField() release_image = models.ImageField(blank=True, upload_to=release_image_name) - release_label = models.ForeignKey(Label) + release_label = models.ForeignKey(Label, on_delete=models.CASCADE) release_date = models.DateField(auto_now=True) embed_code = models.TextField(blank=True) is_active = models.BooleanField(default=True) - user = models.ForeignKey(UserProfile, editable=False) + user = models.ForeignKey(UserProfile, editable=False, on_delete=models.CASCADE) def __unicode__(self): return self.release_title @@ -57,5 +57,5 @@ class ReleaseAudio(BaseModel): def get_waveform_url(self): return settings.MEDIA_URL + 'waveforms/release/%d.%s' % (self.id, "png") - release = models.ForeignKey(Release, related_name='release_audio', null=True, blank=True) + release = models.ForeignKey(Release, related_name='release_audio', null=True, blank=True, on_delete=models.CASCADE) description = models.TextField() \ No newline at end of file diff --git a/spa/models/session.py b/spa/models/session.py index 2d78ba5..147ec8b 100644 --- a/spa/models/session.py +++ b/spa/models/session.py @@ -4,4 +4,4 @@ from spa.models import BaseModel, UserProfile class Session(BaseModel): jwt_token = models.CharField(max_length=2048) - user = models.ForeignKey(UserProfile) + user = models.ForeignKey(UserProfile, on_delete=models.CASCADE) diff --git a/spa/models/show.py b/spa/models/show.py index 459c798..6250c5d 100644 --- a/spa/models/show.py +++ b/spa/models/show.py @@ -12,9 +12,9 @@ class ShowOverlapException(Exception): class Show(BaseModel): - 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') + mix = models.ForeignKey(Mix, related_name='show', blank=True, null=True, on_delete=models.CASCADE) + user = models.ForeignKey(UserProfile, related_name='owned_shows', on_delete=models.CASCADE) + performer = models.ForeignKey(UserProfile, related_name='shows', on_delete=models.CASCADE) start_date = models.DateTimeField() end_date = models.DateTimeField(blank=True) recurrence = models.CharField(max_length=1) diff --git a/spa/models/socialaccountlink.py b/spa/models/socialaccountlink.py index 518c620..1bc3310 100644 --- a/spa/models/socialaccountlink.py +++ b/spa/models/socialaccountlink.py @@ -24,7 +24,7 @@ class SocialAccountLink(BaseModel): ) type = models.CharField(max_length=30, choices=ACCOUNT_TYPE) social_id = models.CharField(max_length=150) - user = models.ForeignKey(UserProfile, related_name='social_accounts') + user = models.ForeignKey(UserProfile, related_name='social_accounts', on_delete=models.CASCADE) access_token = models.CharField(max_length=500, null=True, blank=True) access_token_secret = models.CharField(max_length=500, null=True, blank=True) provider_data = models.CharField(max_length=2000, null=True, blank=True) diff --git a/spa/models/tracklist.py b/spa/models/tracklist.py index fbd5065..6f41551 100644 --- a/spa/models/tracklist.py +++ b/spa/models/tracklist.py @@ -3,7 +3,7 @@ from spa.models.basemodel import BaseModel from django.db import models class Tracklist(BaseModel): - mix = models.ForeignKey(Mix, related_name='tracklist') + mix = models.ForeignKey(Mix, related_name='tracklist', on_delete=models.CASCADE) index = models.SmallIntegerField() timeindex = models.TimeField(null=True) description = models.CharField(max_length=255) diff --git a/spa/models/userprofile.py b/spa/models/userprofile.py index 657f44b..b2e64db 100644 --- a/spa/models/userprofile.py +++ b/spa/models/userprofile.py @@ -41,7 +41,7 @@ class UserProfile(BaseModel): ACTIVITY_SHARE_NETWORK_FACEBOOK = 1 ACTIVITY_SHARE_NETWORK_TWITTER = 2 - user = models.OneToOneField(User, unique=True, related_name='userprofile') + user = models.OneToOneField(User, unique=True, related_name='userprofile', on_delete=models.CASCADE) uid = models.UUIDField(primary_key=False, editable=False, null=True) avatar_type = models.CharField(max_length=15, default='social') @@ -108,7 +108,7 @@ class UserProfile(BaseModel): if self.user.is_staff: roles.append('staff') - if self.user.is_authenticated(): + if self.user.is_authenticated: roles.append('user') return roles @@ -240,7 +240,7 @@ class UserProfile(BaseModel): try: if user is None: return - if user.user.is_authenticated(): + if user.user.is_authenticated: v = ActivityFollow(user=self, to_user=user) v.save() self.following.add(user) @@ -253,7 +253,7 @@ class UserProfile(BaseModel): try: if user is None: return - if user.user.is_authenticated(): + if user.user.is_authenticated: self.following.remove(user) self.save() except Exception as ex: diff --git a/spa/models/venue.py b/spa/models/venue.py index 2508684..58ab60b 100644 --- a/spa/models/venue.py +++ b/spa/models/venue.py @@ -10,7 +10,7 @@ class Venue(BaseModel): class Meta: app_label = 'spa' - user = models.ForeignKey(User) + user = models.ForeignKey(User, on_delete=models.CASCADE) venue_name = models.CharField(max_length=250) venue_address = models.CharField(max_length=1024) venue_image = models.ImageField(blank=True, upload_to=venue_image_name) diff --git a/spa/podcast/urls.py b/spa/podcast/urls.py index 1081ba9..614f959 100644 --- a/spa/podcast/urls.py +++ b/spa/podcast/urls.py @@ -1,9 +1,10 @@ -from django.conf.urls import patterns, url +from django.conf.urls import url -urlpatterns = patterns( - '', - url(r'^(?P[\w\d_.-]+)/favourites/?$', 'spa.podcast.views.favourites', name='podast_favourites_slug'), - url(r'^(?P[\w\d_.-]+)/following/?$', 'spa.podcast.views.following', name='podast_following_slug'), - url(r'^(?P[\w\d_.-]+)/?$', 'spa.podcast.views.user', name='podast_user_slug'), - url(r'^/?$', 'spa.podcast.views.featured', name='podast_featured_slug'), -) +from spa.podcast.views import favourites, following, user, featured + +urlpatterns = [ + url(r'^(?P[\w\d_.-]+)/favourites/?$', favourites, name='podast_favourites_slug'), + url(r'^(?P[\w\d_.-]+)/following/?$', following, name='podast_following_slug'), + url(r'^(?P[\w\d_.-]+)/?$', user, name='podast_user_slug'), + url(r'^/?$', featured, name='podast_featured_slug'), +] diff --git a/spa/social/urls.py b/spa/social/urls.py index 8534985..a65b2b7 100644 --- a/spa/social/urls.py +++ b/spa/social/urls.py @@ -1,10 +1,11 @@ -from django.conf.urls import patterns, url +from django.conf.urls import url -urlpatterns = patterns( - '', - url(r'^playlist/(?P[\w\d_.-]+)/?$', 'spa.social.views.playlist', name='social_playlist_slug'), - url(r'^mix/(?P[\w\d_.-]+)/?$', 'spa.social.views.facebook_mix', name='social_mix_slug'), - url(r'^user/(?P\w+)/?$', 'spa.social.views.user', name='social_user'), - url(r'^like/(?P\d+)/?$', 'spa.social.views.post_like', name='social_like'), - url(r'^$', 'spa.social.views.index', name='social_index') -) \ No newline at end of file +from spa.social.views import playlist, facebook_mix, user, post_like, index + +urlpatterns = [ + url(r'^playlist/(?P[\w\d_.-]+)/?$', playlist, name='social_playlist_slug'), + url(r'^mix/(?P[\w\d_.-]+)/?$', facebook_mix, name='social_mix_slug'), + url(r'^user/(?P\w+)/?$', user, name='social_user'), + url(r'^like/(?P\d+)/?$', post_like, name='social_like'), + url(r'^$', index, name='social_index') +] \ No newline at end of file diff --git a/spa/social/views.py b/spa/social/views.py index 7e7f412..c2e2a50 100644 --- a/spa/social/views.py +++ b/spa/social/views.py @@ -3,12 +3,13 @@ import logging from django.conf.urls import url from django.contrib.sites.models import Site -from django.core.urlresolvers import resolve from django.http import Http404 from django.shortcuts import render_to_response from django.template.context import RequestContext import requests from allauth.socialaccount.models import SocialToken +from django.urls import resolve + from core.utils.url import wrap_full from dss import settings