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
    )