@@ -336,15 +336,12 @@ def _on_clicked_item(self, index):
336
336
elif data_type == "ACTION" and data_name == "FETCH_MORE" :
337
337
self .fetch_more_files ()
338
338
339
- def _handle_future_response_error (self , future , error_title , error_message ):
340
- try :
341
- # Need to call `future.result()` to get any possible exception
342
- # generated over the remote server.
343
- future .result ()
344
- except (RemoteOSError , OSError ) as error :
345
- error_message = f"{ error_message } <br><br>{ error .message } "
339
+ def _handle_future_response_error (self , response , error_title , error_message ):
340
+ result = response .result ()
341
+ if isinstance (result , Exception ):
342
+ logger .debug (result )
343
+ error_message = f"{ error_message } <br><br>{ result .message } "
346
344
QMessageBox .critical (self , error_title , error_message )
347
- logger .error (error )
348
345
349
346
@AsyncDispatcher .QtSlot
350
347
def _on_remote_new_package (self , future , package_name ):
@@ -371,9 +368,16 @@ async def _do_remote_new_module(self, new_path, file_content):
371
368
self .sig_stop_spinner_requested .emit ()
372
369
return
373
370
374
- file_manager = await self .remote_files_manager .open (new_path , mode = "w" )
375
- remote_file_response = await file_manager .write (file_content )
376
- await file_manager .close ()
371
+ try :
372
+ file_manager = await self .remote_files_manager .open (new_path , mode = "w" )
373
+ remote_file_response = await file_manager .write (file_content )
374
+ await file_manager .close ()
375
+ except (RemoteOSError , OSError ) as error :
376
+ # Catch error raised when awaiting. The error will be available
377
+ # and will be shown when handling the result with the usage of
378
+ # `_handle_future_response_error`
379
+ # See spyder-ide/spyder#24974
380
+ remote_file_response = error
377
381
378
382
return remote_file_response
379
383
@@ -394,10 +398,17 @@ async def _do_remote_new(
394
398
self .sig_stop_spinner_requested .emit ()
395
399
return
396
400
397
- if for_file :
398
- response = await self .remote_files_manager .touch (new_path )
399
- else :
400
- response = await self .remote_files_manager .mkdir (new_path )
401
+ try :
402
+ if for_file :
403
+ response = await self .remote_files_manager .touch (new_path )
404
+ else :
405
+ response = await self .remote_files_manager .mkdir (new_path )
406
+ except (RemoteOSError , OSError ) as error :
407
+ # Catch error raised when awaiting. The error will be available
408
+ # and will be shown when handling the result with the usage of
409
+ # `_handle_future_response_error`
410
+ # See spyder-ide/spyder#24974
411
+ response = error
401
412
402
413
return response
403
414
@@ -453,12 +464,19 @@ async def _do_remote_delete(self, path, is_file=False):
453
464
self .sig_stop_spinner_requested .emit ()
454
465
return
455
466
456
- if is_file :
457
- response = await self .remote_files_manager .unlink (path )
458
- else :
459
- response = await self .remote_files_manager .rmdir (
460
- path , non_empty = True
461
- )
467
+ try :
468
+ if is_file :
469
+ response = await self .remote_files_manager .unlink (path )
470
+ else :
471
+ response = await self .remote_files_manager .rmdir (
472
+ path , non_empty = True
473
+ )
474
+ except (RemoteOSError , OSError ) as error :
475
+ # Catch error raised when awaiting. The error will be available
476
+ # and will be shown when handling the result with the usage of
477
+ # `_handle_future_response_error`
478
+ # See spyder-ide/spyder#24974
479
+ response = error
462
480
463
481
return response
464
482
@@ -494,17 +512,17 @@ async def _do_remote_download_directory(self, path):
494
512
zip_data .write (data )
495
513
zip_data .seek (0 )
496
514
except RemoteFileServicesError as download_error :
515
+ logger .debug (f"Unable to download { path } " )
516
+ logger .debug (
517
+ f"Error while trying to download directory (compressed): "
518
+ f"{ download_error .message } "
519
+ )
497
520
error_message = _ (
498
521
"An error occured while trying to download {path}" .format (
499
522
path = path
500
523
)
501
524
)
502
525
QMessageBox .critical (self , _ ("Download error" ), error_message )
503
- logger .debug (f"Unable to download { path } " )
504
- logger .error (
505
- f"Error while trying to download directory (compressed): "
506
- f"{ download_error .message } "
507
- )
508
526
509
527
return zip_data .getbuffer ()
510
528
@@ -528,17 +546,17 @@ async def _do_remote_download_file(self, path):
528
546
async for data in file_manager :
529
547
file_data += data
530
548
except RemoteFileServicesError as download_error :
549
+ logger .debug (f"Unable to download { path } " )
550
+ logger .debug (
551
+ f"Error while trying to download file: "
552
+ f"{ download_error .message } "
553
+ )
531
554
error_message = _ (
532
555
"An error occured while trying to download {path}" .format (
533
556
path = path
534
557
)
535
558
)
536
559
QMessageBox .critical (self , _ ("Download error" ), error_message )
537
- logger .debug (f"Unable to download { path } " )
538
- logger .error (
539
- f"Error while trying to download file: "
540
- f"{ download_error .message } "
541
- )
542
560
543
561
await file_manager .close ()
544
562
return file_data
@@ -564,22 +582,30 @@ async def _do_remote_upload_file(self, local_path):
564
582
file_content = None
565
583
566
584
try :
567
- with open (local_path , mode = "r" ) as local_file :
568
- file_content = local_file .read ()
569
- file_manager = await self .remote_files_manager .open (
570
- remote_file , mode = "w"
571
- )
572
- except UnicodeDecodeError :
573
- with open (local_path , mode = "rb" ) as local_file :
574
- file_content = local_file .read ()
575
- file_manager = await self .remote_files_manager .open (
576
- remote_file , mode = "wb"
577
- )
585
+ try :
586
+ with open (local_path , mode = "r" ) as local_file :
587
+ file_content = local_file .read ()
588
+ file_manager = await self .remote_files_manager .open (
589
+ remote_file , mode = "w"
590
+ )
591
+ except UnicodeDecodeError :
592
+ with open (local_path , mode = "rb" ) as local_file :
593
+ file_content = local_file .read ()
594
+ file_manager = await self .remote_files_manager .open (
595
+ remote_file , mode = "wb"
596
+ )
578
597
579
- if file_content :
580
- remote_file_response = await file_manager .write (file_content )
598
+ if file_content :
599
+ remote_file_response = await file_manager .write (file_content )
600
+
601
+ await file_manager .close ()
602
+ except (RemoteOSError , OSError ) as error :
603
+ # Catch error raised when awaiting. The error will be available
604
+ # and will be shown when handling the result with the usage of
605
+ # `_handle_future_response_error`
606
+ # See spyder-ide/spyder#24974
607
+ remote_file_response = error
581
608
582
- await file_manager .close ()
583
609
return remote_file_response
584
610
585
611
@AsyncDispatcher .QtSlot
@@ -641,7 +667,7 @@ async def _do_remote_ls(self, path, server_id):
641
667
642
668
except RemoteOSError as error :
643
669
# TODO: Should the error be shown in some way?
644
- logger .error (error )
670
+ logger .debug (error )
645
671
except SpyderRemoteSessionClosed :
646
672
self .remote_files_manager = None
647
673
0 commit comments