Skip to content
This repository was archived by the owner on May 26, 2020. It is now read-only.

Commit 9a68f68

Browse files
committed
Fix get_request_data compat method
This fixes compat method introduced for #139 The problem lied with how `hasattr` was used. `hasattr` returned false if `getattr(o, n)` raises an exception.
1 parent a378010 commit 9a68f68

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

rest_framework_jwt/compat.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,10 @@ def get_username(user):
5353

5454

5555
def get_request_data(request):
56-
if hasattr(request, 'data'):
56+
if getattr(request, 'data', None):
5757
data = request.data
5858
else:
5959
# DRF < 3.2
6060
data = request.DATA
61+
6162
return data

tests/test_compat.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import pytest
2+
from django.test import TestCase
3+
from rest_framework.request import Request
4+
from rest_framework.test import APIRequestFactory
5+
from rest_framework.parsers import JSONParser
6+
from rest_framework.exceptions import ParseError
7+
8+
from rest_framework_jwt.compat import get_request_data
9+
10+
11+
class CompatTests(TestCase):
12+
def setUp(self):
13+
self.factory = APIRequestFactory()
14+
15+
def test_get_request_data(self):
16+
data = '{"a":"b"}'
17+
post = self.factory.post('/', data, content_type='application/json')
18+
request = Request(post, parsers=[JSONParser()])
19+
20+
assert get_request_data(request) == {'a': 'b'}
21+
22+
def test_get_request_data_invalid(self):
23+
data = '{a:b}'
24+
post = self.factory.post('/', data, content_type='application/json')
25+
request = Request(post, parsers=[JSONParser()])
26+
27+
with pytest.raises(ParseError):
28+
get_request_data(request)

0 commit comments

Comments
 (0)