Skip to content

Commit

Permalink
Make UserIdentities responses adhere to JSONAPI.
Browse files Browse the repository at this point in the history
  • Loading branch information
pattisdr committed Jul 16, 2018
1 parent aad7e7d commit d9155f5
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 13 deletions.
28 changes: 19 additions & 9 deletions api/users/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,15 +254,25 @@ class Meta:
type_ = 'institutions'


class UserIdentitiesSerializer(BaseAPISerializer):
data = ser.DictField()
links = LinksField({'self': 'get_self_url'})
class UserIdentitiesSerializer(JSONAPISerializer):
id = IDField(source='_id', read_only=True)
type = TypeField()
external_id = ser.CharField(read_only=True)
status = ser.CharField(read_only=True)

def get_self_url(self, obj):
return absolute_reverse('users:user-identities-list', kwargs={
'version': self.context['request'].parser_context['kwargs']['version'],
'user_id': obj['self']._id
})
links = LinksField({
'self': 'get_absolute_url',
})

def get_absolute_url(self, obj):
return absolute_reverse(
'users:user-identities-detail',
kwargs={
'user_id': self.context['request'].parser_context['kwargs']['user_id'],
'version': self.context['request'].parser_context['kwargs']['version'],
'identity_id': obj['_id']
}
)

class Meta:
type_ = 'external_identities'
type_ = 'external-identities'
15 changes: 11 additions & 4 deletions api/users/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ def perform_destroy(self, instance):
user.save()


class UserIdentitiesList(JSONAPIBaseView, generics.RetrieveAPIView, UserMixin):
class UserIdentitiesList(JSONAPIBaseView, generics.ListAPIView, UserMixin):
"""
REMEMBER TO WRITE DEV DOCS!!!
The documentation for this endpoint can be found [here](https://developer.osf.io/#operation/...).
Expand All @@ -458,10 +458,14 @@ class UserIdentitiesList(JSONAPIBaseView, generics.RetrieveAPIView, UserMixin):
view_category = 'users'
view_name = 'user-identities-list'

def get_object(self):
# overrides ListAPIView
def get_queryset(self):
user = self.get_user()
identities = []
for key, value in user.external_identity.iteritems():
identities.append({'_id': key, 'external_id': value.keys()[0], 'status': value.values()[0]})

return {'data': user.external_identity, 'self': user, 'type': 'external-identities'}
return identities


class UserIdentitiesDetail(JSONAPIBaseView, generics.RetrieveDestroyAPIView, UserMixin):
Expand All @@ -487,10 +491,13 @@ def get_object(self):
user = self.get_user()
identity_id = self.kwargs['identity_id']
try:
return {'data': {identity_id: user.external_identity[identity_id]}, 'self': user}
identity = user.external_identity[identity_id]
except KeyError:
raise NotFound('Requested external identity could not be found.')

return {'_id': identity_id, 'external_id': identity.keys()[0], 'status': identity.values()[0]}


def perform_destroy(self, instance):
user = self.get_user()
identity_id = self.kwargs['identity_id']
Expand Down

0 comments on commit d9155f5

Please sign in to comment.