From b4b80ec9223fbe38155280ee38e7c49d9fb5b904 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Eren=20=C3=96zt=C3=BCrk?= Date: Fri, 18 Feb 2022 20:40:13 +0300 Subject: [PATCH 1/3] fix format of nested dataclasses --- devtools/prettier.py | 4 +--- tests/test_prettier.py | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/devtools/prettier.py b/devtools/prettier.py index 36f2d57..86a98cb 100644 --- a/devtools/prettier.py +++ b/devtools/prettier.py @@ -230,9 +230,7 @@ def _format_bytearray(self, value: 'Any', _: str, indent_current: int, indent_ne self._str_lines(lines, indent_current, indent_new) def _format_dataclass(self, value: 'Any', _: str, indent_current: int, indent_new: int): - from dataclasses import asdict - - self._format_fields(value, asdict(value).items(), indent_current, indent_new) + self._format_fields(value, value.__dict__.items(), indent_current, indent_new) def _format_sqlalchemy_class(self, value: 'Any', _: str, indent_current: int, indent_new: int): fields = [ diff --git a/tests/test_prettier.py b/tests/test_prettier.py index 34c507d..72b324b 100644 --- a/tests/test_prettier.py +++ b/tests/test_prettier.py @@ -220,7 +220,7 @@ def test_counter(): })>""" -@pytest.mark.skipif(sys.version_info > (3, 7), reason='no datalcasses before 3.6') +@pytest.mark.skipif(sys.version_info < (3, 7), reason='no dataclasses before 3.6') def test_dataclass(): @dataclass class FooDataclass: @@ -242,6 +242,30 @@ class FooDataclass: )""" +@pytest.mark.skipif(sys.version_info < (3, 7), reason='no dataclasses before 3.6') +def test_nested_dataclasses(): + @dataclass + class FooDataclass: + x: int + + @dataclass + class BarDataclass: + a: float + b: FooDataclass + + f = FooDataclass(123) + b = BarDataclass(10.0, f) + v = pformat(b) + print(v) + assert v == """\ +BarDataclass( + a=10.0, + b=FooDataclass( + x=123, + ), +)""" + + @pytest.mark.skipif(numpy is None, reason='numpy not installed') def test_indent_numpy(): v = pformat({'numpy test': numpy.array(range(20))}) From b330bd93968f3eb6b429c49ea02c562677f4089b Mon Sep 17 00:00:00 2001 From: Samuel Colvin Date: Tue, 26 Jul 2022 10:38:05 +0100 Subject: [PATCH 2/3] import sys --- tests/test_prettier.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_prettier.py b/tests/test_prettier.py index 3f6d203..d10e884 100644 --- a/tests/test_prettier.py +++ b/tests/test_prettier.py @@ -1,5 +1,6 @@ import os import string +import sys from collections import Counter, OrderedDict, namedtuple from dataclasses import dataclass from typing import List From da5eccbf02cf536d3f97673fea138bc2198d3d4e Mon Sep 17 00:00:00 2001 From: Samuel Colvin Date: Tue, 26 Jul 2022 10:39:21 +0100 Subject: [PATCH 3/3] unskip --- tests/test_prettier.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/test_prettier.py b/tests/test_prettier.py index d10e884..6dea882 100644 --- a/tests/test_prettier.py +++ b/tests/test_prettier.py @@ -1,6 +1,5 @@ import os import string -import sys from collections import Counter, OrderedDict, namedtuple from dataclasses import dataclass from typing import List @@ -241,7 +240,6 @@ class FooDataclass: )""" -@pytest.mark.skipif(sys.version_info < (3, 7), reason='no dataclasses before 3.6') def test_nested_dataclasses(): @dataclass class FooDataclass: