pulseapi/profiles/views/profile_entries.py (29 lines of code) (raw):
from django.conf import settings
from rest_framework.generics import get_object_or_404
from rest_framework.response import Response
from rest_framework.views import APIView
from pulseapi.entries.serializers import EntryWithCreatorsBaseSerializer, EntryWithV1CreatorsBaseSerializer
from pulseapi.profiles.models import UserProfile
from pulseapi.profiles.serializers import UserProfileEntriesSerializer
# We don't inherit from a generic API view class since we're customizing
# the get functionality more than the generic would allow.
class UserProfileEntriesAPIView(APIView):
def get(self, request, pk, **kwargs):
"""
Return a list of entries associated with this profile
that can be filtered by entries that this profile - was
a creator on, was a publisher of, or favorited.
"""
profile = get_object_or_404(
UserProfile.objects.select_related('related_user'),
pk=pk,
)
query = request.query_params
EntrySerializerClass = EntryWithCreatorsBaseSerializer
if request and request.version == settings.API_VERSIONS['version_1']:
EntrySerializerClass = EntryWithV1CreatorsBaseSerializer
return Response(
UserProfileEntriesSerializer(instance=profile, context={
'user': request.user,
'created': 'created' in query,
'published': 'published' in query,
'favorited': 'favorited' in query,
'created_ordering': query.get('created_ordering'),
'published_ordering': query.get('published_ordering'),
'favorited_ordering': query.get('favorited_ordering'),
'EntrySerializerClass': EntrySerializerClass,
}).data
)