added "use_absolute_urls" option to serializer

This commit is contained in:
Stephan Groß 2012-12-12 15:05:33 +01:00
parent 1fb988b533
commit 5b351567d8
4 changed files with 9 additions and 7 deletions

View File

@ -1,5 +1,4 @@
from rest_framework import serializers
from rest_framework.settings import api_settings
from rest_framework.templatetags.rest_framework import replace_query_param
# TODO: Support URLconf kwarg-style paging
@ -16,7 +15,7 @@ class NextPageField(serializers.Field):
return None
page = value.next_page_number()
request = self.context.get('request')
if api_settings.USE_ABSOLUTE_URLS:
if self.parent.use_absolute_urls:
assert request, "request is required for building absolute url"
url = request.build_absolute_uri()
else:
@ -35,7 +34,7 @@ class PreviousPageField(serializers.Field):
return None
page = value.previous_page_number()
request = self.context.get('request')
if api_settings.USE_ABSOLUTE_URLS:
if self.parent.use_absolute_urls:
assert request, "request is required for building absolute url"
url = request.build_absolute_uri()
else:

View File

@ -1,9 +1,9 @@
"""
Provide reverse functions that return fully qualified URLs
"""
from rest_framework.settings import api_settings
from django.core.urlresolvers import reverse as django_reverse
from django.utils.functional import lazy
from rest_framework.settings import api_settings
def reverse(viewname, args=None, kwargs=None, request=None, format=None, **extra):

View File

@ -16,6 +16,7 @@ from rest_framework.compat import get_concrete_model
from rest_framework.fields import *
from rest_framework.settings import api_settings
class DictWithMetadata(dict):
@ -91,6 +92,7 @@ class SerializerOptions(object):
self.depth = getattr(meta, 'depth', 0)
self.fields = getattr(meta, 'fields', ())
self.exclude = getattr(meta, 'exclude', ())
self.use_absolute_urls = getattr(meta, 'use_absolute_urls', api_settings.USE_ABSOLUTE_URLS)
class BaseSerializer(Field):
@ -101,12 +103,13 @@ class BaseSerializer(Field):
_dict_class = SortedDictWithMetadata # Set to unsorted dict for backwards compatibility with unsorted implementations.
def __init__(self, instance=None, data=None, files=None,
context=None, partial=False, **kwargs):
context=None, partial=False, use_absolute_urls=None, **kwargs):
super(BaseSerializer, self).__init__(**kwargs)
self.opts = self._options_class(self.Meta)
self.parent = None
self.root = None
self.partial = partial
self.use_absolute_urls = use_absolute_urls if use_absolute_urls is not None else self.opts.use_absolute_urls
self.context = context or {}

View File

@ -160,13 +160,13 @@ class UnitTestPagination(TestCase):
self.last_page = paginator.page(3)
def test_native_pagination(self):
serializer = pagination.PaginationSerializer(self.first_page)
serializer = pagination.PaginationSerializer(self.first_page, use_absolute_urls=False)
self.assertEquals(serializer.data['count'], 26)
self.assertEquals(serializer.data['next'], '?page=2')
self.assertEquals(serializer.data['previous'], None)
self.assertEquals(serializer.data['results'], self.objects[:10])
serializer = pagination.PaginationSerializer(self.last_page)
serializer = pagination.PaginationSerializer(self.last_page, use_absolute_urls=False)
self.assertEquals(serializer.data['count'], 26)
self.assertEquals(serializer.data['next'], None)
self.assertEquals(serializer.data['previous'], '?page=2')