aboutsummaryrefslogtreecommitdiffstats
path: root/gallery_dl/path.py
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2025-12-20 05:49:04 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2025-12-20 05:49:04 -0500
commita24ec1647aeac35a63b744ea856011ad6e06be3b (patch)
treeae94416de786aeddd05d99559098f7f16bb103a6 /gallery_dl/path.py
parent33f8a8a37a9cba738ef25fb99955f0730da9eb48 (diff)
New upstream version 1.31.1.upstream/1.31.1
Diffstat (limited to 'gallery_dl/path.py')
-rw-r--r--gallery_dl/path.py95
1 files changed, 49 insertions, 46 deletions
diff --git a/gallery_dl/path.py b/gallery_dl/path.py
index 763fb55..be2dcc9 100644
--- a/gallery_dl/path.py
+++ b/gallery_dl/path.py
@@ -31,6 +31,8 @@ class PathFormat():
if kwdefault is None:
kwdefault = util.NONE
+ self.filename_conditions = self.directory_conditions = None
+
filename_fmt = config("filename")
try:
if filename_fmt is None:
@@ -41,7 +43,6 @@ class PathFormat():
formatter.parse(fmt, kwdefault).format_map)
for expr, fmt in filename_fmt.items() if expr
]
- self.build_filename = self.build_filename_conditional
filename_fmt = filename_fmt.get("", extractor.filename_fmt)
self.filename_formatter = formatter.parse(
@@ -50,7 +51,6 @@ class PathFormat():
raise exception.FilenameFormatError(exc)
directory_fmt = config("directory")
- self.directory_conditions = ()
try:
if directory_fmt is None:
directory_fmt = extractor.directory_fmt
@@ -62,7 +62,6 @@ class PathFormat():
])
for expr, fmts in directory_fmt.items() if expr
]
- self.build_directory = self.build_directory_conditional
directory_fmt = directory_fmt.get("", extractor.directory_fmt)
self.directory_formatters = [
@@ -160,8 +159,12 @@ class PathFormat():
def exists(self):
"""Return True if the file exists on disk"""
- if self.extension and os.path.exists(self.realpath):
- return self.check_file()
+ if self.extension:
+ try:
+ os.lstat(self.realpath) # raises OSError if file doesn't exist
+ return self.check_file()
+ except OSError:
+ pass
return False
def check_file(self):
@@ -174,7 +177,7 @@ class PathFormat():
prefix = format(num) + "."
self.kwdict["extension"] = prefix + self.extension
self.build_path()
- os.stat(self.realpath) # raises OSError if file doesn't exist
+ os.lstat(self.realpath) # raises OSError if file doesn't exist
num += 1
except OSError:
pass
@@ -252,55 +255,47 @@ class PathFormat():
def build_filename(self, kwdict):
"""Apply 'kwdict' to filename format string"""
try:
- return self.clean_path(self.clean_segment(
- self.filename_formatter(kwdict)))
- except Exception as exc:
- raise exception.FilenameFormatError(exc)
-
- def build_filename_conditional(self, kwdict):
- try:
- for condition, fmt in self.filename_conditions:
- if condition(kwdict):
- break
- else:
+ if self.filename_conditions is None:
fmt = self.filename_formatter
+ else:
+ for condition, fmt in self.filename_conditions:
+ if condition(kwdict):
+ break
+ else:
+ fmt = self.filename_formatter
return self.clean_path(self.clean_segment(fmt(kwdict)))
except Exception as exc:
raise exception.FilenameFormatError(exc)
def build_directory(self, kwdict):
"""Apply 'kwdict' to directory format strings"""
- segments = []
- strip = self.strip
-
try:
- for fmt in self.directory_formatters:
- segment = fmt(kwdict).strip()
- if strip and segment not in {".", ".."}:
- # remove trailing dots and spaces (#647)
- segment = segment.rstrip(strip)
- if segment:
- segments.append(self.clean_segment(segment))
- return segments
- except Exception as exc:
- raise exception.DirectoryFormatError(exc)
-
- def build_directory_conditional(self, kwdict):
- segments = []
- strip = self.strip
-
- try:
- for condition, formatters in self.directory_conditions:
- if condition(kwdict):
- break
- else:
+ if self.directory_conditions is None:
formatters = self.directory_formatters
+ else:
+ for condition, formatters in self.directory_conditions:
+ if condition(kwdict):
+ break
+ else:
+ formatters = self.directory_formatters
+
+ segments = []
+ strip = self.strip
for fmt in formatters:
- segment = fmt(kwdict).strip()
- if strip and segment != "..":
- segment = segment.rstrip(strip)
- if segment:
- segments.append(self.clean_segment(segment))
+ segment = fmt(kwdict)
+ if segment.__class__ is str:
+ segment = segment.strip()
+ if strip and segment not in {".", ".."}:
+ segment = segment.rstrip(strip)
+ if segment:
+ segments.append(self.clean_segment(segment))
+ else: # assume list
+ for segment in segment:
+ segment = segment.strip()
+ if strip and segment not in {".", ".."}:
+ segment = segment.rstrip(strip)
+ if segment:
+ segments.append(self.clean_segment(segment))
return segments
except Exception as exc:
raise exception.DirectoryFormatError(exc)
@@ -321,7 +316,15 @@ class PathFormat():
self.kwdict["extension"] = self.prefix + self.extension_map(
"part", "part")
self.build_path()
- if part_directory:
+
+ if part_directory is not None:
+ if isinstance(part_directory, list):
+ for condition, part_directory in part_directory:
+ if condition(self.kwdict):
+ break
+ else:
+ return
+
self.temppath = os.path.join(
part_directory,
os.path.basename(self.temppath),