diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index 98de5b2b1eb84..d0f32bb554cf9 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -19,6 +19,7 @@ import importlib import json import os +import subprocess import sys import tempfile from typing import ( @@ -26,8 +27,6 @@ Optional, ) -import flake8.main.application - try: from io import StringIO except ImportError: @@ -183,20 +182,21 @@ def validate_pep8(self): ) ) - application = flake8.main.application.Application() - application.initialize(["--quiet"]) - + error_messages = [] with tempfile.NamedTemporaryFile(mode="w", encoding="utf-8") as file: file.write(content) file.flush() - application.run_checks([file.name]) + cmd = ["python", "-m", "flake8", "--quiet", "--statistics", file.name] + response = subprocess.run(cmd, capture_output=True, text=True) + stdout = response.stdout + stdout = stdout.replace(file.name, "") + messages = stdout.strip("\n") + if messages: + error_messages.append(messages) - # We need this to avoid flake8 printing the names of the files to - # the standard output - application.formatter.write = lambda line, source: None - application.report() - - yield from application.guide.stats.statistics_for("") + for error_message in error_messages: + error_count, error_code, message = error_message.split(maxsplit=2) + yield error_code, message, int(error_count) def pandas_validate(func_name: str): @@ -240,13 +240,15 @@ def pandas_validate(func_name: str): result["errors"].append( pandas_error("EX02", doctest_log=result["examples_errs"]) ) - for err in doc.validate_pep8(): + + for error_code, error_message, error_count in doc.validate_pep8(): + times_happening = f" ({error_count} times)" if error_count > 1 else "" result["errors"].append( pandas_error( "EX03", - error_code=err.error_code, - error_message=err.message, - times_happening=f" ({err.count} times)" if err.count > 1 else "", + error_code=error_code, + error_message=error_message, + times_happening=times_happening, ) ) examples_source_code = "".join(doc.examples_source_code)