diff --git a/api/fields.py b/api/fields.py new file mode 100644 index 0000000..08eb98d --- /dev/null +++ b/api/fields.py @@ -0,0 +1,12 @@ +from rest_framework.fields import Field + + +class DisplayNameField(Field): + def to_internal_value(self, data): + return data + + def to_representation(self, value): + if not value: + return self.parent.data['first_name'] + ' ' + self.parent.data['last_name'] + return value + diff --git a/api/activity_helpers.py b/api/helpers.py similarity index 68% rename from api/activity_helpers.py rename to api/helpers.py index e7af013..ccd7c70 100644 --- a/api/activity_helpers.py +++ b/api/helpers.py @@ -1,9 +1,13 @@ import datetime from rest_framework.response import Response -from rest_framework.status import HTTP_400_BAD_REQUEST, HTTP_201_CREATED +from rest_framework.status import HTTP_400_BAD_REQUEST, HTTP_201_CREATED, HTTP_204_NO_CONTENT, HTTP_200_OK from rest_framework.views import APIView from dss import settings -from spa.models import Mix +from spa.models import Mix, UserProfile + + +class Helper(APIView): + pass class ActivityHelper(APIView): @@ -25,3 +29,12 @@ class ActivityPlayHelper(ActivityHelper): pass return Response("Invalid URI or object does not exist", HTTP_400_BAD_REQUEST) + + +class UserSlugCheckHelper(Helper): + def get(self, request): + try: + UserProfile.objects.get(slug=self.request.QUERY_PARAMS.get('slug')) + return Response(status=HTTP_204_NO_CONTENT) + except UserProfile.DoesNotExist: + return Response(status=HTTP_200_OK) diff --git a/api/serializers.py b/api/serializers.py index 5a59b4b..3d6f278 100755 --- a/api/serializers.py +++ b/api/serializers.py @@ -1,5 +1,6 @@ from django.db.models import Count from rest_framework import serializers +from api.fields import DisplayNameField from core.utils.html import strip_tags from dss import settings @@ -100,6 +101,7 @@ class MixSerializer(serializers.ModelSerializer): 'plays', 'downloads', 'is_liked', + ] slug = serializers.ReadOnlyField(required=False) @@ -235,16 +237,12 @@ class UserProfileSerializer(serializers.ModelSerializer): favourites = serializers.SlugRelatedField(slug_field='slug', many=True, read_only=True) following = InlineUserProfileSerializer(many=True, read_only=True) followers = InlineUserProfileSerializer(many=True, read_only=True) - first_name = serializers.ReadOnlyField(source='get_first_name') - last_name = serializers.ReadOnlyField(source='get_last_name') - display_name = serializers.ReadOnlyField(source='get_nice_name') mix_count = serializers.SerializerMethodField() isme = serializers.SerializerMethodField() email = serializers.SerializerMethodField() date_joined = serializers.SerializerMethodField() last_login = serializers.SerializerMethodField() title = serializers.SerializerMethodField() - description = serializers.SerializerMethodField() profile_image_small = serializers.SerializerMethodField() profile_image_medium = serializers.SerializerMethodField() profile_image_header = serializers.SerializerMethodField() @@ -255,6 +253,7 @@ class UserProfileSerializer(serializers.ModelSerializer): model = UserProfile lookup_field = 'slug' fields = ( + 'id', 'roles', 'date_joined', 'last_login', @@ -275,8 +274,21 @@ class UserProfileSerializer(serializers.ModelSerializer): 'following', 'followers', 'top_tags', + 'activity_sharing_facebook', + 'activity_sharing_twitter', + 'email_notifications', ) + def ___update(self, instance, validated_data): + + if 'display_name' in self.initial_data and self.initial_data['display_name'] != instance.display_name: + first, sep, second = self.initial_data['display_name'].partition(" ") + instance.user.first_name = first + instance.user.last_name = second + instance.save() + + return super(UserProfileSerializer, self).update(instance, validated_data) + def get_title(self, obj): try: if obj.description: @@ -286,11 +298,12 @@ class UserProfileSerializer(serializers.ModelSerializer): except: return settings.DEFAULT_USER_TITLE - def get_description(self, obj): - return obj.description if obj.description else settings.DEFAULT_USER_TITLE - def get_roles(self, obj): - return obj.get_roles() + try: + return obj.get_roles() + except Exception, ex: + print "Error getting roles: " + ex.message + return [] def get_isme(self, obj): return self.context['request'].user.pk == obj.user_id diff --git a/api/urls.py b/api/urls.py index 687bd3e..d2738eb 100755 --- a/api/urls.py +++ b/api/urls.py @@ -1,7 +1,7 @@ from django.conf.urls import patterns, url, include from rest_framework.routers import DefaultRouter -from api import views, auth, activity_helpers +from api import views, auth, helpers router = DefaultRouter() # trailing_slash=True) @@ -29,10 +29,11 @@ urlpatterns = patterns( url(r'^logout/', auth.ObtainLogout.as_view()), # url(r'^_tr/', RefreshToken.as_view()), - url(r'^__user/', auth.ObtainUser.as_view()), + url(r'^__u/checkslug', helpers.UserSlugCheckHelper.as_view()), + url(r'^__u/', auth.ObtainUser.as_view()), - url(r'^_act/play', activity_helpers.ActivityPlayHelper.as_view()), + url(r'^_act/play', helpers.ActivityPlayHelper.as_view()), url('', include('social.apps.django_app.urls', namespace='social')), ) diff --git a/dss/settings.py b/dss/settings.py index 60b5cac..3a933af 100755 --- a/dss/settings.py +++ b/dss/settings.py @@ -92,7 +92,7 @@ MIDDLEWARE_CLASSES = ( # 'htmlmin.middleware.MarkRequestMiddleware', 'django_user_agents.middleware.UserAgentMiddleware', # 'spa.middleware.uploadify.SWFUploadMiddleware', - 'spa.middleware.sqlprinter.SqlPrintingMiddleware' if DEBUG else None, + # 'spa.middleware.sqlprinter.SqlPrintingMiddleware' if DEBUG else None, # 'debug_toolbar.middleware.DebugToolbarMiddleware', )