[utils] Add partial_application decorator function

Thx: yt-dlp/yt-dlp#10653
This commit is contained in:
dirkf
2025-11-01 20:24:43 +00:00
parent a96a778750
commit 23a848c314
2 changed files with 49 additions and 0 deletions

View File

@@ -69,6 +69,7 @@ from youtube_dl.utils import (
parse_iso8601,
parse_resolution,
parse_qs,
partial_application,
pkcs1pad,
prepend_extension,
read_batch_urls,
@@ -1723,6 +1724,21 @@ Line 1
'a', 'b', 'c', 'd',
from_dict={'a': 'c', 'c': [], 'b': 'd', 'd': None}), 'c-d')
def test_partial_application(self):
test_fn = partial_application(lambda x, kwarg=None: '{0}, kwarg={1!r}'.format(x, kwarg))
self.assertTrue(
callable(test_fn(kwarg=10)),
'missing positional parameter should apply partially')
self.assertEqual(
test_fn(10, kwarg=0.1), '10, kwarg=0.1',
'positionally passed argument should call function')
self.assertEqual(
test_fn(x=10), '10, kwarg=None',
'keyword passed positional should call function')
self.assertEqual(
test_fn(kwarg=0.1)(10), '10, kwarg=0.1',
'call after partial application should call the function')
if __name__ == '__main__':
unittest.main()