aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Christie2013-12-09 09:24:10 +0000
committerTom Christie2013-12-09 09:24:10 +0000
commitddd17c69e7abdd70448fa0f2f2a807d600b3391d (patch)
treebc97457158092f8e7dcc970e5308f8e8d9b63361
parenta6ca943faa42af30075e260a01d7e672f706d3fd (diff)
downloaddjango-rest-framework-ddd17c69e7abdd70448fa0f2f2a807d600b3391d.tar.bz2
Fix compat issues for #1231
-rw-r--r--rest_framework/compat.py7
-rw-r--r--rest_framework/tests/test_renderers.py31
-rw-r--r--rest_framework/utils/encoders.py3
3 files changed, 15 insertions, 26 deletions
diff --git a/rest_framework/compat.py b/rest_framework/compat.py
index 581e29fc..05bd99e0 100644
--- a/rest_framework/compat.py
+++ b/rest_framework/compat.py
@@ -69,6 +69,13 @@ try:
except ImportError:
import urlparse
+# UserDict moves in Python 3
+try:
+ from UserDict import UserDict
+ from UserDict import DictMixin
+except ImportError:
+ from collections import UserDict
+ from collections import MutableMapping as DictMixin
# Try to import PIL in either of the two ways it can end up installed.
try:
diff --git a/rest_framework/tests/test_renderers.py b/rest_framework/tests/test_renderers.py
index d720bc51..2ae8ae18 100644
--- a/rest_framework/tests/test_renderers.py
+++ b/rest_framework/tests/test_renderers.py
@@ -15,12 +15,11 @@ from rest_framework.renderers import BaseRenderer, JSONRenderer, YAMLRenderer, \
from rest_framework.parsers import YAMLParser, XMLParser
from rest_framework.settings import api_settings
from rest_framework.test import APIRequestFactory
+from collections import MutableMapping
import datetime
+import json
import pickle
import re
-import UserDict
-import collections
-import json
DUMMYSTATUS = status.HTTP_200_OK
@@ -277,26 +276,8 @@ class JSONRendererTests(TestCase):
ret = JSONRenderer().render(_('test'))
self.assertEqual(ret, b'"test"')
- def test_render_userdict_obj(self):
- class DictLike(UserDict.DictMixin):
- def __init__(self):
- self._dict = dict()
- def __getitem__(self, key):
- return self._dict.__getitem__(key)
- def __setitem__(self, key, value):
- return self._dict.__setitem__(key, value)
- def __delitem__(self, key):
- return self._dict.__delitem__(key)
- def keys(self):
- return self._dict.keys()
- x = DictLike()
- x['a'] = 1
- x['b'] = "string value"
- ret = JSONRenderer().render(x)
- self.assertEquals(json.loads(ret), {'a': 1, 'b': 'string value'})
-
def test_render_dict_abc_obj(self):
- class Dict(collections.MutableMapping):
+ class Dict(MutableMapping):
def __init__(self):
self._dict = dict()
def __getitem__(self, key):
@@ -309,13 +290,15 @@ class JSONRendererTests(TestCase):
return self._dict.__iter__()
def __len__(self):
return self._dict.__len__()
+ def keys(self):
+ return self._dict.keys()
x = Dict()
x['key'] = 'string value'
x[2] = 3
ret = JSONRenderer().render(x)
- self.assertEquals(json.loads(ret), {'key': 'string value', '2': 3})
-
+ data = json.loads(ret.decode('utf-8'))
+ self.assertEquals(data, {'key': 'string value', '2': 3})
def test_render_obj_with_getitem(self):
class DictLike(object):
diff --git a/rest_framework/utils/encoders.py b/rest_framework/utils/encoders.py
index 22b1ab3d..3ac920c6 100644
--- a/rest_framework/utils/encoders.py
+++ b/rest_framework/utils/encoders.py
@@ -47,8 +47,7 @@ class JSONEncoder(json.JSONEncoder):
elif hasattr(o, '__getitem__'):
try:
return dict(o)
- except KeyError:
- # Couldn't convert to a dict, fall through
+ except:
pass
elif hasattr(o, '__iter__'):
return [i for i in o]