Skip to content

Commit b0c7488

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 b0c7488

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

example/tests/test_parsers.py

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