Error handling, better code quality.
Handling of os errors raised during parent directory creation.
This commit is contained in:
parent
630384e07f
commit
5215321e64
@ -139,7 +139,7 @@ def create_full_filename(basename, filename):
|
|||||||
filename = utils.force_encoding(filename, encoding)
|
filename = utils.force_encoding(filename, encoding)
|
||||||
basename = utils.force_encoding(basename, encoding)
|
basename = utils.force_encoding(basename, encoding)
|
||||||
if os.path.isabs(filename) and (os.path.isdir(filename) or
|
if os.path.isabs(filename) and (os.path.isdir(filename) or
|
||||||
os.path.join(filename, "") == filename):
|
filename.endswith(os.sep)):
|
||||||
# We got an absolute directory from the user, so we save it under
|
# We got an absolute directory from the user, so we save it under
|
||||||
# the default filename in that directory.
|
# the default filename in that directory.
|
||||||
return os.path.join(filename, basename)
|
return os.path.join(filename, basename)
|
||||||
@ -606,6 +606,11 @@ class AbstractDownloadItem(QObject):
|
|||||||
"""Ask a confirmation question for the download."""
|
"""Ask a confirmation question for the download."""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def _ask_create_parent_question(self, title, msg,
|
||||||
|
force_overwrite, remember_directory):
|
||||||
|
"""Ask a confirmation question for the parent directory."""
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
def _set_fileobj(self, fileobj, *, autoclose=True):
|
def _set_fileobj(self, fileobj, *, autoclose=True):
|
||||||
"""Set a file object to save the download to.
|
"""Set a file object to save the download to.
|
||||||
|
|
||||||
@ -683,11 +688,10 @@ class AbstractDownloadItem(QObject):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
os.makedirs(os.path.dirname(self._filename))
|
os.makedirs(os.path.dirname(self._filename))
|
||||||
|
except FileExistsError:
|
||||||
|
pass
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
# Unlikely, but could be created before
|
self._die(e.strerror)
|
||||||
# we get a chance to create it.
|
|
||||||
if e.errno != errno.EEXIST:
|
|
||||||
raise
|
|
||||||
|
|
||||||
self.basename = os.path.basename(self._filename)
|
self.basename = os.path.basename(self._filename)
|
||||||
if remember_directory:
|
if remember_directory:
|
||||||
|
@ -120,6 +120,19 @@ class DownloadItem(downloads.AbstractDownloadItem):
|
|||||||
"state {} (not in requested state)!".format(
|
"state {} (not in requested state)!".format(
|
||||||
filename, self, state_name))
|
filename, self, state_name))
|
||||||
|
|
||||||
|
def _ask_confirm_question(self, title, msg):
|
||||||
|
no_action = functools.partial(self.cancel, remove_data=False)
|
||||||
|
question = usertypes.Question()
|
||||||
|
question.title = title
|
||||||
|
question.text = msg
|
||||||
|
question.mode = usertypes.PromptMode.yesno
|
||||||
|
question.answered_yes.connect(self._after_set_filename)
|
||||||
|
question.answered_no.connect(no_action)
|
||||||
|
question.cancelled.connect(no_action)
|
||||||
|
self.cancelled.connect(question.abort)
|
||||||
|
self.error.connect(question.abort)
|
||||||
|
message.global_bridge.ask(question, blocking=True)
|
||||||
|
|
||||||
def _ask_create_parent_question(self, title, msg,
|
def _ask_create_parent_question(self, title, msg,
|
||||||
force_overwrite, remember_directory):
|
force_overwrite, remember_directory):
|
||||||
no_action = functools.partial(self.cancel, remove_data=False)
|
no_action = functools.partial(self.cancel, remove_data=False)
|
||||||
@ -136,19 +149,6 @@ class DownloadItem(downloads.AbstractDownloadItem):
|
|||||||
self.error.connect(question.abort)
|
self.error.connect(question.abort)
|
||||||
message.global_bridge.ask(question, blocking=True)
|
message.global_bridge.ask(question, blocking=True)
|
||||||
|
|
||||||
def _ask_confirm_question(self, title, msg):
|
|
||||||
no_action = functools.partial(self.cancel, remove_data=False)
|
|
||||||
question = usertypes.Question()
|
|
||||||
question.title = title
|
|
||||||
question.text = msg
|
|
||||||
question.mode = usertypes.PromptMode.yesno
|
|
||||||
question.answered_yes.connect(self._after_set_filename)
|
|
||||||
question.answered_no.connect(no_action)
|
|
||||||
question.cancelled.connect(no_action)
|
|
||||||
self.cancelled.connect(question.abort)
|
|
||||||
self.error.connect(question.abort)
|
|
||||||
message.global_bridge.ask(question, blocking=True)
|
|
||||||
|
|
||||||
def _after_set_filename(self):
|
def _after_set_filename(self):
|
||||||
self._qt_item.setPath(self._filename)
|
self._qt_item.setPath(self._filename)
|
||||||
self._qt_item.accept()
|
self._qt_item.accept()
|
||||||
|
Loading…
Reference in New Issue
Block a user