summaryrefslogtreecommitdiffstats
path: root/gallery_dl/path.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/path.py')
-rw-r--r--gallery_dl/path.py29
1 files changed, 18 insertions, 11 deletions
diff --git a/gallery_dl/path.py b/gallery_dl/path.py
index c85bb88..84ee7af 100644
--- a/gallery_dl/path.py
+++ b/gallery_dl/path.py
@@ -74,7 +74,7 @@ class PathFormat():
self.directory = self.realdirectory = \
self.filename = self.extension = self.prefix = \
self.path = self.realpath = self.temppath = ""
- self.delete = self._create_directory = False
+ self.delete = False
extension_map = config("extension-map")
if extension_map is None:
@@ -138,7 +138,11 @@ class PathFormat():
def open(self, mode="wb"):
"""Open file and return a corresponding file object"""
- return open(self.temppath, mode)
+ try:
+ return open(self.temppath, mode)
+ except FileNotFoundError:
+ os.makedirs(self.realdirectory)
+ return open(self.temppath, mode)
def exists(self):
"""Return True if the file exists on disk"""
@@ -187,7 +191,6 @@ class PathFormat():
directory += sep
self.realdirectory = directory
- self._create_directory = True
def set_filename(self, kwdict):
"""Set general filename data"""
@@ -279,9 +282,6 @@ class PathFormat():
def build_path(self):
"""Combine directory and filename to full paths"""
- if self._create_directory:
- os.makedirs(self.realdirectory, exist_ok=True)
- self._create_directory = False
self.filename = filename = self.build_filename(self.kwdict)
self.path = self.directory + filename
self.realpath = self.realdirectory + filename
@@ -317,11 +317,18 @@ class PathFormat():
if self.temppath != self.realpath:
# Move temp file to its actual location
- try:
- os.replace(self.temppath, self.realpath)
- except OSError:
- shutil.copyfile(self.temppath, self.realpath)
- os.unlink(self.temppath)
+ while True:
+ try:
+ os.replace(self.temppath, self.realpath)
+ except FileNotFoundError:
+ # delayed directory creation
+ os.makedirs(self.realdirectory)
+ continue
+ except OSError:
+ # move across different filesystems
+ shutil.copyfile(self.temppath, self.realpath)
+ os.unlink(self.temppath)
+ break
mtime = self.kwdict.get("_mtime")
if mtime: