aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Christie2015-01-16 20:30:46 +0000
committerTom Christie2015-01-16 20:30:46 +0000
commit86d2774cf30351fd4174e97501532056ed0d8f95 (patch)
treef36aecf23dfe09aceba53c218350e9c2032263fe
parent8b0f25aa0a91cb7b56f9ce4dde4330fe5daaad9b (diff)
downloaddjango-rest-framework-86d2774cf30351fd4174e97501532056ed0d8f95.tar.bz2
Fix compat issues
-rw-r--r--rest_framework/pagination.py8
-rw-r--r--rest_framework/templatetags/rest_framework.py34
-rw-r--r--rest_framework/utils/urls.py25
-rw-r--r--tests/test_pagination.py4
4 files changed, 34 insertions, 37 deletions
diff --git a/rest_framework/pagination.py b/rest_framework/pagination.py
index c5a364f0..1b7524c6 100644
--- a/rest_framework/pagination.py
+++ b/rest_framework/pagination.py
@@ -12,7 +12,7 @@ from rest_framework.compat import OrderedDict
from rest_framework.exceptions import NotFound
from rest_framework.response import Response
from rest_framework.settings import api_settings
-from rest_framework.templatetags.rest_framework import (
+from rest_framework.utils.urls import (
replace_query_param, remove_query_param
)
@@ -34,8 +34,8 @@ def _divide_with_ceil(a, b):
Returns 'a' divded by 'b', with any remainder rounded up.
"""
if a % b:
- return (a / b) + 1
- return a / b
+ return (a // b) + 1
+ return a // b
def _get_count(queryset):
@@ -70,7 +70,7 @@ def _get_displayed_page_numbers(current, final):
assert final >= current
if final <= 5:
- return range(1, final + 1)
+ return list(range(1, final + 1))
# We always include the first two pages, last two pages, and
# two pages either side of the current page.
diff --git a/rest_framework/templatetags/rest_framework.py b/rest_framework/templatetags/rest_framework.py
index bf159d8b..a969836f 100644
--- a/rest_framework/templatetags/rest_framework.py
+++ b/rest_framework/templatetags/rest_framework.py
@@ -1,41 +1,19 @@
from __future__ import unicode_literals, absolute_import
from django import template
from django.core.urlresolvers import reverse, NoReverseMatch
-from django.http import QueryDict
from django.utils import six
-from django.utils.six.moves.urllib import parse as urlparse
from django.utils.encoding import iri_to_uri, force_text
from django.utils.html import escape
from django.utils.safestring import SafeData, mark_safe
from django.utils.html import smart_urlquote
from rest_framework.renderers import HTMLFormRenderer
+from rest_framework.utils.urls import replace_query_param
import re
register = template.Library()
-
-def replace_query_param(url, key, val):
- """
- Given a URL and a key/val pair, set or replace an item in the query
- parameters of the URL, and return the new URL.
- """
- (scheme, netloc, path, query, fragment) = urlparse.urlsplit(url)
- query_dict = QueryDict(query).copy()
- query_dict[key] = val
- query = query_dict.urlencode()
- return urlparse.urlunsplit((scheme, netloc, path, query, fragment))
-
-
-def remove_query_param(url, key):
- """
- Given a URL and a key/val pair, set or replace an item in the query
- parameters of the URL, and return the new URL.
- """
- (scheme, netloc, path, query, fragment) = urlparse.urlsplit(url)
- query_dict = QueryDict(query).copy()
- query_dict.pop(key, None)
- query = query_dict.urlencode()
- return urlparse.urlunsplit((scheme, netloc, path, query, fragment))
+# Regex for adding classes to html snippets
+class_re = re.compile(r'(?<=class=["\'])(.*)(?=["\'])')
@register.simple_tag
@@ -43,12 +21,6 @@ def get_pagination_html(pager):
return pager.to_html()
-# Regex for adding classes to html snippets
-class_re = re.compile(r'(?<=class=["\'])(.*)(?=["\'])')
-
-
-# And the template tags themselves...
-
@register.simple_tag
def render_field(field, style=None):
style = style or {}
diff --git a/rest_framework/utils/urls.py b/rest_framework/utils/urls.py
new file mode 100644
index 00000000..880ef9ed
--- /dev/null
+++ b/rest_framework/utils/urls.py
@@ -0,0 +1,25 @@
+from django.utils.six.moves.urllib import parse as urlparse
+
+
+def replace_query_param(url, key, val):
+ """
+ Given a URL and a key/val pair, set or replace an item in the query
+ parameters of the URL, and return the new URL.
+ """
+ (scheme, netloc, path, query, fragment) = urlparse.urlsplit(url)
+ query_dict = urlparse.parse_qs(query)
+ query_dict[key] = [val]
+ query = urlparse.urlencode(sorted(list(query_dict.items())), doseq=True)
+ return urlparse.urlunsplit((scheme, netloc, path, query, fragment))
+
+
+def remove_query_param(url, key):
+ """
+ Given a URL and a key/val pair, remove an item in the query
+ parameters of the URL, and return the new URL.
+ """
+ (scheme, netloc, path, query, fragment) = urlparse.urlsplit(url)
+ query_dict = urlparse.parse_qs(query)
+ query_dict.pop(key, None)
+ query = urlparse.urlencode(sorted(list(query_dict.items())), doseq=True)
+ return urlparse.urlunsplit((scheme, netloc, path, query, fragment))
diff --git a/tests/test_pagination.py b/tests/test_pagination.py
index b3436b35..7cc92347 100644
--- a/tests/test_pagination.py
+++ b/tests/test_pagination.py
@@ -117,7 +117,7 @@ class TestPaginationDisabledIntegration:
request = factory.get('/', {'page': 2})
response = self.view(request)
assert response.status_code == status.HTTP_200_OK
- assert response.data == range(1, 101)
+ assert response.data == list(range(1, 101))
class TestDeprecatedStylePagination:
@@ -268,7 +268,7 @@ class TestLimitOffset:
self.queryset = range(1, 101)
def paginate_queryset(self, request):
- return self.pagination.paginate_queryset(self.queryset, request)
+ return list(self.pagination.paginate_queryset(self.queryset, request))
def get_paginated_content(self, queryset):
response = self.pagination.get_paginated_response(queryset)