Skip to content

Commit 39c37c1

Browse files
authored
Fix dataclass inference for marshmallow_dataclass (#1298)
1 parent 3059613 commit 39c37c1

File tree

3 files changed

+13
-3
lines changed

3 files changed

+13
-3
lines changed

ChangeLog

+3
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ Release date: TBA
3333

3434
Closes PyCQA/pylint#5461
3535

36+
* Enable inference of dataclass import from marshmallow_dataclass.
37+
This allows the dataclasses brain to recognize dataclasses annotated by marshmallow_dataclass.
38+
3639

3740
What's New in astroid 2.9.0?
3841
============================

astroid/brain/brain_dataclasses.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
"""
44
Astroid hook for the dataclasses library
55
6-
Support both built-in dataclasses and pydantic.dataclasses. References:
6+
Support built-in dataclasses, pydantic.dataclasses, and marshmallow_dataclass-annotated
7+
dataclasses. References:
78
- https://docs.python.org/3/library/dataclasses.html
89
- https://pydantic-docs.helpmanual.io/usage/dataclasses/
10+
- https://lovasoa.github.io/marshmallow_dataclass/
11+
912
"""
1013
from typing import FrozenSet, Generator, List, Optional, Tuple
1114

@@ -35,7 +38,9 @@
3538

3639
DATACLASSES_DECORATORS = frozenset(("dataclass",))
3740
FIELD_NAME = "field"
38-
DATACLASS_MODULES = frozenset(("dataclasses", "pydantic.dataclasses"))
41+
DATACLASS_MODULES = frozenset(
42+
("dataclasses", "marshmallow_dataclass", "pydantic.dataclasses")
43+
)
3944
DEFAULT_FACTORY = "_HAS_DEFAULT_FACTORY" # based on typing.py
4045

4146

tests/unittest_brain_dataclasses.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212

1313
parametrize_module = pytest.mark.parametrize(
14-
("module",), (["dataclasses"], ["pydantic.dataclasses"])
14+
("module",), (["dataclasses"], ["pydantic.dataclasses"], ["marshmallow_dataclass"])
1515
)
1616

1717

@@ -304,6 +304,8 @@ class A:
304304
("dataclasses", "typing"),
305305
("pydantic.dataclasses", "typing"),
306306
("pydantic.dataclasses", "collections.abc"),
307+
("marshmallow_dataclass", "typing"),
308+
("marshmallow_dataclass", "collections.abc"),
307309
],
308310
)
309311
def test_inference_callable_attribute(module: str, typing_module: str):

0 commit comments

Comments
 (0)