Skip to content

Commit 59a131a

Browse files
committed
Merge branch 'develop' of github.com:ngenworks/rest_framework_ember
2 parents 9b1bc1e + 792ae65 commit 59a131a

21 files changed

+179
-163
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
build/*
22
dist/*
3-
*.egg
3+
*.egg-info
44
*.pyc
55

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ python:
33
- "2.7"
44
install:
55
- pip install -e .
6-
script: django-admin.py test --settings=example.settings
6+
script: python runtests.py
77

README.rst

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,14 @@ From Source
8282
$ cd rest_framework_ember && pip install -e .
8383

8484

85+
Running Tests
86+
^^^^^^^^^^^^^
87+
88+
::
89+
90+
$ python runtests.py
91+
92+
8593
-----
8694
Usage
8795
-----
@@ -144,10 +152,9 @@ Ember Data <-> Rest Framework Format Conversion
144152
*(camelization/underscore/pluralize)*
145153

146154
This package includes the optional ability to automatically convert json requests
147-
and responses from the Ember Data camelCase to python/rest_framework's preferred
148-
underscore. Additionally resource names can be pluralized if more than one object
149-
is included in a serialized response as Ember Data expects. To hook this up,
150-
include the following in your project settings::
155+
and responses from the Ember Data camelCase to python/rest_framework's preferred
156+
underscore. Additionally resource names can be pluralized when an array of objects
157+
are returned. To hook this up include the following in your project settings::
151158

152159
REST_EMBER_FORMAT_KEYS = True
153160
REST_EMBER_PLURALIZE_KEYS = True

example/api/api.py

Lines changed: 0 additions & 102 deletions
This file was deleted.

example/api/resources/__init__.py

Whitespace-only changes.

example/api/resources/identity.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
from django.contrib.auth import models as auth_models
2+
from rest_framework import viewsets, generics, renderers, parsers
3+
from rest_framework.decorators import list_route, detail_route
4+
from rest_framework.response import Response
5+
from rest_framework_ember import mixins, utils
6+
from ..serializers.identity import IdentitySerializer
7+
from ..serializers.post import PostSerializer
8+
9+
10+
class Identity(mixins.MultipleIDMixin, viewsets.ModelViewSet):
11+
queryset = auth_models.User.objects.all()
12+
serializer_class = IdentitySerializer
13+
14+
@list_route()
15+
def empty_list(self, request):
16+
"""
17+
This is a hack/workaround to return an empty result on a list
18+
endpoint because the delete operation in the test_empty_pluralization
19+
test doesn't prevent the /identities endpoint from still returning
20+
records when called in the same test. Suggestions welcome.
21+
"""
22+
self.queryset = self.queryset.filter(pk=None)
23+
return super(Identity, self).list(request)
24+
25+
# demonstrate sideloading data for use at app boot time
26+
@list_route()
27+
def posts(self, request):
28+
self.resource_name = False
29+
30+
identities = self.queryset
31+
posts = [{'id': 1, 'title': 'Test Blog Post'}]
32+
33+
data = {
34+
u'identities': IdentitySerializer(identities, many=True).data,
35+
u'posts': PostSerializer(posts, many=True).data,
36+
}
37+
return Response(utils.format_keys(data, format_type='camelize'))
38+
39+
@detail_route()
40+
def manual_resource_name(self, request, *args, **kwargs):
41+
self.resource_name = 'data'
42+
return super(Identity, self).retrieve(request, args, kwargs)
43+
44+
45+
class GenericIdentity(generics.GenericAPIView):
46+
"""
47+
An endpoint that uses DRF's default format so we can test that.
48+
49+
GET /identities/generic
50+
"""
51+
serializer_class = IdentitySerializer
52+
allowed_methods = ['GET']
53+
renderer_classes = (renderers.JSONRenderer, )
54+
parser_classes = (parsers.JSONParser, )
55+
56+
57+
def get_queryset(self):
58+
return auth_models.User.objects.all()
59+
60+
def get(self, request, pk=None):
61+
"""
62+
GET request
63+
"""
64+
obj = self.get_object()
65+
return Response(IdentitySerializer(obj).data)
66+

example/api/serializers/__init__.py

Whitespace-only changes.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from django.contrib.auth import models as auth_models
2+
from rest_framework import serializers
3+
4+
5+
class IdentitySerializer(serializers.ModelSerializer):
6+
"""
7+
Identity Serializer
8+
"""
9+
class Meta:
10+
model = auth_models.User
11+
fields = (
12+
'id', 'first_name', 'last_name', 'email', )
13+

example/api/serializers/post.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from rest_framework import serializers
2+
3+
4+
class PostSerializer(serializers.Serializer):
5+
"""
6+
Blog post serializer
7+
"""
8+
title = serializers.CharField(max_length=50)
9+

example/api/urls.py

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,16 @@
22
Example app URLs
33
"""
44
from django.conf.urls import patterns, include, url
5-
from .api import (
6-
User, UserEmber, EmberUserModelViewSet, MultipleIDMixinUserModelViewSet,
7-
UserCarResource)
8-
95
from rest_framework import routers
6+
from .resources.identity import Identity, GenericIdentity
7+
8+
router = routers.DefaultRouter(trailing_slash=False)
9+
10+
router.register(r'identities', Identity)
11+
12+
urlpatterns = router.urls
1013

11-
urlpatterns = patterns('',
12-
url(r'^user-default/(?P<pk>\d+)/$', User.as_view(), name='user-default'),
13-
url(r'^user-ember/(?P<pk>\d+)/$', UserEmber.as_view(), name='user-ember'),
14-
url(r'^user-mixin-viewset/$',
15-
MultipleIDMixinUserModelViewSet.as_view({'get': 'list'}),
16-
name='mixin-user-list'),
17-
url(r'^user-viewset/$', EmberUserModelViewSet.as_view({'get': 'list'}),
18-
name='user-list'),
19-
url(r'^user-viewset/(?P<pk>\d+)/$',
20-
EmberUserModelViewSet.as_view(
21-
{'get': 'retrieve', 'post': 'create', 'put': 'update'}),
22-
name='user-detail'),
23-
url(r'users-cars/$', UserCarResource.as_view(),
24-
name='users-cars'),
14+
urlpatterns += patterns('',
15+
url(r'identities/default/(?P<pk>\d+)', GenericIdentity.as_view(), name='user-default'),
2516
)
2617

0 commit comments

Comments
 (0)