diff options
| author | 2025-12-20 05:49:04 -0500 | |
|---|---|---|
| committer | 2025-12-20 05:49:04 -0500 | |
| commit | a24ec1647aeac35a63b744ea856011ad6e06be3b (patch) | |
| tree | ae94416de786aeddd05d99559098f7f16bb103a6 /gallery_dl/path.py | |
| parent | 33f8a8a37a9cba738ef25fb99955f0730da9eb48 (diff) | |
New upstream version 1.31.1.upstream/1.31.1
Diffstat (limited to 'gallery_dl/path.py')
| -rw-r--r-- | gallery_dl/path.py | 95 |
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), |
