summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>2023-04-02 23:13:56 +0200
committerGitHub <noreply@github.com>2023-04-02 23:13:56 +0200
commit6dda042008e69419cdf52192ab699d97e48b05e3 (patch)
tree6b3ef094d9aee9ecb32b84173066a80e89c1f7d8
parent538c41b7044e8945a8bb6e58b44caef61fa062a3 (diff)
downloadpylint-git-6dda042008e69419cdf52192ab699d97e48b05e3.tar.gz
[pyreverse] Bugfix: strip "/" at the end of the file (#8517) (#8528)
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com> Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com> (cherry picked from commit 6ad17fb758361f50210f4cb5a4fd34494034f4e0) Co-authored-by: Alvaro Frias <alvaro.frias@eclypsium.com>
-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 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 <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 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")