summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJouke Witteveen <j.witteveen@cosine.nl>2021-05-10 15:47:20 +0200
committerJouke Witteveen <j.witteveen@cosine.nl>2021-05-10 16:41:01 +0200
commitefc15cf4f10ad45f88bda1cb6578b9ef7a06cd8d (patch)
treedd6d5049906e7471b6739e6d3244081fbee06b05
parent28aa67314e2c451002d6362c54aed6e08f4f9f19 (diff)
downloadflake8-efc15cf4f10ad45f88bda1cb6578b9ef7a06cd8d.tar.gz
Automatically create output directories
-rw-r--r--src/flake8/formatting/base.py3
-rw-r--r--tests/integration/test_main.py4
2 files changed, 5 insertions, 2 deletions
diff --git a/src/flake8/formatting/base.py b/src/flake8/formatting/base.py
index e362e65..806d9b8 100644
--- a/src/flake8/formatting/base.py
+++ b/src/flake8/formatting/base.py
@@ -1,5 +1,6 @@
"""The base class and interface for all formatting plugins."""
import argparse
+import os
from typing import IO
from typing import List
from typing import Optional
@@ -76,6 +77,8 @@ class BaseFormatter:
This defaults to initializing :attr:`output_fd` if :attr:`filename`
"""
if self.filename:
+ dirname = os.path.dirname(os.path.abspath(self.filename))
+ os.makedirs(dirname, exist_ok=True)
self.output_fd = open(self.filename, "a")
def handle(self, error: "Violation") -> None:
diff --git a/tests/integration/test_main.py b/tests/integration/test_main.py
index 5c99d3c..16ecba0 100644
--- a/tests/integration/test_main.py
+++ b/tests/integration/test_main.py
@@ -343,10 +343,10 @@ def test_output_file(tmpdir, capsys):
tmpdir.join("t.py").write("import os\n")
with tmpdir.as_cwd():
- _call_main(["t.py", "--output-file=f"], retv=1)
+ _call_main(["t.py", "--output-file=a/b/f"], retv=1)
out, err = capsys.readouterr()
assert out == err == ""
expected = "t.py:1:1: F401 'os' imported but unused\n"
- assert tmpdir.join("f").read() == expected
+ assert tmpdir.join("a/b/f").read() == expected