Spaces:
Configuration error
Configuration error
| # app.py | |
| import gradio as gr | |
| import logging # Import logging | |
| import sys # Import sys | |
| # Removed imports: pandas, openpyxl, datetime, timedelta, os, tempfile | |
| # Import the processing function from main.py | |
| from main import process_files | |
| # Configure logging (consistent with main.py) | |
| # Note: If main.py is imported, its basicConfig might already run. | |
| # Re-configuring here ensures app.py specific logs also follow the format. | |
| # Using getLogger and adding handler might be more robust in complex scenarios, | |
| # but basicConfig is often sufficient for simpler apps. | |
| logging.basicConfig(level=logging.INFO, | |
| format='%(asctime)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s', | |
| stream=sys.stderr) | |
| def generate_report(file1_obj, file2_obj): | |
| """ | |
| Gradio wrapper function to handle file uploads and call the main processing logic. | |
| Args: | |
| file1_obj: Gradio File object for the first input file. | |
| file2_obj: Gradio File object for the second input file. | |
| Returns: | |
| str: Path to the generated output Excel file if successful. | |
| Raises: | |
| gr.Error: If file processing fails. | |
| """ | |
| logging.info("generate_report function called by Gradio.") | |
| if file1_obj is None or file2_obj is None: | |
| logging.error("One or both files were not provided.") | |
| raise gr.Error("Please upload both required files.") | |
| try: | |
| # Gradio provides temporary paths for uploaded files | |
| file1_path = file1_obj.name | |
| file2_path = file2_obj.name | |
| logging.info(f"Input file paths received: file1='{file1_path}', file2='{file2_path}'") | |
| # Define the output filename (can be customized if needed) | |
| output_filename = "generated_report.xlsx" | |
| logging.info(f"Target output base filename: {output_filename}") | |
| # Call the core processing logic from main.py | |
| logging.info(f"Calling main.process_files...") | |
| result_path = process_files(file1_path, file2_path, output_filename) | |
| logging.info(f"main.process_files returned: '{result_path}'") | |
| if result_path: | |
| # Return the path of the generated file for Gradio to serve | |
| logging.info(f"Report generation successful. Returning path: {result_path}") | |
| return result_path | |
| else: | |
| # If process_files returned None, it means an error occurred (already logged in main.py) | |
| logging.error("main.process_files indicated failure (returned None).") | |
| raise gr.Error("Failed to generate the report. Check application logs for details.") | |
| except Exception as e: | |
| # Catch any other unexpected errors during the wrapper execution | |
| # Log the exception with traceback before raising Gradio error | |
| logging.exception(f"An unexpected error occurred in the Gradio wrapper (generate_report): {e}") | |
| raise gr.Error(f"An unexpected error occurred. Check application logs.") | |
| # Create Gradio Interface | |
| inputs = [ | |
| gr.File(label="上传数据源文件 (类似 1.xls)"), | |
| gr.File(label="上传模板文件 (类似 2.xlsx)") | |
| ] | |
| outputs = gr.File(label="下载生成的报告") | |
| title = "Quality Inspection Report Generator" # Use English title | |
| description = "Upload the data source file and template file to generate the combined quality inspection report." # Use English description | |
| # Ensure interface runs on the default port 7860 | |
| # share=False is default and recommended for custom deployments | |
| # server_name="0.0.0.0" makes it accessible within the container/network | |
| demo = gr.Interface( | |
| fn=generate_report, | |
| inputs=inputs, | |
| outputs=outputs, | |
| title=title, | |
| description=description, | |
| allow_flagging='never' # Disable flagging | |
| ) | |
| if __name__ == "__main__": | |
| # Setup logging for direct script execution as well | |
| logging.basicConfig(level=logging.INFO, | |
| format='%(asctime)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s', | |
| stream=sys.stderr) | |
| logging.info("Starting Gradio application...") | |
| # Launch the Gradio app | |
| demo.launch(server_name="0.0.0.0") # Port defaults to 7860 |