From 5b351567d8ce7a39e85a6ed00b7a62df23fcf903 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20Gro=C3=9F?= Date: Wed, 12 Dec 2012 15:05:33 +0100 Subject: [PATCH] added "use_absolute_urls" option to serializer --- rest_framework/pagination.py | 5 ++--- rest_framework/reverse.py | 2 +- rest_framework/serializers.py | 5 ++++- rest_framework/tests/pagination.py | 4 ++-- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/rest_framework/pagination.py b/rest_framework/pagination.py index 4e4831390..203391515 100644 --- a/rest_framework/pagination.py +++ b/rest_framework/pagination.py @@ -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: diff --git a/rest_framework/reverse.py b/rest_framework/reverse.py index 33a8b5eba..4e2c683be 100644 --- a/rest_framework/reverse.py +++ b/rest_framework/reverse.py @@ -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): diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index caa7c980f..b46a5e388 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -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 {} diff --git a/rest_framework/tests/pagination.py b/rest_framework/tests/pagination.py index 3062007d4..146b36ab9 100644 --- a/rest_framework/tests/pagination.py +++ b/rest_framework/tests/pagination.py @@ -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')