bluenevus commited on
Commit
6317bb9
·
1 Parent(s): bc99305

Update app.py via AI Editor

Browse files
Files changed (1) hide show
  1. app.py +26 -36
app.py CHANGED
@@ -142,13 +142,7 @@ server = app.server
142
  app.title = "Intelligent PDF Splitter"
143
 
144
  def get_split_results_placeholder():
145
- # Always render split-btn (disabled) so Dash Input/Output registration never fails
146
- return dbc.Row([
147
- dbc.Col(
148
- dbc.Button("Split PDF", id='split-btn', color='primary', className='mb-3 mt-2', n_clicks=0, style={'width': '180px', 'fontWeight': 'bold'}, disabled=True),
149
- width=12, style={'display': 'flex', 'justifyContent': 'center'}
150
- )
151
- ])
152
 
153
  app.layout = dbc.Container(
154
  [
@@ -178,6 +172,12 @@ app.layout = dbc.Container(
178
  accept='.pdf'
179
  ),
180
  html.Div(id='file-info', className='mb-4'),
 
 
 
 
 
 
181
  dbc.Button("Clear Session", id='clear-session', color='secondary', className='mt-2 mb-2'),
182
  dcc.Loading(
183
  id="loading", type="default",
@@ -199,6 +199,7 @@ app.layout = dbc.Container(
199
 
200
  @app.callback(
201
  Output('file-info', 'children'),
 
202
  Output('split-results', 'children'),
203
  Output('session-store', 'data'),
204
  Input('upload-pdf', 'contents'),
@@ -223,7 +224,7 @@ def handle_upload(contents, filename, clear_n, delete_upload_n_list, split_n, se
223
  if trigger == 'clear-session':
224
  clean_session(session_id)
225
  resp_data = {}
226
- return "", get_split_results_placeholder(), resp_data
227
 
228
  # Handle Delete Upload (detect ANY delete button press)
229
  delete_pressed = False
@@ -242,15 +243,15 @@ def handle_upload(contents, filename, clear_n, delete_upload_n_list, split_n, se
242
  if os.path.exists(session_dir):
243
  for file in os.listdir(session_dir):
244
  os.remove(os.path.join(session_dir, file))
245
- return "", get_split_results_placeholder(), {}
246
 
247
  # Handle Upload
248
  if trigger == 'upload-pdf':
249
  if not contents:
250
- return "", get_split_results_placeholder(), {}
251
 
252
  if not allowed_file(filename):
253
- return html.Div("Only .pdf files are allowed.", style={'color': 'red'}), get_split_results_placeholder(), {}
254
 
255
  try:
256
  header, b64data = contents.split(',', 1)
@@ -272,16 +273,10 @@ def handle_upload(contents, filename, clear_n, delete_upload_n_list, split_n, se
272
  width=3, style={'display': 'flex', 'justifyContent': 'end'}
273
  )
274
  ], className='mb-3', align='center', style={'marginTop': "15px", 'marginBottom': '25px'})
275
- split_results = dbc.Row([
276
- dbc.Col(
277
- dbc.Button("Split PDF", id='split-btn', color='primary', className='mb-3 mt-2', n_clicks=0, style={'width': '180px', 'fontWeight': 'bold'}),
278
- width=12, style={'display': 'flex', 'justifyContent': 'center'}
279
- )
280
- ])
281
- return file_info, split_results, session_data
282
  except Exception as e:
283
  logging.error(f"Error processing PDF: {e}")
284
- return html.Div(f"Error: {e}", style={'color': 'red'}), get_split_results_placeholder(), {}
285
 
286
  # Restore after upload (before split)
287
  if session_data.get('orig_filename') and not session_data.get('split_files'):
@@ -292,23 +287,18 @@ def handle_upload(contents, filename, clear_n, delete_upload_n_list, split_n, se
292
  width=3, style={'display': 'flex', 'justifyContent': 'end'}
293
  )
294
  ], className='mb-3', align='center', style={'marginTop': "15px", 'marginBottom': '25px'})
295
- split_results = dbc.Row([
296
- dbc.Col(
297
- dbc.Button("Split PDF", id='split-btn', color='primary', className='mb-3 mt-2', n_clicks=0, style={'width': '180px', 'fontWeight': 'bold'}),
298
- width=12, style={'display': 'flex', 'justifyContent': 'center'}
299
- )
300
- ])
301
- return file_info, split_results, session_data
302
 
303
  # Handle Split
304
  if trigger == 'split-btn':
305
  orig_filename = session_data.get('orig_filename')
306
  if not orig_filename:
307
- return html.Div("No file to split.", style={'color': 'red'}), get_split_results_placeholder(), session_data
308
  pdf_path = os.path.join(session_dir, orig_filename)
309
  if not os.path.exists(pdf_path):
310
- return html.Div("Uploaded file not found. Please upload again.", style={'color': 'red'}), get_split_results_placeholder(), {}
311
  try:
 
312
  with lock:
313
  split_files = intelligent_pdf_split(pdf_path, session_dir)
314
  zip_path = make_zip_of_splits(split_files, session_dir)
@@ -330,16 +320,16 @@ def handle_upload(contents, filename, clear_n, delete_upload_n_list, split_n, se
330
  "Download All (ZIP)", color="primary", size="lg", className='mb-3 mt-4',
331
  href=f"/download_zip/{session_id}/split_files.zip"
332
  )
333
- results = [
334
  html.H5("Split Files:"),
335
  split_files_list,
336
  html.Div(download_zip_btn, style={'marginTop': '30px'})
337
- ]
338
  logging.info(f"PDF split into {len(split_files)} chunks for session {session_id}, zip ready.")
339
- return file_info, results, session_data
340
  except Exception as e:
341
  logging.error(f"Error splitting PDF: {e}")
342
- return html.Div(f"Error: {e}", style={'color': 'red'}), get_split_results_placeholder(), session_data
343
 
344
  # Restore after split
345
  if session_data.get('split_files'):
@@ -361,14 +351,14 @@ def handle_upload(contents, filename, clear_n, delete_upload_n_list, split_n, se
361
  "Download All (ZIP)", color="primary", size="lg", className='mb-3 mt-4',
362
  href=f"/download_zip/{session_id}/split_files.zip"
363
  )
364
- results = [
365
  html.H5("Split Files:"),
366
  split_files_list,
367
  html.Div(download_zip_btn, style={'marginTop': '30px'})
368
- ]
369
- return file_info, results, session_data
370
 
371
- return "", get_split_results_placeholder(), session_data
372
 
373
  @app.server.route('/download_zip/<session_id>/<filename>')
374
  def download_zip_file(session_id, filename):
 
142
  app.title = "Intelligent PDF Splitter"
143
 
144
  def get_split_results_placeholder():
145
+ return html.Div("", id="split-results-inner")
 
 
 
 
 
 
146
 
147
  app.layout = dbc.Container(
148
  [
 
172
  accept='.pdf'
173
  ),
174
  html.Div(id='file-info', className='mb-4'),
175
+ dbc.Button(
176
+ "Split PDF", id='split-btn',
177
+ color='primary', className='mb-3 mt-2',
178
+ n_clicks=0, style={'width': '180px', 'fontWeight': 'bold'},
179
+ disabled=True
180
+ ),
181
  dbc.Button("Clear Session", id='clear-session', color='secondary', className='mt-2 mb-2'),
182
  dcc.Loading(
183
  id="loading", type="default",
 
199
 
200
  @app.callback(
201
  Output('file-info', 'children'),
202
+ Output('split-btn', 'disabled'),
203
  Output('split-results', 'children'),
204
  Output('session-store', 'data'),
205
  Input('upload-pdf', 'contents'),
 
224
  if trigger == 'clear-session':
225
  clean_session(session_id)
226
  resp_data = {}
227
+ return "", True, get_split_results_placeholder(), resp_data
228
 
229
  # Handle Delete Upload (detect ANY delete button press)
230
  delete_pressed = False
 
243
  if os.path.exists(session_dir):
244
  for file in os.listdir(session_dir):
245
  os.remove(os.path.join(session_dir, file))
246
+ return "", True, get_split_results_placeholder(), {}
247
 
248
  # Handle Upload
249
  if trigger == 'upload-pdf':
250
  if not contents:
251
+ return "", True, get_split_results_placeholder(), {}
252
 
253
  if not allowed_file(filename):
254
+ return html.Div("Only .pdf files are allowed.", style={'color': 'red'}), True, get_split_results_placeholder(), {}
255
 
256
  try:
257
  header, b64data = contents.split(',', 1)
 
273
  width=3, style={'display': 'flex', 'justifyContent': 'end'}
274
  )
275
  ], className='mb-3', align='center', style={'marginTop': "15px", 'marginBottom': '25px'})
276
+ return file_info, False, get_split_results_placeholder(), session_data
 
 
 
 
 
 
277
  except Exception as e:
278
  logging.error(f"Error processing PDF: {e}")
279
+ return html.Div(f"Error: {e}", style={'color': 'red'}), True, get_split_results_placeholder(), {}
280
 
281
  # Restore after upload (before split)
282
  if session_data.get('orig_filename') and not session_data.get('split_files'):
 
287
  width=3, style={'display': 'flex', 'justifyContent': 'end'}
288
  )
289
  ], className='mb-3', align='center', style={'marginTop': "15px", 'marginBottom': '25px'})
290
+ return file_info, False, get_split_results_placeholder(), session_data
 
 
 
 
 
 
291
 
292
  # Handle Split
293
  if trigger == 'split-btn':
294
  orig_filename = session_data.get('orig_filename')
295
  if not orig_filename:
296
+ return html.Div("No file to split.", style={'color': 'red'}), True, get_split_results_placeholder(), session_data
297
  pdf_path = os.path.join(session_dir, orig_filename)
298
  if not os.path.exists(pdf_path):
299
+ return html.Div("Uploaded file not found. Please upload again.", style={'color': 'red'}), True, get_split_results_placeholder(), {}
300
  try:
301
+ logging.info(f"Splitting PDF for session {session_id} on user request.")
302
  with lock:
303
  split_files = intelligent_pdf_split(pdf_path, session_dir)
304
  zip_path = make_zip_of_splits(split_files, session_dir)
 
320
  "Download All (ZIP)", color="primary", size="lg", className='mb-3 mt-4',
321
  href=f"/download_zip/{session_id}/split_files.zip"
322
  )
323
+ results = html.Div([
324
  html.H5("Split Files:"),
325
  split_files_list,
326
  html.Div(download_zip_btn, style={'marginTop': '30px'})
327
+ ], id="split-results-inner")
328
  logging.info(f"PDF split into {len(split_files)} chunks for session {session_id}, zip ready.")
329
+ return file_info, False, results, session_data
330
  except Exception as e:
331
  logging.error(f"Error splitting PDF: {e}")
332
+ return html.Div(f"Error: {e}", style={'color': 'red'}), False, get_split_results_placeholder(), session_data
333
 
334
  # Restore after split
335
  if session_data.get('split_files'):
 
351
  "Download All (ZIP)", color="primary", size="lg", className='mb-3 mt-4',
352
  href=f"/download_zip/{session_id}/split_files.zip"
353
  )
354
+ results = html.Div([
355
  html.H5("Split Files:"),
356
  split_files_list,
357
  html.Div(download_zip_btn, style={'marginTop': '30px'})
358
+ ], id="split-results-inner")
359
+ return file_info, False, results, session_data
360
 
361
+ return "", True, get_split_results_placeholder(), session_data
362
 
363
  @app.server.route('/download_zip/<session_id>/<filename>')
364
  def download_zip_file(session_id, filename):