This repository was archived by the owner on Jun 6, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 69
How do I get many rows with links? #425
Copy link
Copy link
Open
Description
Help!
burned many hours and brain cells trying to figure this out... I have an 'id' key in my data.
Code
import datetime
import pprint
from marshmallow_jsonapi import Schema, fields
from marshmallow import post_dump
data = [{'id': 1,
'created_at': datetime.datetime(2022, 6, 29, 19, 16, 18, 595964),
'updated_at': datetime.datetime(2022, 6, 29, 19, 16, 18, 595965),
'description': 'NAN63831511',
'review_status_type': 1,
'user': 1,
'version': 1},
{'id': 4,
'created_at': datetime.datetime(2022, 6, 29, 19, 16, 18, 595964),
'updated_at': datetime.datetime(2022, 6, 29, 19, 16, 18, 595965),
'description': 'NAN73623423',
'review_status_type': 1,
'user': 3,
'version': 2},
{'id': 5,
'created_at': datetime.datetime(2022, 6, 29, 19, 16, 18, 595964),
'updated_at': datetime.datetime(2022, 6, 29, 19, 16, 18, 595965),
'description': 'NAN93623423',
'review_status_type': 1,
'user': 5,
'version': 2},
{'id': 2,
'created_at': datetime.datetime(2022, 6, 29, 19, 16, 18, 595964),
'updated_at': datetime.datetime(2022, 6, 29, 19, 16, 18, 595965),
'description': 'NAN63831511',
'review_status_type': 1,
'user': 1,
'version': 2},
{'id': 3,
'created_at': datetime.datetime(2022, 6, 29, 19, 16, 18, 595964),
'updated_at': datetime.datetime(2022, 6, 29, 19, 16, 18, 595965),
'description': 'NAN63838745',
'review_status_type': 1,
'user': 1,
'version': 2}]
url_ = 'http://127.0.0.1/review/{id}'
many_url_ = 'http://127.0.0.1/reviews/{id}'
class ReviewSchema(Schema):
id = fields.Integer(dump_only=True)
created_at = fields.DateTime(format="iso")
updated_at = fields.DateTime(format="iso")
description = fields.String()
review_status_type_id = fields.Integer()
user_id = fields.Integer()
version = fields.Integer()
class Meta:
many = True
type_ = "reviews" # required!
self_view = "review_detail"
self_view_kwargs = {"id": "<id>"}
self_view_many = "reviews_list"
self_url_kwargs = {'id': "<id>"}
self_url = url_
self_url_many = many_url_
@post_dump
def fix_datetimes(self, data, **kwargs):
# print(f"@post_dump data = {data}")
data['created_at'] += 'Z'
data['updated_at'] += 'Z'
return data
# dump single row
print(f"\n{25*'*'} ONE ROW {25*'*'}\n")
resp = ReviewSchema().dump(data[2])
pprint.pprint(resp)
print(f"\n{25*'*'} ONE ROW {25*'*'}\n")
# dump rows
print(f"\n{25*'*'} MANY ROWS {25*'*'}\n")
resp = ReviewSchema(many=True).dump(data)
pprint.pprint(resp)
print(f"\n{25*'*'} MANY ROWS {25*'*'}\n")
Output
************************* ONE ROW *************************
{'data': {'attributes': {'created_at': '2022-06-29T19:16:18.595964Z',
'description': 'NAN93623423',
'updated_at': '2022-06-29T19:16:18.595965Z',
'version': 2},
'id': 5,
'links': {'self': 'http://127.0.0.1/review/5'},
'type': 'reviews'},
'links': {'self': 'http://127.0.0.1/review/5'}}
************************* ONE ROW *************************
************************* MANY ROWS *************************
Traceback (most recent call last):
File "/Users/user/PycharmProjects/pee-wee-testing/many_rows.py", line 83, in <module>
resp = ReviewSchema(many=True).dump(data)
File "/Users/user/PycharmProjects/pee-wee-testing/venv/lib/python3.10/site-packages/marshmallow/schema.py", line 560, in dump
result = self._invoke_dump_processors(
File "/Users/user/PycharmProjects/pee-wee-testing/venv/lib/python3.10/site-packages/marshmallow/schema.py", line 1071, in _invoke_dump_processors
data = self._invoke_processors(
File "/Users/user/PycharmProjects/pee-wee-testing/venv/lib/python3.10/site-packages/marshmallow/schema.py", line 1225, in _invoke_processors
data = processor(data, many=many, **kwargs)
File "/Users/user/PycharmProjects/pee-wee-testing/venv/lib/python3.10/site-packages/marshmallow_jsonapi/schema.py", line 128, in format_json_api_response
ret = self.wrap_response(ret, many)
File "/Users/user/PycharmProjects/pee-wee-testing/venv/lib/python3.10/site-packages/marshmallow_jsonapi/schema.py", line 415, in wrap_response
top_level_links = self.get_top_level_links(data, many)
File "/Users/user/PycharmProjects/pee-wee-testing/venv/lib/python3.10/site-packages/marshmallow_jsonapi/schema.py", line 393, in get_top_level_links
self_link = self.generate_url(self.opts.self_url_many)
File "/Users/user/PycharmProjects/pee-wee-testing/venv/lib/python3.10/site-packages/marshmallow_jsonapi/schema.py", line 422, in generate_url
return link.format_map(kwargs) if link else None
KeyError: 'id'
Process finished with exit code 1
Metadata
Metadata
Assignees
Labels
No labels