diff options
Diffstat (limited to 'gallery_dl/formatter.py')
| -rw-r--r-- | gallery_dl/formatter.py | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/gallery_dl/formatter.py b/gallery_dl/formatter.py index 2c5bd11..fc36fa2 100644 --- a/gallery_dl/formatter.py +++ b/gallery_dl/formatter.py @@ -34,6 +34,8 @@ def parse(format_string, default=NONE, fmt=format): if kind == "T": cls = TemplateFormatter + elif kind == "TF": + cls = TemplateFStringFormatter elif kind == "E": cls = ExpressionFormatter elif kind == "M": @@ -197,15 +199,6 @@ class StringFormatter(): return lambda obj: fmt(conversion(obj)) -class TemplateFormatter(StringFormatter): - """Read format_string from file""" - - def __init__(self, path, default=NONE, fmt=format): - with open(util.expand_path(path)) as fp: - format_string = fp.read() - StringFormatter.__init__(self, format_string, default, fmt) - - class ExpressionFormatter(): """Generate text by evaluating a Python expression""" @@ -218,7 +211,7 @@ class ModuleFormatter(): def __init__(self, function_spec, default=NONE, fmt=None): module_name, _, function_name = function_spec.partition(":") - module = __import__(module_name) + module = util.import_file(module_name) self.format_map = getattr(module, function_name) @@ -229,6 +222,24 @@ class FStringFormatter(): self.format_map = util.compile_expression('f"""' + fstring + '"""') +class TemplateFormatter(StringFormatter): + """Read format_string from file""" + + def __init__(self, path, default=NONE, fmt=format): + with open(util.expand_path(path)) as fp: + format_string = fp.read() + StringFormatter.__init__(self, format_string, default, fmt) + + +class TemplateFStringFormatter(FStringFormatter): + """Read f-string from file""" + + def __init__(self, path, default=NONE, fmt=format): + with open(util.expand_path(path)) as fp: + format_string = fp.read() + FStringFormatter.__init__(self, format_string, default, fmt) + + def parse_field_name(field_name): first, rest = _string.formatter_field_name_split(field_name) funcs = [] @@ -245,6 +256,8 @@ def parse_field_name(field_name): try: if ":" in key: key = _slice(key) + else: + key = key.strip("\"'") except TypeError: pass # key is an integer |
