Commit Graph

53 Commits

Author SHA1 Message Date
Mike Fährmann
0be3383110 [formatter] add 'q' & 'Q' conversions - URL-en/decode values 2026-02-03 17:35:05 +01:00
Mike Fährmann
a79a945494 [formatter] overload '.' operator
implement generic access of
* list items        (L[1]   -> L.1)
* dict vslues       (D[key] -> D.key)
* object attributes (O.attr -> O.attr)
in standard format strings
2026-01-11 17:49:55 +01:00
Mike Fährmann
ff94002b44 [formatter] add 'I' format specifier - identity 2025-12-17 19:22:18 +01:00
Mike Fährmann
5591a16cd7 [formatter] add 'Lb' format specifier - 'L' for bytes 2025-11-03 13:36:55 +01:00
Mike Fährmann
91a5fd85db [formatter] add 'Xb' format specifier - 'X' for bytes (#6582)
https://github.com/mikf/gallery-dl/issues/6582#issuecomment-3479362186
2025-11-03 12:41:20 +01:00
Mike Fährmann
ed8fe07f92 [tests/formatter] update results 2025-10-20 09:19:47 +02:00
Mike Fährmann
21350c5084 [dt] introduce 'NullDatetime' to represent invalid datetimes 2025-10-16 09:46:13 +02:00
Mike Fährmann
0eb3c8a994 [dt] replace 'util' datetime functions 2025-10-15 21:30:38 +02:00
Mike Fährmann
9035b92230 [formatter] support negative indicies
for example '{items[-3]}'
2025-09-11 20:50:50 +02:00
Mike Fährmann
bcf4d579b0 [formatter] exclude '<>\' from '!R' URLs (#8180) 2025-09-11 08:25:23 +02:00
Mike Fährmann
9309204d9b [formatter] add 'R' conversion - extract URLs (#8125) 2025-08-26 16:44:22 +02:00
Mike Fährmann
b9429de774 [tests] use f-strings (##7671) 2025-08-14 10:22:42 +02:00
Mike Fährmann
ea61f432f2 [formatter/jinja] add support for options (#1390)
- custom filters
- custom tests
- policies
- Environment.__init__() arguments
2025-07-22 20:57:54 +02:00
Mike Fährmann
240f958707 [formatter] add 'W' conversion - sanitize whitespace (#6582)
https://github.com/mikf/gallery-dl/issues/6582#issuecomment-3090777073
2025-07-19 21:44:55 +02:00
Mike Fährmann
f25c5f4b0c [formatter] add basic 'Jinja2' template support (#1390) 2025-07-16 23:23:58 +02:00
Mike Fährmann
2bcc2f2a17 [formatter] implement 'M' format specifier
Map a list of objects to a list of values

[
    {"name": "John Doe"      , "age": 42},
    {"name": "Jane Smith"    , "age": 24},
    {"name": "Max Mustermann", "age": null}
]

== :Mname =>

["John Doe", "Jane Smith", "Max Mustermann"]
2025-06-22 16:33:20 +02:00
Mike Fährmann
71461ceaba [formatter] add 'L' conversion
to map ISO 639-1 language codes to their full names
2025-06-22 14:01:58 +02:00
Mike Fährmann
5e0cdac337 [formatter] change 'L'/length conversion to 'n' 2025-06-22 13:54:57 +02:00
Mike Fährmann
6d928f3805 remove some pre-3.8 workarounds (#7671) 2025-06-17 12:56:47 +02:00
Mike Fährmann
e08ec7e083 update copyright notices 2025-06-13 00:03:41 +02:00
Mike Fährmann
539ed8fef4 [formatter] add 'D' conversion 2025-05-29 20:09:26 +02:00
Mike Fährmann
9ce6de6ca0 [formatter] add 'i' and 'f' conversions (#6582)
https://github.com/mikf/gallery-dl/issues/6582#issuecomment-2792166608
2025-04-11 09:18:24 +02:00
Mike Fährmann
a120295632 [util] use minimal separators for 'json_dumps()' 2024-10-01 17:03:13 +02:00
Mike Fährmann
68bff76d90 [formatter] implement 'L' conversion 2024-09-19 13:50:52 +02:00
Mike Fährmann
b44f0cdab0 [formatter] allow accessing 'util.NONE' via global '_nul' 2024-09-19 13:28:59 +02:00
Mike Fährmann
78ae0ba9f7 [formatter] implement 'A' format specifier (#6036) 2024-08-16 20:34:23 +02:00
Mike Fährmann
8f50c04af2 [formatter] implement 'X' format specifier (#5770) 2024-06-21 20:56:19 +02:00
Mike Fährmann
1ce5de0290 [formatter] implement 'C' format specifier (#5647)
to apply a conversion after ':' or
to apply multiple conversions

for example {tags:CSl} or {tags:J - /Cl}
to convert list to string and lowercase it
2024-06-05 16:49:29 +02:00
Mike Fährmann
d0cead105b [formatter] allow dots etc in '…' literals (#5539)
don't parse fields starting with '

this disables the ability to directly apply […] to '…' literals,
but that's not really useful anyway and can still be done with _lit
2024-05-02 17:43:24 +02:00
Mike Fährmann
55e8fdad29 [tests] use 'datetime.timezone.utc' instead of 'datetime.UTC'
'datetime.UTC' was added in Python 3.11
and is not defined in older versions.
2024-03-22 18:16:24 +01:00
Mike Fährmann
ddb2edfd32 [formatter] fix local DST datetime offsets for ':O'
'O' would get the *current* local UTC offset and apply it to all
'datetime' objects it gets applied to.
This would result in a wrong offset if the current offset includes
DST and the target 'datetime' does not or vice-versa.

'O' now determines the correct local UTC offset while respecting DST for
each individual 'datetime'.
2024-03-21 20:45:46 +01:00
Mike Fährmann
ba062712ad [tests] '__main__' -> "__main__" 2024-02-27 02:10:05 +01:00
Mike Fährmann
93a7a89cf6 [formatter] use value of last alternative (#4492)
fixes {fieldname|''} evaluating to the value of 'keywords-default'
instead of an empty string
2023-09-05 17:53:27 +02:00
Mike Fährmann
ce93c460a6 [formatter] implement 'H' conversion (#4164)
to remove HTML tags and unescape HTML entities
2023-06-15 13:07:51 +02:00
Mike Fährmann
69865dcc05 [formatter] implement slicing strings as bytes (#4087)
prefixing a slice '[10:30]' with a lowercase b '[b10:30]' encodes
the string to bytes in filesystem encoding before applying the slice
2023-05-22 18:30:45 +02:00
Mike Fährmann
fe41a2b159 [formatter] support putting keys in quotes
i.e. obj["key"] or obj['key']
as in f-strings
2023-03-21 22:06:54 +01:00
Mike Fährmann
46fdf46f21 [formatter] support loading an f-string from a template file
"\fTF ~/path/to/file.txt"
2023-03-20 22:05:33 +01:00
Mike Fährmann
1a4d4a799b [formatter] support filesystem paths for \fM 2023-03-20 22:01:33 +01:00
Mike Fährmann
42481aed59 [formatter] implement 'S' format specifier (#3266)
to Sort lists
2022-11-21 21:44:42 +01:00
Mike Fährmann
67bad04dda [formatter] add 'g' conversion to sluGify a string (#2410) 2022-08-26 17:57:17 +02:00
Mike Fährmann
6990ad0ba8 [formatter] do NOT apply :J to strings (#2833) 2022-08-16 16:41:19 +02:00
Mike Fährmann
74865adae5 implement 'format-separator' option (#2737)
a global option, that servers as a workaround for shortcomings due to
lack of a proper format string parser
2022-07-10 13:31:43 +02:00
Mike Fährmann
90ae48c40c [formatter] implement 'O' format specifier (#2736)
to apply a UTC offset to 'date' values and other datetime objects
2022-07-08 12:51:03 +02:00
Mike Fährmann
04bed1eba3 [formatter] allow for custom "format" functions (#2721) 2022-07-05 12:22:01 +02:00
Mike Fährmann
54525d2e21 [formatter] implement slice operator as format specifier
this allows using a slice operator alongside other (special) format
specifiers like J, to first join list elements to a string and then
trimming that with a slice.

{tags:J, /[:50]}
2022-06-25 16:52:58 +02:00
Mike Fährmann
42525cfe8d fix '{…!j}' for otherwise non-serializable types (##2624)
like 'datetime'
2022-06-07 17:47:07 +02:00
Mike Fährmann
f3408a9d92 implement string literals in replacement fields
- either {_lit[foo]} or {'foo'}
- useful as alternative for empty metadata fields: {title|'no title'}
- due to using '_string.formatter_field_name_split()' to parse format
  strings, using certain characters will result in an error: [].:!
2022-05-09 23:49:33 +02:00
Mike Fährmann
cf44aba333 [formatter] allow evaluating f-string literals
by starting a format string with '\fF'.

This was technically already possible with '\fE',
but this makes it a bit more convenient.
2022-03-18 13:31:01 +01:00
Mike Fährmann
3842cdcd8f [formatter] implement 'D' format specifier
To be able to parse any string into a 'datetime' object
and format it as necessary.

Example:

{created_at:D%Y-%m-%dT%H:%M:%S%z}
->
"2010-01-01 00:00:00"

{created_at:D%Y-%m-%dT%H:%M:%S%z/%b %d %Y %I:%M %p}
->
"Jan 01 2010 12:00 AM"

with 'created_at' == "2010-01-01T01:00:00+0100"
2021-11-20 23:04:34 +01:00
Mike Fährmann
2ab190ce08 add tests for special format strings 2021-11-01 23:26:18 +01:00