mirror of
https://github.com/fergalmoran/dss.api.git
synced 2026-02-05 15:24:24 +00:00
Django 2.1.2 upgrade
This commit is contained in:
21
Dockerfile
21
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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
16
api/urls.py
16
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')),
|
||||
)
|
||||
]
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
@@ -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',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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': (
|
||||
|
||||
29
dss/urls.py
29
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<path>.*)$' % _media_url,
|
||||
serve,
|
||||
{'document_root': settings.MEDIA_ROOT}))
|
||||
{'document_root': settings.MEDIA_ROOT})
|
||||
]
|
||||
del (_media_url, serve)
|
||||
|
||||
12
errors
Normal file
12
errors
Normal file
@@ -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.
|
||||
@@ -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
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
from spa import signals
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
from django.conf.urls import patterns, url
|
||||
from django.conf.urls import url
|
||||
|
||||
urlpatterns = patterns(
|
||||
'',
|
||||
url(r'^blog/(?P<slug>[\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<slug>[\w\d_.-]+)/?$', entry, name='blog_entry_slug'),
|
||||
url(r'^$', index, name='blog_index')
|
||||
]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
from django.conf.urls import patterns, url
|
||||
from django.conf.urls import url
|
||||
|
||||
urlpatterns = patterns(
|
||||
'',
|
||||
url(r'^mix/(?P<mix_id>\d+)/$', 'spa.embedding.views.mix', name='embed_mix'),
|
||||
url(r'^mix/(?P<slug>[\w\d_.-]+)/$', 'spa.embedding.views.mix', name='embed_mix_slug'),
|
||||
)
|
||||
from spa.embedding.views import mix
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^mix/(?P<mix_id>\d+)/$', mix, name='embed_mix'),
|
||||
url(r'^mix/(?P<slug>[\w\d_.-]+)/$', mix, name='embed_mix_slug'),
|
||||
]
|
||||
@@ -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),
|
||||
),
|
||||
]
|
||||
|
||||
@@ -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)),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
]
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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),
|
||||
),
|
||||
]
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
user = models.ForeignKey(UserProfile, related_name='chat_messages', blank=True, null=True, on_delete=models.CASCADE)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
print("Error creating message notification: %s" % ex)
|
||||
|
||||
14
spa/models/mix.py
Executable file → Normal file
14
spa/models/mix.py
Executable file → Normal file
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
@@ -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()
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
from django.conf.urls import patterns, url
|
||||
from django.conf.urls import url
|
||||
|
||||
urlpatterns = patterns(
|
||||
'',
|
||||
url(r'^(?P<uid>[\w\d_.-]+)/favourites/?$', 'spa.podcast.views.favourites', name='podast_favourites_slug'),
|
||||
url(r'^(?P<uid>[\w\d_.-]+)/following/?$', 'spa.podcast.views.following', name='podast_following_slug'),
|
||||
url(r'^(?P<slug>[\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<uid>[\w\d_.-]+)/favourites/?$', favourites, name='podast_favourites_slug'),
|
||||
url(r'^(?P<uid>[\w\d_.-]+)/following/?$', following, name='podast_following_slug'),
|
||||
url(r'^(?P<slug>[\w\d_.-]+)/?$', user, name='podast_user_slug'),
|
||||
url(r'^/?$', featured, name='podast_featured_slug'),
|
||||
]
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
from django.conf.urls import patterns, url
|
||||
from django.conf.urls import url
|
||||
|
||||
urlpatterns = patterns(
|
||||
'',
|
||||
url(r'^playlist/(?P<slug>[\w\d_.-]+)/?$', 'spa.social.views.playlist', name='social_playlist_slug'),
|
||||
url(r'^mix/(?P<slug>[\w\d_.-]+)/?$', 'spa.social.views.facebook_mix', name='social_mix_slug'),
|
||||
url(r'^user/(?P<user_id>\w+)/?$', 'spa.social.views.user', name='social_user'),
|
||||
url(r'^like/(?P<mix_id>\d+)/?$', 'spa.social.views.post_like', name='social_like'),
|
||||
url(r'^$', 'spa.social.views.index', name='social_index')
|
||||
)
|
||||
from spa.social.views import playlist, facebook_mix, user, post_like, index
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^playlist/(?P<slug>[\w\d_.-]+)/?$', playlist, name='social_playlist_slug'),
|
||||
url(r'^mix/(?P<slug>[\w\d_.-]+)/?$', facebook_mix, name='social_mix_slug'),
|
||||
url(r'^user/(?P<user_id>\w+)/?$', user, name='social_user'),
|
||||
url(r'^like/(?P<mix_id>\d+)/?$', post_like, name='social_like'),
|
||||
url(r'^$', index, name='social_index')
|
||||
]
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user