diff --git a/doc/whatsnew/fragments/8504.bugfix b/doc/whatsnew/fragments/8504.bugfix new file mode 100644 index 0000000000..2b54ac7b65 --- /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 3d0a4613ab..d92f4e2e56 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().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 805f8fab59..0bf92d9180 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")