Skip to content

Commit ee50c43

Browse files
committed
fix(drf-serializer): IndexError on missing Meta attr, closes #34
1 parent e3e225a commit ee50c43

File tree

4 files changed

+32
-16
lines changed

4 files changed

+32
-16
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
### Unreleased
44

5+
### 0.14.1
6+
7+
- fix(drf-serializer): IndexError on missing Meta attr, closes #34
8+
59
### 0.14.0
610

711
- Remove `field-boolean-null`

src/extra_checks/checks/drf_serializer_checks.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def _get_line(self) -> Optional[int]:
6464
),
6565
key=lambda a: a[1].find("class Meta"),
6666
)[0][0]
67-
except StopIteration:
67+
except (StopIteration, IndexError):
6868
return None
6969

7070

tests/example/serializers.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ class Meta:
99
read_only_fields: list = []
1010

1111

12+
class InheritedArticleSerializer(ArticleSerializer):
13+
pass
14+
15+
1216
class AuthorSerializer(serializers.ModelSerializer):
1317
first_name = serializers.CharField()
1418

@@ -17,6 +21,10 @@ class Meta:
1721
extra_kwargs = {"first_name": {"read_only": True}}
1822

1923

24+
class InheritedAuthorSerializer(AuthorSerializer):
25+
pass
26+
27+
2028
class DisableCheckSerializer(serializers.ModelSerializer):
2129
first_name = serializers.CharField()
2230

tests/test_drf_serializer_checks.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
ArticleSerializer,
1616
AuthorSerializer,
1717
DisableCheckSerializer,
18+
InheritedArticleSerializer,
19+
InheritedAuthorSerializer,
1820
)
1921

2022

@@ -37,25 +39,27 @@ def test_model_serializer_extra_kwargs(test_case):
3739

3840

3941
def test_model_serializer_meta_attribute(test_case):
40-
messages = (
41-
test_case.settings(
42-
{
43-
"checks": [
44-
{
45-
"id": CheckDRFSerializerMetaAttribute.Id.value,
46-
"attrs": ["read_only_fields"],
47-
}
48-
]
49-
}
50-
)
51-
.check(CheckDRFSerializerMetaAttribute)
52-
.serializers(ArticleSerializer)
53-
.run()
54-
)
42+
test_case.settings(
43+
{
44+
"checks": [
45+
{
46+
"id": CheckDRFSerializerMetaAttribute.Id.value,
47+
"attrs": ["read_only_fields"],
48+
}
49+
]
50+
}
51+
).check(CheckDRFSerializerMetaAttribute)
52+
53+
messages = test_case.serializers(ArticleSerializer).run()
54+
assert not messages
55+
messages = test_case.serializers(InheritedArticleSerializer).run()
5556
assert not messages
5657
messages = test_case.serializers(AuthorSerializer).run()
5758
assert len(messages) == 1
5859
assert messages[0].id == CheckDRFSerializerMetaAttribute.Id.name
60+
messages = test_case.serializers(InheritedAuthorSerializer).run()
61+
assert len(messages) == 1
62+
assert messages[0].id == CheckDRFSerializerMetaAttribute.Id.name
5963

6064

6165
def test_get_serializers_to_check():

0 commit comments

Comments
 (0)