From 6dda042008e69419cdf52192ab699d97e48b05e3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 2 Apr 2023 23:13:56 +0200 Subject: [pyreverse] Bugfix: strip "/" at the end of the file (#8517) (#8528) Signed-off-by: Alvaro Frias Garay Co-authored-by: Pierre Sassoulas (cherry picked from commit 6ad17fb758361f50210f4cb5a4fd34494034f4e0) Co-authored-by: Alvaro Frias --- doc/whatsnew/fragments/8504.bugfix | 3 +++ pylint/pyreverse/writer.py | 2 +- tests/pyreverse/test_writer.py | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) 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 000000000..2b54ac7b6 --- /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 diff --git a/pylint/pyreverse/writer.py b/pylint/pyreverse/writer.py index 3d0a4613a..d92f4e2e5 100644 --- a/pylint/pyreverse/writer.py +++ b/pylint/pyreverse/writer.py @@ -41,7 +41,7 @@ class DiagramWriter: 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().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) diff --git a/tests/pyreverse/test_writer.py b/tests/pyreverse/test_writer.py index 805f8fab5..0bf92d918 100644 --- a/tests/pyreverse/test_writer.py +++ b/tests/pyreverse/test_writer.py @@ -223,3 +223,20 @@ 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" + + +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() + + 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") -- cgit v1.2.1