Skip to content

Commit 6082aae

Browse files
author
Hamed Ahmadi
committed
Include metadata in Parser output
The JSONParser will add metadata in the request under a top level key '_meta'.
1 parent c93dea1 commit 6082aae

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

example/tests/test_parsers.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import json
2+
3+
from django.test import TestCase
4+
from django.utils.six.moves import StringIO
5+
6+
from rest_framework_json_api.parsers import JSONParser
7+
8+
9+
class TestJSONParser(TestCase):
10+
11+
def setUp(self):
12+
class MockRequest(object):
13+
14+
def __init__(self):
15+
self.method = 'GET'
16+
17+
request = MockRequest()
18+
19+
self.parser_context = {'request': request, 'kwargs': {}, 'view': 'BlogViewSet'}
20+
21+
data = {
22+
'data': {
23+
'id': 123,
24+
'type': 'Blog'
25+
},
26+
'meta': {
27+
'random_key': 'random_value'
28+
}
29+
}
30+
31+
self.string = json.dumps(data)
32+
33+
def test_parse_include_metadata(self):
34+
parser = JSONParser()
35+
36+
stream = StringIO(self.string)
37+
data = parser.parse(stream, None, self.parser_context)
38+
39+
self.assertEqual(data['_meta'], {'random_key': 'random_value'})

rest_framework_json_api/parsers.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@ def parse_relationships(data):
4646
parsed_relationships[field_name] = list(relation for relation in field_data)
4747
return parsed_relationships
4848

49+
@staticmethod
50+
def parse_metadata(result):
51+
metadata = result.get('meta')
52+
if metadata:
53+
return {'_meta': metadata}
54+
else:
55+
return {}
56+
4957
def parse(self, stream, media_type=None, parser_context=None):
5058
"""
5159
Parses the incoming bytestream as JSON and returns the resulting data
@@ -87,6 +95,7 @@ def parse(self, stream, media_type=None, parser_context=None):
8795
parsed_data = {'id': data.get('id')}
8896
parsed_data.update(self.parse_attributes(data))
8997
parsed_data.update(self.parse_relationships(data))
98+
parsed_data.update(self.parse_metadata(result))
9099
return parsed_data
91100

92101
else:

0 commit comments

Comments
 (0)