Spaces:
Build error
Build error
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() |