Skip to content

Commit a4262dd

Browse files
authored
Added missing error message when no resource name is configured on serializer (#1020)
1 parent 3db6bce commit a4262dd

File tree

4 files changed

+22
-1
lines changed

4 files changed

+22
-1
lines changed

Diff for: AUTHORS

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Jamie Bliss <[email protected]>
1515
Jason Housley <[email protected]>
1616
Jeppe Fihl-Pearson <[email protected]>
1717
Jerel Unruh <[email protected]>
18+
Jonas Kiefer <https://github.com/jokiefer>
1819
Jonas Metzener <[email protected]>
1920
Jonathan Senecal <[email protected]>
2021
Joseba Mendivil <[email protected]>

Diff for: CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ any parts of the framework not mentioned in the documentation should generally b
2222
* Raise comprehensible error when reserved field names `meta` and `results` are used.
2323
* Use `relationships` in the error object `pointer` when the field is actually a relationship.
2424
* Added missing inflection to the generated OpenAPI schema.
25+
* Added missing error message when `resource_name` is not properly configured.
2526

2627
### Changed
2728

Diff for: rest_framework_json_api/utils.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,10 @@ def get_resource_type_from_serializer(serializer):
320320
return meta.resource_name
321321
elif hasattr(meta, "model"):
322322
return get_resource_type_from_model(meta.model)
323-
raise AttributeError()
323+
raise AttributeError(
324+
f"can not detect 'resource_name' on serializer '{serializer.__class__.__name__}'"
325+
f" in module '{serializer.__class__.__module__}'"
326+
)
324327

325328

326329
def get_included_resources(request, serializer=None):

Diff for: tests/test_utils.py

+16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import pytest
22
from django.db import models
33
from rest_framework import status
4+
from rest_framework.fields import Field
45
from rest_framework.generics import GenericAPIView
56
from rest_framework.response import Response
67
from rest_framework.views import APIView
@@ -15,6 +16,7 @@
1516
get_included_serializers,
1617
get_related_resource_type,
1718
get_resource_name,
19+
get_resource_type_from_serializer,
1820
undo_format_field_name,
1921
undo_format_field_names,
2022
undo_format_link_segment,
@@ -377,3 +379,17 @@ class Meta:
377379
}
378380

379381
assert included_serializers == expected_included_serializers
382+
383+
384+
def test_get_resource_type_from_serializer_without_resource_name_raises_error():
385+
class SerializerWithoutResourceName(serializers.Serializer):
386+
something = Field()
387+
388+
serializer = SerializerWithoutResourceName()
389+
390+
with pytest.raises(AttributeError) as excinfo:
391+
get_resource_type_from_serializer(serializer=serializer)
392+
assert str(excinfo.value) == (
393+
"can not detect 'resource_name' on serializer "
394+
"'SerializerWithoutResourceName' in module 'tests.test_utils'"
395+
)

0 commit comments

Comments
 (0)