C2MV commited on
Commit
953dc0b
verified
1 Parent(s): 18d63b3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -33
app.py CHANGED
@@ -334,7 +334,7 @@ class PaperDownloader:
334
  def _download_single_doi(self, doi, progress_callback, cancel_event): # removed async keyword
335
  """Descargar un 煤nico DOI con retroalimentaci贸n de progreso"""
336
  if not doi:
337
- progress_callback(None, "Error: DOI no proporcionado", "Error: DOI no proporcionado")
338
  return None
339
  logger.info(f"Starting download process for DOI: {doi}")
340
 
@@ -356,29 +356,29 @@ class PaperDownloader:
356
 
357
  logger.info(f"Descarga exitosa: {filename}")
358
 
359
- progress_callback(filepath, f"Descargado exitosamente: <a href='https://doi.org/{doi}'>{doi}</a>", "")
360
 
361
 
362
  else:
363
  logger.warning(f"No se pudo descargar: {doi}")
364
- progress_callback(None, f"No se pudo descargar {doi}", f'<a href="https://doi.org/{doi}">{doi}</a>')
365
 
366
  asyncio.run(call_async()) #added the loop event here
367
 
368
  except CancelledError:
369
  logger.info(f"Download Cancelled DOI: {doi}")
370
- progress_callback(None, f"Download cancelled {doi}","Download Cancelled" )
371
 
372
  except Exception as e:
373
  logger.error(f"Error processing {doi}: {e}")
374
- progress_callback(None, f"Error processing {doi}: {e}", f"Error processing {doi}: {e}" )
375
 
376
 
377
  def download_multiple_dois(self, dois_text, progress_callback, cancel_event): #removed async here
378
  """Download multiple DOIs"""
379
  # Validar entrada
380
  if not dois_text:
381
- progress_callback(None, "Error: No DOIs provided", "Error: No DOIs provided",)
382
  return None
383
 
384
  # Sanitizar y filtrar DOIs
@@ -387,7 +387,7 @@ class PaperDownloader:
387
 
388
  # Validar lista de DOIs
389
  if not dois:
390
- progress_callback(None, "Error: No valid DOIs provided", "Error: No valid DOIs provided")
391
  return None
392
 
393
  # Listas para rastrear resultados
@@ -397,13 +397,13 @@ class PaperDownloader:
397
 
398
 
399
  for doi in dois:
400
- self._download_single_doi(doi, lambda a,b,c,d: progress_callback(a,b,c,d) , cancel_event ) # changed lambda
401
  if cancel_event.is_set():
402
  logger.info("Downloads cancelled on multiple dois download")
403
- progress_callback(None, "Downloads cancelled","Downloads cancelled", ) # early return on cancelled
404
  return None #break here when is cancelled
405
 
406
- result = self.results_dict.get(doi, (None,None,"")) # obtain from self.results
407
 
408
  # Manejar diferentes tipos de resultados
409
  if isinstance(result, Exception):
@@ -467,7 +467,7 @@ class PaperDownloader:
467
  bib_content = f.read()
468
  except Exception as e:
469
  logger.error(f"Error reading uploaded file {bib_file.name}: {e}")
470
- progress_callback(None, f"Error reading uploaded file {bib_file.name}: {e}", f"Error reading uploaded file {bib_file.name}: {e}" )
471
  return None
472
 
473
  # Parse BibTeX data
@@ -475,7 +475,7 @@ class PaperDownloader:
475
  bib_database = bibtexparser.loads(bib_content)
476
  except Exception as e:
477
  logger.error(f"Error parsing BibTeX data: {e}")
478
- progress_callback(None,f"Error parsing BibTeX data: {e}", f"Error parsing BibTeX data: {e}")
479
  return None
480
 
481
  # Extract DOIs
@@ -489,13 +489,13 @@ class PaperDownloader:
489
 
490
  for doi in dois:
491
 
492
- self._download_single_doi(doi, lambda a,b,c, d: progress_callback(a,b,c, d), cancel_event ) # changed lambda
493
  if cancel_event.is_set():
494
  logger.info("Download Cancelled in bibtex mode")
495
- progress_callback(None, "Download Cancelled", "Download Cancelled", )
496
  return None #cancel if requested
497
 
498
- result = self.results_dict.get(doi, (None,None,"")) # obtain from self.results
499
 
500
  if isinstance(result, Exception):
501
  # Excepci贸n inesperada
@@ -527,7 +527,7 @@ class PaperDownloader:
527
  loop.run_in_executor(self.executor, lambda: self.create_zip(zip_filename,downloaded_files))
528
  logger.info(f"ZIP file created: {zip_filename}")
529
 
530
- progress_callback(zip_filename, "\n".join(downloaded_links), "\n".join(failed_dois), "") # send 4 vars
531
  return
532
 
533
  def create_zip(self, zip_filename, files):
@@ -562,48 +562,49 @@ def create_gradio_interface():
562
 
563
  #store data for single or multiple mode on download_papers execution.
564
  if doi:
565
- downloader.results_dict[doi] = (filepath, message,fail_message)
566
 
567
- updates = update_progress(message, fail_message)
568
  return updates
569
 
570
  if bib_file:
571
  # Check file type
572
  if not bib_file.name.lower().endswith('.bib'):
573
- return None, "Error: Please upload a .bib file", "Error: Please upload a .bib file", "",""
574
 
575
  downloader.download_task = downloader.executor.submit(
576
  downloader.process_bibtex,
577
  bib_file,
578
- lambda a,b,c,d : update_progress(a,f"{b}<br>{c}"), #convert for ui output, the return data will contain the HTML
579
- cancel_event # Added cancelllation event.
580
  )
581
-
582
  return None,"","", "", None # output here correct
583
 
584
  elif doi_input:
585
 
586
- downloader.download_task = downloader.executor.submit( #changed async execution method
587
  downloader._download_single_doi,
588
- doi_input,
589
- lambda a,b,c,d: update_progress(a,f"{b}<br>{c}") , #callback function, format output and send html info, removed lambda from executor calls
590
  cancel_event # Add cancellation event.
591
- )
592
-
593
- return None, "","", "", None # output here correct
594
 
595
  elif dois_input:
596
- downloader.download_task = downloader.executor.submit( #changed async execution method
597
  downloader.download_multiple_dois,
598
  dois_input,
599
- lambda a,b,c,d: update_progress(a,f"{b}<br>{c}") ,#callback function
600
  cancel_event #Add cancellation event.
601
  )
602
-
603
- return None, "","", "", None #output here correct
 
604
 
605
  else:
606
- return None, "Please provide a .bib file, a single DOI, or a list of DOIs", "Please provide a .bib file, a single DOI, or a list of DOIs","", None #output here correct
607
 
608
 
609
  with gr.Blocks(theme="Hev832/Applio", css="""
 
334
  def _download_single_doi(self, doi, progress_callback, cancel_event): # removed async keyword
335
  """Descargar un 煤nico DOI con retroalimentaci贸n de progreso"""
336
  if not doi:
337
+ progress_callback(None, "Error: DOI no proporcionado", "Error: DOI no proporcionado","" )
338
  return None
339
  logger.info(f"Starting download process for DOI: {doi}")
340
 
 
356
 
357
  logger.info(f"Descarga exitosa: {filename}")
358
 
359
+ progress_callback(filepath, f"Descargado exitosamente: <a href='https://doi.org/{doi}'>{doi}</a>", "", None)
360
 
361
 
362
  else:
363
  logger.warning(f"No se pudo descargar: {doi}")
364
+ progress_callback(None, f"No se pudo descargar {doi}", f'<a href="https://doi.org/{doi}">{doi}</a>', None)
365
 
366
  asyncio.run(call_async()) #added the loop event here
367
 
368
  except CancelledError:
369
  logger.info(f"Download Cancelled DOI: {doi}")
370
+ progress_callback(None, f"Download cancelled {doi}","Download Cancelled", None )
371
 
372
  except Exception as e:
373
  logger.error(f"Error processing {doi}: {e}")
374
+ progress_callback(None, f"Error processing {doi}: {e}", f"Error processing {doi}: {e}", None )
375
 
376
 
377
  def download_multiple_dois(self, dois_text, progress_callback, cancel_event): #removed async here
378
  """Download multiple DOIs"""
379
  # Validar entrada
380
  if not dois_text:
381
+ progress_callback(None, "Error: No DOIs provided", "Error: No DOIs provided","",)
382
  return None
383
 
384
  # Sanitizar y filtrar DOIs
 
387
 
388
  # Validar lista de DOIs
389
  if not dois:
390
+ progress_callback(None, "Error: No valid DOIs provided", "Error: No valid DOIs provided", "")
391
  return None
392
 
393
  # Listas para rastrear resultados
 
397
 
398
 
399
  for doi in dois:
400
+ self._download_single_doi(doi, lambda a,b,c, d: progress_callback(a,b,c,d) , cancel_event )
401
  if cancel_event.is_set():
402
  logger.info("Downloads cancelled on multiple dois download")
403
+ progress_callback(None, "Downloads cancelled","Downloads cancelled","") # early return on cancelled
404
  return None #break here when is cancelled
405
 
406
+ result = self.results_dict.get(doi, (None,None,"",None)) # obtain from self.results
407
 
408
  # Manejar diferentes tipos de resultados
409
  if isinstance(result, Exception):
 
467
  bib_content = f.read()
468
  except Exception as e:
469
  logger.error(f"Error reading uploaded file {bib_file.name}: {e}")
470
+ progress_callback(None, f"Error reading uploaded file {bib_file.name}: {e}", f"Error reading uploaded file {bib_file.name}: {e}" , None)
471
  return None
472
 
473
  # Parse BibTeX data
 
475
  bib_database = bibtexparser.loads(bib_content)
476
  except Exception as e:
477
  logger.error(f"Error parsing BibTeX data: {e}")
478
+ progress_callback(None,f"Error parsing BibTeX data: {e}", f"Error parsing BibTeX data: {e}", None)
479
  return None
480
 
481
  # Extract DOIs
 
489
 
490
  for doi in dois:
491
 
492
+ self._download_single_doi(doi, lambda a,b,c,d: progress_callback(a,b,c,d), cancel_event )
493
  if cancel_event.is_set():
494
  logger.info("Download Cancelled in bibtex mode")
495
+ progress_callback(None, "Download Cancelled", "Download Cancelled", None)
496
  return None #cancel if requested
497
 
498
+ result = self.results_dict.get(doi, (None,None,"", None)) # obtain from self.results
499
 
500
  if isinstance(result, Exception):
501
  # Excepci贸n inesperada
 
527
  loop.run_in_executor(self.executor, lambda: self.create_zip(zip_filename,downloaded_files))
528
  logger.info(f"ZIP file created: {zip_filename}")
529
 
530
+ progress_callback(zip_filename, "\n".join(downloaded_links), "\n".join(failed_dois), "" ) # send 4 parameters to show on log.
531
  return
532
 
533
  def create_zip(self, zip_filename, files):
 
562
 
563
  #store data for single or multiple mode on download_papers execution.
564
  if doi:
565
+ downloader.results_dict[doi] = (filepath, message,fail_message, "")
566
 
567
+ updates = update_progress(message, fail_message) # sending 2
568
  return updates
569
 
570
  if bib_file:
571
  # Check file type
572
  if not bib_file.name.lower().endswith('.bib'):
573
+ return None, "Error: Please upload a .bib file", "Error: Please upload a .bib file", "", None
574
 
575
  downloader.download_task = downloader.executor.submit(
576
  downloader.process_bibtex,
577
  bib_file,
578
+ lambda a,b,c, d : update_progress(a,f"{b}<br>{c}"), #convert for ui output, the return data will contain the HTML, added d param since all now needs 4 parm
579
+ cancel_event # Added cancelllation event.
580
  )
581
+
582
  return None,"","", "", None # output here correct
583
 
584
  elif doi_input:
585
 
586
+ downloader.download_task = downloader.executor.submit( #changed async execution method
587
  downloader._download_single_doi,
588
+ doi_input,
589
+ lambda a,b,c, d: update_progress(a,f"{b}<br>{c}") , #callback function, format output and send html info, removed lambda from executor calls
590
  cancel_event # Add cancellation event.
591
+ )
592
+
593
+ return None, "","", "", None # output here correct
594
 
595
  elif dois_input:
596
+ downloader.download_task = downloader.executor.submit( #changed async execution method
597
  downloader.download_multiple_dois,
598
  dois_input,
599
+ lambda a,b,c, d : update_progress(a,f"{b}<br>{c}") ,#callback function
600
  cancel_event #Add cancellation event.
601
  )
602
+
603
+ return None, "","", "", None#output here correct
604
+
605
 
606
  else:
607
+ return None, "Please provide a .bib file, a single DOI, or a list of DOIs", "Please provide a .bib file, a single DOI, or a list of DOIs", "", None#output here correct
608
 
609
 
610
  with gr.Blocks(theme="Hev832/Applio", css="""