Skip to content

Commit 0d0712f

Browse files
authored
Merge pull request #116 from ayasyrev:changed_fields
changed_fields with default value
2 parents 4bc5e97 + b23df27 commit 0d0712f

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

src/model_constructor/helpers.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,7 @@ class Cfg(BaseModel):
7373

7474
name: Optional[str] = None
7575

76-
def _get_str_value(self, field: str) -> str:
77-
value = getattr(self, field)
76+
def _get_str(self, value: Any) -> str:
7877
if isinstance(value, type):
7978
value = value.__name__
8079
elif isinstance(value, partial):
@@ -83,6 +82,9 @@ def _get_str_value(self, field: str) -> str:
8382
value = value.__name__
8483
return value
8584

85+
def _get_str_value(self, field: str) -> str:
86+
return self._get_str(getattr(self, field))
87+
8688
def __repr__(self) -> str:
8789
return f"{self.__repr_name__()}(\n {self.__repr_str__(chr(10) + ' ')})"
8890

@@ -135,11 +137,14 @@ def print_set_fields(self) -> None:
135137
else:
136138
print("Nothing changed")
137139

138-
def print_changed_fields(self) -> None:
140+
def print_changed_fields(self, show_default: bool = False, separator: str = " | ") -> None:
139141
"""Print fields changed at init."""
140142
if self.changed_fields:
143+
default_value = ""
141144
print("Changed fields:")
142145
for field in self.changed_fields:
143-
print(f"{field}: {self._get_str_value(field)}")
146+
if show_default:
147+
default_value = f"{separator}{self._get_str(self.model_fields[field].default)}"
148+
print(f"{field}: {self._get_str_value(field)}{default_value}")
144149
else:
145150
print("Nothing changed")

tests/test_helpers.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,16 +75,27 @@ def test_cfg_repr_print(capsys: CaptureFixture[str]):
7575
cfg.print_set_fields()
7676
out = capsys.readouterr().out
7777
assert out == "Set fields:\nint_value: 0\n"
78+
7879
# Changed fields
7980
cfg = Cfg2(name="cfg_name")
8081
assert cfg.changed_fields == {"name": "cfg_name"}
8182
cfg.int_value = 1
8283
cfg.name = None
8384
assert cfg.changed_fields == {"int_value": 1}
85+
8486
# print
8587
cfg.print_changed_fields()
8688
out = capsys.readouterr().out
8789
assert out == "Changed fields:\nint_value: 1\n"
90+
91+
cfg.print_changed_fields(show_default=True)
92+
out = capsys.readouterr().out
93+
assert out == "Changed fields:\nint_value: 1 | 10\n"
94+
95+
cfg.print_changed_fields(show_default=True, separator=" / ")
96+
out = capsys.readouterr().out
97+
assert out == "Changed fields:\nint_value: 1 / 10\n"
98+
8899
# return to default
89100
cfg.int_value = 10
90101
assert not cfg.changed_fields

0 commit comments

Comments
 (0)