File size: 2,971 Bytes
7f823bb 364e0ba bea5394 7f823bb 364e0ba 383775a 364e0ba 93ea2db 383775a 6f96666 383775a bea5394 383775a 364e0ba 383775a d37148b 6f96666 bea5394 383775a 6f96666 383775a 4dd18db 6f96666 bea5394 6f96666 bea5394 a0e200f 364e0ba 3cee98d cd54087 364e0ba 383775a 364e0ba 383775a 364e0ba 383775a 364e0ba 383775a 93ea2db 6f96666 383775a 364e0ba 383775a 364e0ba 383775a f497fbd 383775a 6f96666 93ea2db 6f96666 bea5394 6f96666 383775a 6f96666 93ea2db 6f96666 bea5394 93ea2db 383775a 93ea2db 383775a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# app.py
import json
import traceback
import tempfile
import os
import gradio as gr
from typing import Tuple, Optional, Any # Added Any for file_data_binary
# Import config first to ensure JAVA_HOME is set early
import config
from main_analyzer import analyze_pdf
# Import language_tool_python only for the test in __main__ if needed
# import language_tool_python
def process_upload(file_data_binary: Optional[Any]) -> Tuple[str, Optional[str]]:
if file_data_binary is None or not hasattr(file_data_binary, 'read'):
if isinstance(file_data_binary, bytes):
pass # Good, it's bytes
elif file_data_binary is None:
return json.dumps({"error": "No file uploaded or file data is None"}, indent=2), None
elif not hasattr(file_data_binary, 'read'):
return json.dumps({"error": f"Unexpected file data type: {type(file_data_binary)}"}), None
try:
print(f"App: Processing uploaded file...")
results_dict, _ = analyze_pdf(file_data_binary)
results_json = json.dumps(results_dict, indent=2, ensure_ascii=False)
return results_json, None
except Exception as e:
print(f"Error in process_upload: {e}\n{traceback.format_exc()}")
error_message = json.dumps({"error": str(e), "traceback": traceback.format_exc()}, indent=2)
return error_message, None
def create_interface():
with gr.Blocks(title="PDF Analyzer") as interface:
with gr.Row():
file_input = gr.File(
label="Upload PDF",
file_types=[".pdf"],
type="binary"
)
with gr.Row():
analyze_btn = gr.Button("Analyze PDF")
with gr.Row():
results_output = gr.JSON(
label="Analysis Results",
show_label=True
)
pdf_output = gr.File(
label="Annotated PDF (Placeholder - View Coordinates in JSON)",
show_label=True,
interactive=False
)
analyze_btn.click(
fn=process_upload,
inputs=[file_input],
outputs=[results_output, pdf_output]
)
return interface
if __name__ == "__main__":
print("\n--- Launching Gradio Interface ---")
# config.set_java_home() is called when config.py is imported.
# Optional: Test LanguageTool initialization
try:
import language_tool_python
lt_test = language_tool_python.LanguageTool('en-US')
lt_test.close()
print("App: LanguageTool initialized successfully for test.")
except Exception as lt_e:
print(f"App: Warning: Could not initialize LanguageTool for test. Language checks might fail: {lt_e}")
print("Please ensure Java is installed and JAVA_HOME is correctly set (see config.py).")
app_interface = create_interface()
app_interface.launch(
share=False,
# server_port=7860
)
|