Update app.py
Browse files
app.py
CHANGED
@@ -14,13 +14,16 @@ logger = logging.getLogger(__name__)
|
|
14 |
|
15 |
def process_files(*uploaded_files):
|
16 |
"""Process uploaded CSV files and generate dashboard outputs."""
|
17 |
-
logger.info(f"Received {len(uploaded_files)} uploaded files
|
18 |
-
|
19 |
-
|
|
|
|
|
|
|
20 |
|
21 |
try:
|
22 |
# Load data
|
23 |
-
df = load_logs(
|
24 |
logger.info(f"Loaded {len(df)} log records from uploaded files.")
|
25 |
|
26 |
# Log table
|
@@ -48,16 +51,17 @@ def process_files(*uploaded_files):
|
|
48 |
return f"Error: {e}", None, None, None, None
|
49 |
|
50 |
def generate_pdf_report(df):
|
51 |
-
"""Generate and return path to PDF report."""
|
52 |
if df is None:
|
53 |
-
|
|
|
54 |
logger.info("Generating PDF report...")
|
55 |
try:
|
56 |
pdf_path = generate_pdf(df)
|
57 |
-
return pdf_path
|
58 |
except Exception as e:
|
59 |
logger.error(f"Failed to generate PDF: {e}")
|
60 |
-
return f"Error generating PDF: {e}"
|
61 |
|
62 |
with gr.Blocks(title="Multi-Device LabOps Dashboard") as demo:
|
63 |
gr.Markdown("# π Multi-Device LabOps Dashboard")
|
@@ -87,6 +91,7 @@ with gr.Blocks(title="Multi-Device LabOps Dashboard") as demo:
|
|
87 |
with gr.Row():
|
88 |
pdf_btn = gr.Button("π Generate PDF Report")
|
89 |
pdf_output = gr.File(label="Download PDF Report")
|
|
|
90 |
|
91 |
# State to store dataframe
|
92 |
df_state = gr.State()
|
@@ -101,7 +106,7 @@ with gr.Blocks(title="Multi-Device LabOps Dashboard") as demo:
|
|
101 |
pdf_btn.click(
|
102 |
fn=generate_pdf_report,
|
103 |
inputs=[df_state],
|
104 |
-
outputs=[pdf_output]
|
105 |
)
|
106 |
|
107 |
if __name__ == "__main__":
|
|
|
14 |
|
15 |
def process_files(*uploaded_files):
|
16 |
"""Process uploaded CSV files and generate dashboard outputs."""
|
17 |
+
logger.info(f"Received {len(uploaded_files)} uploaded files: {uploaded_files}")
|
18 |
+
# Filter out None values and ensure we have valid files
|
19 |
+
valid_files = [f for f in uploaded_files if f is not None]
|
20 |
+
if not valid_files:
|
21 |
+
logger.warning("No valid files uploaded.")
|
22 |
+
return "Please upload at least one valid CSV file.", None, None, None, None
|
23 |
|
24 |
try:
|
25 |
# Load data
|
26 |
+
df = load_logs(valid_files)
|
27 |
logger.info(f"Loaded {len(df)} log records from uploaded files.")
|
28 |
|
29 |
# Log table
|
|
|
51 |
return f"Error: {e}", None, None, None, None
|
52 |
|
53 |
def generate_pdf_report(df):
|
54 |
+
"""Generate and return path to PDF report, with error message if applicable."""
|
55 |
if df is None:
|
56 |
+
logger.warning("No data available for PDF generation.")
|
57 |
+
return None, "Please upload CSV files first."
|
58 |
logger.info("Generating PDF report...")
|
59 |
try:
|
60 |
pdf_path = generate_pdf(df)
|
61 |
+
return pdf_path, "PDF generated successfully."
|
62 |
except Exception as e:
|
63 |
logger.error(f"Failed to generate PDF: {e}")
|
64 |
+
return None, f"Error generating PDF: {e}"
|
65 |
|
66 |
with gr.Blocks(title="Multi-Device LabOps Dashboard") as demo:
|
67 |
gr.Markdown("# π Multi-Device LabOps Dashboard")
|
|
|
91 |
with gr.Row():
|
92 |
pdf_btn = gr.Button("π Generate PDF Report")
|
93 |
pdf_output = gr.File(label="Download PDF Report")
|
94 |
+
pdf_message = gr.Textbox(label="PDF Generation Status")
|
95 |
|
96 |
# State to store dataframe
|
97 |
df_state = gr.State()
|
|
|
106 |
pdf_btn.click(
|
107 |
fn=generate_pdf_report,
|
108 |
inputs=[df_state],
|
109 |
+
outputs=[pdf_output, pdf_message]
|
110 |
)
|
111 |
|
112 |
if __name__ == "__main__":
|