Spaces:
Paused
Paused
| import gradio as gr | |
| from flake8.api import legacy as flake8 | |
| import autopep8 | |
| def lint_code(code: str) -> tuple[str, str]: | |
| """ | |
| Lint the provided Python code using Flake8 and auto-fix it with autopep8. | |
| Returns the fixed code and the linting report. | |
| """ | |
| # Run Flake8 for linting, ignoring line-length violations (E501) | |
| style_guide = flake8.get_style_guide(ignore=["E501"]) | |
| report = style_guide.check_files(None, lines=code.splitlines()) | |
| # Auto-fix the code with autopep8 | |
| fixed_code = autopep8.fix_code(code) | |
| # Generate the linting report | |
| lint_report = "\n".join(msg for msg in report.get_statistics()) | |
| return fixed_code, lint_report | |
| def process_file(file) -> tuple[str, str]: | |
| """ | |
| Process the uploaded file, decode its content, and lint it. | |
| Returns the fixed code and linting report. | |
| """ | |
| # Read the file content and decode it to a string | |
| code = file.read().decode("utf-8") | |
| # Lint the code and get the report | |
| return lint_code(code) | |
| def handle_input(code: str, file) -> tuple[str, str]: | |
| """ | |
| Handle both code inputs: either text or file. | |
| If a file is provided, process the file. Otherwise, process the pasted code. | |
| """ | |
| if file: | |
| return process_file(file) | |
| return lint_code(code) | |
| # Create the Gradio interface | |
| interface = gr.Interface( | |
| fn=handle_input, | |
| inputs=[ | |
| gr.Textbox(lines=20, placeholder="Paste your Python code here...", label="Python Code"), | |
| gr.File(label="Upload a Python (.py) file", file_types=[".py"]) | |
| ], | |
| outputs=[ | |
| gr.Textbox(label="Linted Code", lines=20), | |
| gr.Textbox(label="Linting Report") | |
| ], | |
| title="Python Code Linter", | |
| description="Paste your Python code or upload a .py file to get a Flake8-compliant, linted version." | |
| ) | |
| # Launch the interface | |
| interface.launch() |