From 7112f8960730f84ed4c9963854172d7c39df7c4d Mon Sep 17 00:00:00 2001 From: Alvaro Frias Garay Date: Thu, 30 Mar 2023 11:26:46 -0300 Subject: [PATCH 1/8] Add rstripping for "/" characters Signed-off-by: Alvaro Frias Garay --- pylint/pyreverse/writer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pylint/pyreverse/writer.py b/pylint/pyreverse/writer.py index cb711dd104..7b334ee5ee 100644 --- a/pylint/pyreverse/writer.py +++ b/pylint/pyreverse/writer.py @@ -41,7 +41,7 @@ def __init__(self, config: argparse.Namespace) -> None: def write(self, diadefs: Iterable[ClassDiagram | PackageDiagram]) -> None: """Write files for according to .""" for diagram in diadefs: - basename = diagram.title.strip().replace(" ", "_") + basename = diagram.title.strip().rstrip("/").replace(" ", "_") file_name = f"{basename}.{self.config.output_format}" if os.path.exists(self.config.output_directory): file_name = os.path.join(self.config.output_directory, file_name) From 9b4b1d3dff1e9ff025f571cfacd5346aa186a4fb Mon Sep 17 00:00:00 2001 From: Alvaro Frias Garay Date: Thu, 30 Mar 2023 11:35:06 -0300 Subject: [PATCH 2/8] Add towncrier fragment Signed-off-by: Alvaro Frias Garay --- doc/whatsnew/fragments/8504.bugfix | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 doc/whatsnew/fragments/8504.bugfix diff --git a/doc/whatsnew/fragments/8504.bugfix b/doc/whatsnew/fragments/8504.bugfix new file mode 100644 index 0000000000..25c8aee730 --- /dev/null +++ b/doc/whatsnew/fragments/8504.bugfix @@ -0,0 +1,3 @@ +Fix a crash in pyreverse when "/" characters are used in the output filename e.g pyreverse -o png -p name/ path/to/project + +Closes #8504 From eea66033bc59bfc96737789ec000305f7395d5ee Mon Sep 17 00:00:00 2001 From: Alvaro Frias Garay Date: Thu, 30 Mar 2023 11:40:48 -0300 Subject: [PATCH 3/8] Apply Precommit corrections Signed-off-by: Alvaro Frias Garay --- doc/whatsnew/fragments/8504.bugfix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/whatsnew/fragments/8504.bugfix b/doc/whatsnew/fragments/8504.bugfix index 25c8aee730..2b54ac7b65 100644 --- a/doc/whatsnew/fragments/8504.bugfix +++ b/doc/whatsnew/fragments/8504.bugfix @@ -1,3 +1,3 @@ -Fix a crash in pyreverse when "/" characters are used in the output filename e.g pyreverse -o png -p name/ path/to/project +Fix a crash in pyreverse when "/" characters are used in the output filename e.g pyreverse -o png -p name/ path/to/project. Closes #8504 From b11c9b216dea44b4a61bcf342b38fc35bca97463 Mon Sep 17 00:00:00 2001 From: Alvaro Frias Garay Date: Sat, 1 Apr 2023 23:05:01 -0300 Subject: [PATCH 4/8] Use replace rather than rstrip Signed-off-by: Alvaro Frias Garay --- pylint/pyreverse/writer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pylint/pyreverse/writer.py b/pylint/pyreverse/writer.py index 7b334ee5ee..09e191e3a0 100644 --- a/pylint/pyreverse/writer.py +++ b/pylint/pyreverse/writer.py @@ -41,7 +41,7 @@ def __init__(self, config: argparse.Namespace) -> None: def write(self, diadefs: Iterable[ClassDiagram | PackageDiagram]) -> None: """Write files for according to .""" for diagram in diadefs: - basename = diagram.title.strip().rstrip("/").replace(" ", "_") + basename = diagram.title.strip().replace("/", "_").replace(" ", "_") file_name = f"{basename}.{self.config.output_format}" if os.path.exists(self.config.output_directory): file_name = os.path.join(self.config.output_directory, file_name) From 0f7861526beb59c7fe652dcc455c57bc22d47f6c Mon Sep 17 00:00:00 2001 From: Alvaro Frias Garay Date: Sat, 1 Apr 2023 23:05:38 -0300 Subject: [PATCH 5/8] Add tests Signed-off-by: Alvaro Frias Garay --- tests/pyreverse/test_writer.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/pyreverse/test_writer.py b/tests/pyreverse/test_writer.py index 2897ca054c..93542b7033 100644 --- a/tests/pyreverse/test_writer.py +++ b/tests/pyreverse/test_writer.py @@ -207,3 +207,17 @@ def test_color_for_stdlib_module(default_config: PyreverseConfig) -> None: obj.node = Mock() obj.node.qname.return_value = "collections" assert writer.get_shape_color(obj) == "grey" + +# test to check the names of the generated files are corrected when using an incorrect character like "/" in the package name +def test_package_name_with_slash(default_config: PyreverseConfig) -> None: + writer = DiagramWriter(default_config) + obj = Mock() + + obj.objects = [] + obj.get_relationships.return_value = [] + obj.title = "test/package/name/with/slash/" + writer.write([obj]) + + assert os.path.exists("test_package_name_with_slash_.dot") + # remove the generated file + os.remove("test_package_name_with_slash_.dot") From a8fe00a8ce2a5e78cc7ae30c7f706019c3dd2e1f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 2 Apr 2023 02:06:36 +0000 Subject: [PATCH 6/8] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/pyreverse/test_writer.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/pyreverse/test_writer.py b/tests/pyreverse/test_writer.py index 93542b7033..bd9b779eaa 100644 --- a/tests/pyreverse/test_writer.py +++ b/tests/pyreverse/test_writer.py @@ -208,6 +208,7 @@ def test_color_for_stdlib_module(default_config: PyreverseConfig) -> None: obj.node.qname.return_value = "collections" assert writer.get_shape_color(obj) == "grey" + # test to check the names of the generated files are corrected when using an incorrect character like "/" in the package name def test_package_name_with_slash(default_config: PyreverseConfig) -> None: writer = DiagramWriter(default_config) From ab737c34ee9d26443a9d39592b48a874b39df9a4 Mon Sep 17 00:00:00 2001 From: Alvaro Frias Garay Date: Sat, 1 Apr 2023 23:11:17 -0300 Subject: [PATCH 7/8] Correct precommit Signed-off-by: Alvaro Frias Garay --- tests/pyreverse/test_writer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/pyreverse/test_writer.py b/tests/pyreverse/test_writer.py index 93542b7033..6826c6cff9 100644 --- a/tests/pyreverse/test_writer.py +++ b/tests/pyreverse/test_writer.py @@ -208,7 +208,8 @@ def test_color_for_stdlib_module(default_config: PyreverseConfig) -> None: obj.node.qname.return_value = "collections" assert writer.get_shape_color(obj) == "grey" -# test to check the names of the generated files are corrected when using an incorrect character like "/" in the package name +# test to check the names of the generated files are corrected +# when using an incorrect character like "/" in the package name def test_package_name_with_slash(default_config: PyreverseConfig) -> None: writer = DiagramWriter(default_config) obj = Mock() From 26a288476e8285a5c91d4871ad3a0454a4ce85af Mon Sep 17 00:00:00 2001 From: Pierre Sassoulas Date: Sun, 2 Apr 2023 14:35:56 +0200 Subject: [PATCH 8/8] Apply suggestions from code review --- tests/pyreverse/test_writer.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/pyreverse/test_writer.py b/tests/pyreverse/test_writer.py index 8b08094cff..19262aa4cb 100644 --- a/tests/pyreverse/test_writer.py +++ b/tests/pyreverse/test_writer.py @@ -209,9 +209,10 @@ def test_color_for_stdlib_module(default_config: PyreverseConfig) -> None: assert writer.get_shape_color(obj) == "grey" -# test to check the names of the generated files are corrected -# when using an incorrect character like "/" in the package name def test_package_name_with_slash(default_config: PyreverseConfig) -> None: + """Test to check the names of the generated files are corrected + when using an incorrect character like "/" in the package name. + """ writer = DiagramWriter(default_config) obj = Mock()