Skip to content

Commit

Permalink
combine conditional filenames into filename option (#1394)
Browse files Browse the repository at this point in the history
  • Loading branch information
mikf committed Jun 8, 2021
1 parent 1197ee2 commit 84d2e64
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 33 deletions.
45 changes: 19 additions & 26 deletions docs/configuration.rst
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,27 @@ option (see the example below).
extractor.*.filename
--------------------
Type
``string``
``string`` or ``object``
Example
``"{manga}_c{chapter}_{page:>03}.{extension}"``
* .. code::

"{manga}_c{chapter}_{page:>03}.{extension}"

* .. code:: json

{
"extension == 'mp4'": "{id}_video.{extension}",
"'nature' in title" : "{id}_{title}.{extension}",
"" : "{id}_default.{extension}"
}

Description
A `format string`_ to build the resulting filename
for a downloaded file.
A `format string`_ to build filenames for downloaded files with.

If this is an ``object``, it must contain Python expressions mapping to the
filename format strings to use.
These expressions are evaluated in the order as specified in Python 3.6+
and in an undetermined order in Python 3.4 and 3.5.

The available replacement keys depend on the extractor used. A list
of keys for a specific one can be acquired by calling *gallery-dl*
Expand Down Expand Up @@ -97,28 +112,6 @@ Description
a valid filename extension.


extractor.*.filename-conditions
-------------------------------
Type
``object``
Example
.. code:: json
{
"extension == 'mp4'" : "{id}_video.{extension}",
"extension in ('zip','rar')": "{id}_archive.{extension}",
"'nature' in title" : "{id}_{title}.{extension}"
}
Description
An object containing Python expressions mapping to the
filename format strings to use.

When none of the given conditions match, `extractor.*.filename`_ is used.

Expressions are evaluated in the order as specified in Python 3.6+
and in an undetermined order in Python 3.4 and 3.5.


extractor.*.directory
---------------------
Type
Expand Down
13 changes: 6 additions & 7 deletions gallery_dl/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -756,10 +756,6 @@ class PathFormat():

def __init__(self, extractor):
filename_fmt = extractor.config("filename")
filename_conditions = extractor.config("filename-conditions")
if filename_fmt is None:
filename_fmt = extractor.filename_fmt

directory_fmt = extractor.config("directory")
if directory_fmt is None:
directory_fmt = extractor.directory_fmt
Expand All @@ -771,13 +767,16 @@ def __init__(self, extractor):

kwdefault = extractor.config("keywords-default")
try:
if filename_conditions:
self.build_filename = self.build_filename_conditional
if filename_fmt is None:
filename_fmt = extractor.filename_fmt
elif isinstance(filename_fmt, dict):
self.filename_conditions = [
(compile_expression(expr),
Formatter(fmt, kwdefault).format_map)
for expr, fmt in filename_conditions.items()
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(
filename_fmt, kwdefault).format_map
Expand Down

0 comments on commit 84d2e64

Please sign in to comment.