forked from django-json-api/django-rest-framework-json-api
- Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathidentity.py
71 lines (56 loc) · 2.39 KB
/
identity.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
fromdjango.contrib.authimportmodelsasauth_models
fromdjango.utilsimportencoding
fromrest_frameworkimportviewsets, generics, renderers, parsers, serializers
fromrest_framework.decoratorsimportlist_route, detail_route
fromrest_framework.responseimportResponse
fromrest_framework_json_apiimportmixins, utils
from ..serializers.identityimportIdentitySerializer
from ..serializers.postimportPostSerializer
classIdentity(mixins.MultipleIDMixin, viewsets.ModelViewSet):
queryset=auth_models.User.objects.all()
serializer_class=IdentitySerializer
@list_route()
defempty_list(self, request):
"""
This is a hack/workaround to return an empty result on a list
endpoint because the delete operation in the test_empty_pluralization
test doesn't prevent the /identities endpoint from still returning
records when called in the same test. Suggestions welcome.
"""
self.queryset=self.queryset.filter(pk=None)
returnsuper(Identity, self).list(request)
# demonstrate sideloading data for use at app boot time
@list_route()
defposts(self, request):
self.resource_name=False
identities=self.queryset
posts= [{'id': 1, 'title': 'Test Blog Post'}]
data= {
encoding.force_text('identities'): IdentitySerializer(identities, many=True).data,
encoding.force_text('posts'): PostSerializer(posts, many=True).data,
}
returnResponse(utils.format_keys(data, format_type='camelize'))
@detail_route()
defmanual_resource_name(self, request, *args, **kwargs):
self.resource_name='data'
returnsuper(Identity, self).retrieve(request, args, kwargs)
@detail_route()
defvalidation(self, request, *args, **kwargs):
raiseserializers.ValidationError('Oh nohs!')
classGenericIdentity(generics.GenericAPIView):
"""
An endpoint that uses DRF's default format so we can test that.
GET /identities/generic
"""
serializer_class=IdentitySerializer
allowed_methods= ['GET']
renderer_classes= (renderers.JSONRenderer, )
parser_classes= (parsers.JSONParser, )
defget_queryset(self):
returnauth_models.User.objects.all()
defget(self, request, pk=None):
"""
GET request
"""
obj=self.get_object()
returnResponse(IdentitySerializer(obj).data)