Skip to content

Commit c153227

Browse files
wip
1 parent 8bf1120 commit c153227

File tree

3 files changed

+51
-44
lines changed

3 files changed

+51
-44
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
2+
# For details: https://github.com/PyCQA/pylint/blob/main/LICENSE
3+
# Copyright (c) https://github.com/PyCQA/pylint/blob/main/CONTRIBUTORS.txt
4+
5+
from __future__ import annotations
6+
7+
import json
8+
from collections.abc import Generator
9+
from pathlib import Path
10+
11+
from pylint.testutils._primer.primer_command import Messages, PackageMessages
12+
13+
14+
class Comparator:
15+
def __init__(self, main_json: Path, pr_json: Path):
16+
main_messages = self._load_json(main_json)
17+
self.pr_messages = self._load_json(pr_json)
18+
self.missing_messages: PackageMessages = {}
19+
for package, messages in main_messages.items():
20+
self.missing_messages[package] = []
21+
for message in messages:
22+
try:
23+
self.pr_messages[package].remove(message)
24+
except ValueError:
25+
self.missing_messages[package].append(message)
26+
27+
def __iter__(
28+
self,
29+
) -> Generator[tuple[str, Messages, Messages], None, None]:
30+
for package, missing_messages in self.missing_messages.items():
31+
new_messages = self.pr_messages[package]
32+
if not missing_messages and not new_messages:
33+
print(f"PRIMER: No changes in {package}.")
34+
continue
35+
yield package, missing_messages, new_messages
36+
37+
@staticmethod
38+
def _load_json(file_path: Path | str) -> PackageMessages:
39+
with open(file_path, encoding="utf-8") as f:
40+
result: PackageMessages = json.load(f)
41+
return result

pylint/testutils/_primer/primer_compare_command.py

Lines changed: 9 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,65 +3,31 @@
33
# Copyright (c) https://github.com/PyCQA/pylint/blob/main/CONTRIBUTORS.txt
44
from __future__ import annotations
55

6-
import json
7-
from pathlib import Path, PurePosixPath
6+
from pathlib import PurePosixPath
87

9-
from pylint.reporters.json_reporter import OldJsonExport
10-
from pylint.testutils._primer.primer_command import (
11-
PackageData,
12-
PackageMessages,
13-
PrimerCommand,
14-
)
8+
from pylint.testutils._primer.comparator import Comparator
9+
from pylint.testutils._primer.primer_command import Messages, PrimerCommand
1510

1611
MAX_GITHUB_COMMENT_LENGTH = 65536
1712

1813

1914
class CompareCommand(PrimerCommand):
2015
def run(self) -> None:
21-
main_data = self._load_json(self.config.base_file)
22-
pr_data = self._load_json(self.config.new_file)
23-
missing_messages_data, new_messages_data = self._cross_reference(
24-
main_data, pr_data
25-
)
26-
comment = self._create_comment(missing_messages_data, new_messages_data)
16+
comparator = Comparator(self.config.base_file, self.config.new_file)
17+
comment = self._create_comment(comparator)
2718
with open(self.primer_directory / "comment.txt", "w", encoding="utf-8") as f:
2819
f.write(comment)
2920

30-
@staticmethod
31-
def _cross_reference(
32-
main_data: PackageMessages, pr_data: PackageMessages
33-
) -> tuple[PackageMessages, PackageMessages]:
34-
missing_messages_data: PackageMessages = {}
35-
for package, data in main_data.items():
36-
package_missing_messages: list[OldJsonExport] = []
37-
for message in data["messages"]:
38-
try:
39-
pr_data[package]["messages"].remove(message)
40-
except ValueError:
41-
package_missing_messages.append(message)
42-
missing_messages_data[package] = PackageData(
43-
commit=pr_data[package]["commit"], messages=package_missing_messages
44-
)
45-
return missing_messages_data, pr_data
46-
47-
@staticmethod
48-
def _load_json(file_path: Path | str) -> PackageMessages:
49-
with open(file_path, encoding="utf-8") as f:
50-
result: PackageMessages = json.load(f)
51-
return result
52-
53-
def _create_comment(
54-
self, all_missing_messages: PackageMessages, all_new_messages: PackageMessages
55-
) -> str:
21+
def _create_comment(self, comparator: Comparator) -> str:
5622
comment = ""
57-
for package, missing_messages in all_missing_messages.items():
23+
for package, missing_messages, new_messages in comparator:
5824
if len(comment) >= MAX_GITHUB_COMMENT_LENGTH:
5925
break
6026
new_messages = all_new_messages[package]
6127
if not missing_messages["messages"] and not new_messages["messages"]:
6228
continue
6329
comment += self._create_comment_for_package(
64-
package, new_messages, missing_messages
30+
package, missing_messages, new_messages
6531
)
6632
comment = (
6733
f"🤖 **Effect of this PR on checked open source code:** 🤖\n\n{comment}"
@@ -74,7 +40,7 @@ def _create_comment(
7440
return self._truncate_comment(comment)
7541

7642
def _create_comment_for_package(
77-
self, package: str, new_messages: PackageData, missing_messages: PackageData
43+
self, package: str, missing_messages: Messages, new_messages: Messages
7844
) -> str:
7945
comment = f"\n\n**Effect on [{package}]({self.packages[package].url}):**\n"
8046
# Create comment for new messages

tests/testutils/_primer/test_primer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
PACKAGES_TO_PRIME_PATH = TEST_DIR_ROOT / "primer/packages_to_prime.json"
2222
FIXTURES_PATH = HERE / "fixtures"
2323

24-
PRIMER_CURRENT_INTERPRETER = (3, 10)
24+
PRIMER_CURRENT_INTERPRETER = (3, 8)
2525

2626
DEFAULT_ARGS = ["python tests/primer/__main__.py", "compare", "--commit=v2.14.2"]
2727

0 commit comments

Comments
 (0)