summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/whatsnew/fragments/8504.bugfix3
-rw-r--r--pylint/pyreverse/writer.py2
-rw-r--r--tests/pyreverse/test_writer.py17
3 files changed, 21 insertions, 1 deletions
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 b5cab0a66..58e967115 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 <project> according to <diadefs>."""
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 37a4b4f19..72f643c4a 100644
--- a/tests/pyreverse/test_writer.py
+++ b/tests/pyreverse/test_writer.py
@@ -225,3 +225,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")