Skip to content

Commit 6fe635e

Browse files
authored
PR: Change logger error calls to debug calls and catch exceptions when awaiting (Files) (#24984)
1 parent cda3e79 commit 6fe635e

File tree

1 file changed

+72
-46
lines changed

1 file changed

+72
-46
lines changed

spyder/plugins/explorer/widgets/remote_explorer.py

Lines changed: 72 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -336,15 +336,12 @@ def _on_clicked_item(self, index):
336336
elif data_type == "ACTION" and data_name == "FETCH_MORE":
337337
self.fetch_more_files()
338338

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}"
346344
QMessageBox.critical(self, error_title, error_message)
347-
logger.error(error)
348345

349346
@AsyncDispatcher.QtSlot
350347
def _on_remote_new_package(self, future, package_name):
@@ -371,9 +368,16 @@ async def _do_remote_new_module(self, new_path, file_content):
371368
self.sig_stop_spinner_requested.emit()
372369
return
373370

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
377381

378382
return remote_file_response
379383

@@ -394,10 +398,17 @@ async def _do_remote_new(
394398
self.sig_stop_spinner_requested.emit()
395399
return
396400

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
401412

402413
return response
403414

@@ -453,12 +464,19 @@ async def _do_remote_delete(self, path, is_file=False):
453464
self.sig_stop_spinner_requested.emit()
454465
return
455466

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
462480

463481
return response
464482

@@ -494,17 +512,17 @@ async def _do_remote_download_directory(self, path):
494512
zip_data.write(data)
495513
zip_data.seek(0)
496514
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+
)
497520
error_message = _(
498521
"An error occured while trying to download {path}".format(
499522
path=path
500523
)
501524
)
502525
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-
)
508526

509527
return zip_data.getbuffer()
510528

@@ -528,17 +546,17 @@ async def _do_remote_download_file(self, path):
528546
async for data in file_manager:
529547
file_data += data
530548
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+
)
531554
error_message = _(
532555
"An error occured while trying to download {path}".format(
533556
path=path
534557
)
535558
)
536559
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-
)
542560

543561
await file_manager.close()
544562
return file_data
@@ -564,22 +582,30 @@ async def _do_remote_upload_file(self, local_path):
564582
file_content = None
565583

566584
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+
)
578597

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
581608

582-
await file_manager.close()
583609
return remote_file_response
584610

585611
@AsyncDispatcher.QtSlot
@@ -641,7 +667,7 @@ async def _do_remote_ls(self, path, server_id):
641667

642668
except RemoteOSError as error:
643669
# TODO: Should the error be shown in some way?
644-
logger.error(error)
670+
logger.debug(error)
645671
except SpyderRemoteSessionClosed:
646672
self.remote_files_manager = None
647673

0 commit comments

Comments
 (0)