summaryrefslogtreecommitdiffstats
path: root/gallery_dl/formatter.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/formatter.py')
-rw-r--r--gallery_dl/formatter.py23
1 files changed, 21 insertions, 2 deletions
diff --git a/gallery_dl/formatter.py b/gallery_dl/formatter.py
index 654e5d0..f5d961a 100644
--- a/gallery_dl/formatter.py
+++ b/gallery_dl/formatter.py
@@ -8,14 +8,20 @@
"""String formatters"""
+import os
import json
import string
import _string
+import datetime
import operator
from . import text, util
_CACHE = {}
_CONVERSIONS = None
+_GLOBALS = {
+ "_env": lambda: os.environ,
+ "_now": datetime.datetime.now,
+}
def parse(format_string, default=None):
@@ -58,7 +64,7 @@ class StringFormatter():
- "j". calls json.dumps
- "t": calls str.strip
- "d": calls text.parse_timestamp
- - "U": calls urllib.parse.unquote
+ - "U": calls urllib.parse.unescape
- "S": calls util.to_string()
- "T": calls util.to_timestamü()
- Example: {f!l} -> "example"; {f!u} -> "EXAMPLE"
@@ -125,6 +131,8 @@ class StringFormatter():
], fmt)
else:
key, funcs = parse_field_name(field_name)
+ if key in _GLOBALS:
+ return self._apply_globals(_GLOBALS[key], funcs, fmt)
if funcs:
return self._apply(key, funcs, fmt)
return self._apply_simple(key, fmt)
@@ -140,6 +148,17 @@ class StringFormatter():
return fmt(obj)
return wrap
+ def _apply_globals(self, gobj, funcs, fmt):
+ def wrap(_):
+ try:
+ obj = gobj()
+ for func in funcs:
+ obj = func(obj)
+ except Exception:
+ obj = self.default
+ return fmt(obj)
+ return wrap
+
def _apply_simple(self, key, fmt):
def wrap(kwdict):
return fmt(kwdict[key] if key in kwdict else self.default)
@@ -149,7 +168,7 @@ class StringFormatter():
def wrap(kwdict):
for key, funcs in lst:
try:
- obj = kwdict[key]
+ obj = _GLOBALS[key]() if key in _GLOBALS else kwdict[key]
for func in funcs:
obj = func(obj)
if obj: