Skip to content

Commit 8c48397

Browse files
authored
fix: Don't return properties as parameters of dataclasses (again)
This was fixed in 5a5c03b, but broken in 82a9d57. The tests broke as well and did not catch the regression. Issue-232: #232 PR-248: #248
1 parent f314957 commit 8c48397

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

src/griffe/extensions/dataclasses.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ def _dataclass_parameters(class_: Class) -> list[Parameter]:
8080
if member.is_attribute:
8181
member = cast(Attribute, member)
8282

83+
# Exclude @property and @cached_property attributes
84+
if "property" in member.labels:
85+
continue
86+
8387
# Start of keyword-only parameters.
8488
if isinstance(member.annotation, Expr) and member.annotation.canonical_path == "dataclasses.KW_ONLY":
8589
kw_only = True

tests/test_dataclasses.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import griffe
1111
from griffe.dataclasses import Docstring, Module
1212
from griffe.loader import GriffeLoader
13-
from griffe.tests import module_vtree, temporary_pypackage, temporary_visited_module, temporary_visited_package
13+
from griffe.tests import module_vtree, temporary_pypackage, temporary_visited_package
1414

1515

1616
def test_submodule_exports() -> None:
@@ -93,8 +93,7 @@ def test_alias_proxies() -> None:
9393

9494
def test_dataclass_properties() -> None:
9595
"""Don't return properties as parameters of dataclasses."""
96-
with temporary_visited_module(
97-
"""
96+
code = """
9897
from dataclasses import dataclass
9998
from functools import cached_property
10099
@@ -110,11 +109,10 @@ def a(self):
110109
@cached_property
111110
def b(self):
112111
return 0
113-
""",
114-
) as module:
112+
"""
113+
with temporary_visited_package("package", {"__init__.py": code}) as module:
115114
params = module["Point"].parameters
116-
assert "a" not in params
117-
assert "b" not in params
115+
assert [p.name for p in params] == ["self", "x", "y"]
118116

119117

120118
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)