aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorTom Christie2012-02-25 18:45:17 +0000
committerTom Christie2012-02-25 18:45:17 +0000
commit1cde31c86d9423e9b7a7409c2ef2ba7c0500e47f (patch)
treeea24bce0f24507aa43f408776ccf7324f204256d /examples
parent5fd4c639d7c64572dd07dc31dcd627bed9469b05 (diff)
downloaddjango-rest-framework-1cde31c86d9423e9b7a7409c2ef2ba7c0500e47f.tar.bz2
Massive merge
Diffstat (limited to 'examples')
-rw-r--r--examples/blogpost/models.py3
-rw-r--r--examples/blogpost/resources.py13
-rw-r--r--examples/mixin/urls.py6
-rw-r--r--examples/modelresourceexample/models.py3
-rw-r--r--examples/modelresourceexample/resources.py7
-rw-r--r--examples/modelresourceexample/urls.py7
-rw-r--r--examples/objectstore/views.py52
-rw-r--r--examples/pygments_api/forms.py3
-rw-r--r--examples/pygments_api/tests.py7
-rw-r--r--examples/pygments_api/views.py23
-rw-r--r--examples/requestexample/views.py3
-rw-r--r--examples/resourceexample/forms.py1
-rw-r--r--examples/resourceexample/views.py8
-rw-r--r--examples/sandbox/views.py20
-rw-r--r--examples/urls.py6
15 files changed, 101 insertions, 61 deletions
diff --git a/examples/blogpost/models.py b/examples/blogpost/models.py
index d77f530d..10732ab4 100644
--- a/examples/blogpost/models.py
+++ b/examples/blogpost/models.py
@@ -2,6 +2,7 @@ from django.db import models
from django.template.defaultfilters import slugify
import uuid
+
def uuid_str():
return str(uuid.uuid1())
@@ -14,6 +15,7 @@ RATING_CHOICES = ((0, 'Awful'),
MAX_POSTS = 10
+
class BlogPost(models.Model):
key = models.CharField(primary_key=True, max_length=64, default=uuid_str, editable=False)
title = models.CharField(max_length=128)
@@ -37,4 +39,3 @@ class Comment(models.Model):
comment = models.TextField()
rating = models.IntegerField(blank=True, null=True, choices=RATING_CHOICES, help_text='How did you rate this post?')
created = models.DateTimeField(auto_now_add=True)
-
diff --git a/examples/blogpost/resources.py b/examples/blogpost/resources.py
index d11c5615..b3659cdf 100644
--- a/examples/blogpost/resources.py
+++ b/examples/blogpost/resources.py
@@ -11,8 +11,15 @@ class BlogPostResource(ModelResource):
fields = ('created', 'title', 'slug', 'content', 'url', 'comments')
ordering = ('-created',)
+ def url(self, instance):
+ return reverse('blog-post',
+ kwargs={'key': instance.key},
+ request=self.request)
+
def comments(self, instance):
- return reverse('comments', request, kwargs={'blogpost': instance.key})
+ return reverse('comments',
+ kwargs={'blogpost': instance.key},
+ request=self.request)
class CommentResource(ModelResource):
@@ -24,4 +31,6 @@ class CommentResource(ModelResource):
ordering = ('-created',)
def blogpost(self, instance):
- return reverse('blog-post', request, kwargs={'key': instance.blogpost.key})
+ return reverse('blog-post',
+ kwargs={'key': instance.blogpost.key},
+ request=self.request)
diff --git a/examples/mixin/urls.py b/examples/mixin/urls.py
index 102f2c12..7a5697fd 100644
--- a/examples/mixin/urls.py
+++ b/examples/mixin/urls.py
@@ -10,11 +10,12 @@ from django.conf.urls.defaults import patterns, url
class ExampleView(ResponseMixin, View):
"""An example view using Django 1.3's class based views.
Uses djangorestframework's RendererMixin to provide support for multiple output formats."""
- renderer_classes = DEFAULT_RENDERERS
+ renderers = DEFAULT_RENDERERS
def get(self, request):
+ url = reverse('mixin-view', request)
response = Response({'description': 'Some example content',
- 'url': reverse('mixin-view', request)}, status=200)
+ 'url': url}, status=200)
self.response = self.prepare_response(response)
return self.response
@@ -22,4 +23,3 @@ class ExampleView(ResponseMixin, View):
urlpatterns = patterns('',
url(r'^$', ExampleView.as_view(), name='mixin-view'),
)
-
diff --git a/examples/modelresourceexample/models.py b/examples/modelresourceexample/models.py
index ff0179c8..11f3eae2 100644
--- a/examples/modelresourceexample/models.py
+++ b/examples/modelresourceexample/models.py
@@ -2,6 +2,7 @@ from django.db import models
MAX_INSTANCES = 10
+
class MyModel(models.Model):
foo = models.BooleanField()
bar = models.IntegerField(help_text='Must be an integer.')
@@ -15,5 +16,3 @@ class MyModel(models.Model):
super(MyModel, self).save(*args, **kwargs)
while MyModel.objects.all().count() > MAX_INSTANCES:
MyModel.objects.all().order_by('-created')[0].delete()
-
-
diff --git a/examples/modelresourceexample/resources.py b/examples/modelresourceexample/resources.py
index 634ea6b3..b74b0572 100644
--- a/examples/modelresourceexample/resources.py
+++ b/examples/modelresourceexample/resources.py
@@ -1,7 +1,14 @@
from djangorestframework.resources import ModelResource
+from djangorestframework.reverse import reverse
from modelresourceexample.models import MyModel
+
class MyModelResource(ModelResource):
model = MyModel
fields = ('foo', 'bar', 'baz', 'url')
ordering = ('created',)
+
+ def url(self, instance):
+ return reverse('model-resource-instance',
+ kwargs={'id': instance.id},
+ request=self.request)
diff --git a/examples/modelresourceexample/urls.py b/examples/modelresourceexample/urls.py
index b6a16542..c5e1f874 100644
--- a/examples/modelresourceexample/urls.py
+++ b/examples/modelresourceexample/urls.py
@@ -2,7 +2,10 @@ from django.conf.urls.defaults import patterns, url
from djangorestframework.views import ListOrCreateModelView, InstanceModelView
from modelresourceexample.resources import MyModelResource
+my_model_list = ListOrCreateModelView.as_view(resource=MyModelResource)
+my_model_instance = InstanceModelView.as_view(resource=MyModelResource)
+
urlpatterns = patterns('',
- url(r'^$', ListOrCreateModelView.as_view(resource=MyModelResource), name='model-resource-root'),
- url(r'^(?P<pk>[0-9]+)/$', InstanceModelView.as_view(resource=MyModelResource)),
+ url(r'^$', my_model_list, name='model-resource-root'),
+ url(r'^(?P<id>[0-9]+)/$', my_model_instance, name='model-resource-instance'),
)
diff --git a/examples/objectstore/views.py b/examples/objectstore/views.py
index b48bfac2..a8889cd8 100644
--- a/examples/objectstore/views.py
+++ b/examples/objectstore/views.py
@@ -28,6 +28,20 @@ def remove_oldest_files(dir, max_files):
[os.remove(path) for path in ctime_sorted_paths[max_files:]]
+def get_filename(key):
+ """
+ Given a stored object's key returns the file's path.
+ """
+ return os.path.join(OBJECT_STORE_DIR, key)
+
+
+def get_file_url(key, request):
+ """
+ Given a stored object's key returns the URL for the object.
+ """
+ return reverse('stored-object', kwargs={'key': key}, request=request)
+
+
class ObjectStoreRoot(View):
"""
Root of the Object Store API.
@@ -38,20 +52,25 @@ class ObjectStoreRoot(View):
"""
Return a list of all the stored object URLs. (Ordered by creation time, newest first)
"""
- filepaths = [os.path.join(OBJECT_STORE_DIR, file) for file in os.listdir(OBJECT_STORE_DIR) if not file.startswith('.')]
+ filepaths = [os.path.join(OBJECT_STORE_DIR, file)
+ for file in os.listdir(OBJECT_STORE_DIR)
+ if not file.startswith('.')]
ctime_sorted_basenames = [item[0] for item in sorted([(os.path.basename(path), os.path.getctime(path)) for path in filepaths],
key=operator.itemgetter(1), reverse=True)]
- return Response([reverse('stored-object', request, kwargs={'key':key}) for key in ctime_sorted_basenames])
+ content = [get_file_url(key, request)
+ for key in ctime_sorted_basenames]
+ return Response(content)
def post(self, request):
"""
Create a new stored object, with a unique key.
"""
key = str(uuid.uuid1())
- pathname = os.path.join(OBJECT_STORE_DIR, key)
- pickle.dump(self.CONTENT, open(pathname, 'wb'))
+ filename = get_filename(key)
+ pickle.dump(self.CONTENT, open(filename, 'wb'))
+
remove_oldest_files(OBJECT_STORE_DIR, MAX_FILES)
- url = reverse('stored-object', request, kwargs={'key':key})
+ url = get_file_url(key, request)
return Response(self.CONTENT, status.HTTP_201_CREATED, {'Location': url})
@@ -60,30 +79,31 @@ class StoredObject(View):
Represents a stored object.
The object may be any picklable content.
"""
-
def get(self, request, key):
"""
- Return a stored object, by unpickling the contents of a locally stored file.
+ Return a stored object, by unpickling the contents of a locally
+ stored file.
"""
- pathname = os.path.join(OBJECT_STORE_DIR, key)
- if not os.path.exists(pathname):
+ filename = get_filename(key)
+ if not os.path.exists(filename):
return Response(status=status.HTTP_404_NOT_FOUND)
- return Response(pickle.load(open(pathname, 'rb')))
+ return Response(pickle.load(open(filename, 'rb')))
def put(self, request, key):
"""
- Update/create a stored object, by pickling the request content to a locally stored file.
+ Update/create a stored object, by pickling the request content to a
+ locally stored file.
"""
- pathname = os.path.join(OBJECT_STORE_DIR, key)
- pickle.dump(self.CONTENT, open(pathname, 'wb'))
+ filename = get_filename(key)
+ pickle.dump(self.CONTENT, open(filename, 'wb'))
return Response(self.CONTENT)
def delete(self, request, key):
"""
Delete a stored object, by removing it's pickled file.
"""
- pathname = os.path.join(OBJECT_STORE_DIR, key)
- if not os.path.exists(pathname):
+ filename = get_filename(key)
+ if not os.path.exists(filename):
return Response(status=status.HTTP_404_NOT_FOUND)
- os.remove(pathname)
+ os.remove(filename)
return Response()
diff --git a/examples/pygments_api/forms.py b/examples/pygments_api/forms.py
index 30a59a84..cc147740 100644
--- a/examples/pygments_api/forms.py
+++ b/examples/pygments_api/forms.py
@@ -6,6 +6,7 @@ from pygments.styles import get_all_styles
LEXER_CHOICES = sorted([(item[1][0], item[0]) for item in get_all_lexers()])
STYLE_CHOICES = sorted((item, item) for item in list(get_all_styles()))
+
class PygmentsForm(forms.Form):
"""A simple form with some of the most important pygments settings.
The code to be highlighted can be specified either in a text field, or by URL.
@@ -24,5 +25,3 @@ class PygmentsForm(forms.Form):
initial='python')
style = forms.ChoiceField(choices=STYLE_CHOICES,
initial='friendly')
-
-
diff --git a/examples/pygments_api/tests.py b/examples/pygments_api/tests.py
index 24726647..b728c3c2 100644
--- a/examples/pygments_api/tests.py
+++ b/examples/pygments_api/tests.py
@@ -14,13 +14,13 @@ class TestPygmentsExample(TestCase):
self.factory = RequestFactory()
self.temp_dir = tempfile.mkdtemp()
views.HIGHLIGHTED_CODE_DIR = self.temp_dir
-
+
def tearDown(self):
try:
shutil.rmtree(self.temp_dir)
except Exception:
pass
-
+
def test_get_to_root(self):
'''Just do a get on the base url'''
request = self.factory.get('/pygments')
@@ -44,6 +44,3 @@ class TestPygmentsExample(TestCase):
response = view(request)
response_locations = json.loads(response.content)
self.assertEquals(locations, response_locations)
-
-
-
diff --git a/examples/pygments_api/views.py b/examples/pygments_api/views.py
index 75d36fea..a3812ef4 100644
--- a/examples/pygments_api/views.py
+++ b/examples/pygments_api/views.py
@@ -1,7 +1,6 @@
from __future__ import with_statement # for python 2.5
from django.conf import settings
-from djangorestframework.resources import FormResource
from djangorestframework.response import Response
from djangorestframework.renderers import BaseRenderer
from djangorestframework.reverse import reverse
@@ -30,9 +29,13 @@ def list_dir_sorted_by_ctime(dir):
"""
Return a list of files sorted by creation time
"""
- filepaths = [os.path.join(dir, file) for file in os.listdir(dir) if not file.startswith('.')]
- return [item[0] for item in sorted( [(path, os.path.getctime(path)) for path in filepaths],
- key=operator.itemgetter(1), reverse=False) ]
+ filepaths = [os.path.join(dir, file)
+ for file in os.listdir(dir)
+ if not file.startswith('.')]
+ ctimes = [(path, os.path.getctime(path)) for path in filepaths]
+ ctimes = sorted(ctimes, key=operator.itemgetter(1), reverse=False)
+ return [filepath for filepath, ctime in ctimes]
+
def remove_oldest_files(dir, max_files):
"""
@@ -60,8 +63,11 @@ class PygmentsRoot(View):
"""
Return a list of all currently existing snippets.
"""
- unique_ids = [os.path.split(f)[1] for f in list_dir_sorted_by_ctime(HIGHLIGHTED_CODE_DIR)]
- return Response([reverse('pygments-instance', request, args=[unique_id]) for unique_id in unique_ids])
+ unique_ids = [os.path.split(f)[1]
+ for f in list_dir_sorted_by_ctime(HIGHLIGHTED_CODE_DIR)]
+ urls = [reverse('pygments-instance', args=[unique_id], request=request)
+ for unique_id in unique_ids]
+ return Response(urls)
def post(self, request):
"""
@@ -81,7 +87,7 @@ class PygmentsRoot(View):
remove_oldest_files(HIGHLIGHTED_CODE_DIR, MAX_FILES)
- location = reverse('pygments-instance', request, args=[unique_id])
+ location = reverse('pygments-instance', args=[unique_id], request=request)
return Response(status=status.HTTP_201_CREATED, headers={'Location': location})
@@ -90,7 +96,7 @@ class PygmentsInstance(View):
Simply return the stored highlighted HTML file with the correct mime type.
This Resource only renders HTML and uses a standard HTML renderer rather than the renderers.DocumentingHTMLRenderer class.
"""
- renderer_classes = (HTMLRenderer,)
+ renderers = (HTMLRenderer, )
def get(self, request, unique_id):
"""
@@ -110,4 +116,3 @@ class PygmentsInstance(View):
return Response(status=status.HTTP_404_NOT_FOUND)
os.remove(pathname)
return Response()
-
diff --git a/examples/requestexample/views.py b/examples/requestexample/views.py
index b5d2c1e7..2036d6cd 100644
--- a/examples/requestexample/views.py
+++ b/examples/requestexample/views.py
@@ -22,7 +22,7 @@ class MyBaseViewUsingEnhancedRequest(RequestMixin, View):
Base view enabling the usage of enhanced requests with user defined views.
"""
- parser_classes = parsers.DEFAULT_PARSERS
+ parsers = parsers.DEFAULT_PARSERS
def dispatch(self, request, *args, **kwargs):
self.request = request = self.create_request(request)
@@ -41,4 +41,3 @@ class EchoRequestContentView(MyBaseViewUsingEnhancedRequest):
def put(self, request, *args, **kwargs):
return HttpResponse(("Found %s in request.DATA, content : %s" %
(type(request.DATA), request.DATA)))
-
diff --git a/examples/resourceexample/forms.py b/examples/resourceexample/forms.py
index aa6e7685..d21d601a 100644
--- a/examples/resourceexample/forms.py
+++ b/examples/resourceexample/forms.py
@@ -1,5 +1,6 @@
from django import forms
+
class MyForm(forms.Form):
foo = forms.BooleanField(required=False)
bar = forms.IntegerField(help_text='Must be an integer.')
diff --git a/examples/resourceexample/views.py b/examples/resourceexample/views.py
index 8e7be302..41a3111c 100644
--- a/examples/resourceexample/views.py
+++ b/examples/resourceexample/views.py
@@ -16,9 +16,11 @@ class ExampleView(View):
Handle GET requests, returning a list of URLs pointing to
three other views.
"""
- urls = [reverse('another-example', request, kwargs={'num': num})
- for num in range(3)]
- return Response({"Some other resources": urls})
+ resource_urls = [reverse('another-example',
+ kwargs={'num': num},
+ request=request)
+ for num in range(3)]
+ return Response({"Some other resources": resource_urls})
class AnotherExampleView(View):
diff --git a/examples/sandbox/views.py b/examples/sandbox/views.py
index a9b82447..f4de2947 100644
--- a/examples/sandbox/views.py
+++ b/examples/sandbox/views.py
@@ -19,7 +19,7 @@ class Sandbox(View):
For example, to get the default representation using curl:
bash: curl -X GET http://rest.ep.io/
-
+
Or, to get the plaintext documentation represention:
bash: curl -X GET http://rest.ep.io/ -H 'Accept: text/plain'
@@ -49,19 +49,19 @@ class Sandbox(View):
def get(self, request):
return Response([
{'name': 'Simple Resource example',
- 'url': reverse('example-resource', request)},
+ 'url': reverse('example-resource', request=request)},
{'name': 'Simple ModelResource example',
- 'url': reverse('model-resource-root', request)},
+ 'url': reverse('model-resource-root', request=request)},
{'name': 'Simple Mixin-only example',
- 'url': reverse('mixin-view', request)},
- {'name': 'Object store API'
- 'url': reverse('object-store-root', request)},
+ 'url': reverse('mixin-view', request=request)},
+ {'name': 'Object store API',
+ 'url': reverse('object-store-root', request=request)},
{'name': 'Code highlighting API',
- 'url': reverse('pygments-root', request)},
+ 'url': reverse('pygments-root', request=request)},
{'name': 'Blog posts API',
- 'url': reverse('blog-posts-root', request)},
+ 'url': reverse('blog-posts-root', request=request)},
{'name': 'Permissions example',
- 'url': reverse('permissions-example', request)},
+ 'url': reverse('permissions-example', request=request)},
{'name': 'Simple request mixin example',
- 'url': reverse('request-example', request)}
+ 'url': reverse('request-example', request=request)}
])
diff --git a/examples/urls.py b/examples/urls.py
index f246828a..fda7942f 100644
--- a/examples/urls.py
+++ b/examples/urls.py
@@ -1,4 +1,4 @@
-from django.conf.urls.defaults import patterns, include
+from django.conf.urls.defaults import patterns, include, url
from sandbox.views import Sandbox
try:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
@@ -15,9 +15,7 @@ urlpatterns = patterns('',
(r'^pygments/', include('pygments_api.urls')),
(r'^blog-post/', include('blogpost.urls')),
(r'^permissions-example/', include('permissionsexample.urls')),
- (r'^request-example/', include('requestexample.urls')),
-
- (r'^', include('djangorestframework.urls')),
+ url(r'^restframework/', include('djangorestframework.urls', namespace='djangorestframework')),
)
urlpatterns += staticfiles_urlpatterns()