Skip to content

Commit 5c061d8

Browse files
Move reading and diffing from __init__ to __iter__
Avoid side effects in __init__ by deferring JSON loading and message diffing to iteration time.
1 parent 4f65fff commit 5c061d8

1 file changed

Lines changed: 25 additions & 19 deletions

File tree

pylint/testutils/_primer/comparator.py

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,42 +19,48 @@ class Comparator:
1919
def __init__(
2020
self, base_file: str, new_file: str, batches: int | None = None
2121
) -> None:
22+
self._base_file = base_file
23+
self._new_file = new_file
24+
self._batches = batches
25+
26+
def __iter__(self) -> Generator[tuple[str, PackageData, PackageData]]:
2227
main_data: PackageMessages
23-
if batches is None:
24-
main_data = self._load_json(base_file)
25-
self.pr_data = self._load_json(new_file)
28+
if self._batches is None:
29+
main_data = self._load_json(self._base_file)
30+
pr_data = self._load_json(self._new_file)
2631
else:
2732
main_data = {}
28-
self.pr_data = {}
29-
for idx in range(batches):
33+
pr_data = {}
34+
for idx in range(self._batches):
3035
main_data.update(
31-
self._load_json(base_file.replace("BATCHIDX", "batch" + str(idx)))
36+
self._load_json(
37+
self._base_file.replace("BATCHIDX", "batch" + str(idx))
38+
)
3239
)
33-
self.pr_data.update(
34-
self._load_json(new_file.replace("BATCHIDX", "batch" + str(idx)))
40+
pr_data.update(
41+
self._load_json(
42+
self._new_file.replace("BATCHIDX", "batch" + str(idx))
43+
)
3544
)
3645

37-
self.missing_messages: PackageMessages = {}
46+
missing_messages: PackageMessages = {}
3847
for package, data in main_data.items():
3948
package_missing_messages: list[OldJsonExport] = []
4049
for message in data["messages"]:
4150
try:
42-
self.pr_data[package]["messages"].remove(message)
51+
pr_data[package]["messages"].remove(message)
4352
except ValueError:
4453
package_missing_messages.append(message)
45-
self.missing_messages[package] = PackageData(
46-
commit=self.pr_data[package]["commit"],
54+
missing_messages[package] = PackageData(
55+
commit=pr_data[package]["commit"],
4756
messages=package_missing_messages,
4857
)
4958

50-
def __iter__(
51-
self,
52-
) -> Generator[tuple[str, PackageData, PackageData]]:
53-
for package, missing_messages in self.missing_messages.items():
54-
new_messages = self.pr_data[package]
55-
if not missing_messages["messages"] and not new_messages["messages"]:
59+
for package, pkg_missing in missing_messages.items():
60+
new_messages = pr_data[package]
61+
if not pkg_missing["messages"] and not new_messages["messages"]:
5662
continue
57-
yield package, missing_messages, new_messages
63+
yield package, pkg_missing, new_messages
5864

5965
@staticmethod
6066
def _load_json(file_path: Path | str) -> PackageMessages:

0 commit comments

Comments
 (0)