diff options
author | Sergey M․ <dstftw@gmail.com> | 2019-01-20 13:48:09 +0700 |
---|---|---|
committer | Sergey M․ <dstftw@gmail.com> | 2019-01-20 13:48:49 +0700 |
commit | 2cc779f497ae20d6e0e28fc546a25723cfea631a (patch) | |
tree | 5d5c12eca6270be75b2cde2d539361b3a200a80b /youtube_dl/YoutubeDL.py | |
parent | 379306ef55b64c966392c072b17a450831fec252 (diff) |
[YoutubeDL] Add negation support for string comparisons in format selection expressions (closes #18600, closes #18805)
Diffstat (limited to 'youtube_dl/YoutubeDL.py')
-rwxr-xr-x | youtube_dl/YoutubeDL.py | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index 4493fd0e1..a827414dc 100755 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -1063,21 +1063,24 @@ class YoutubeDL(object): if not m: STR_OPERATORS = { '=': operator.eq, - '!=': operator.ne, '^=': lambda attr, value: attr.startswith(value), '$=': lambda attr, value: attr.endswith(value), '*=': lambda attr, value: value in attr, } str_operator_rex = re.compile(r'''(?x) \s*(?P<key>ext|acodec|vcodec|container|protocol|format_id) - \s*(?P<op>%s)(?P<none_inclusive>\s*\?)? + \s*(?P<negation>!\s*)?(?P<op>%s)(?P<none_inclusive>\s*\?)? \s*(?P<value>[a-zA-Z0-9._-]+) \s*$ ''' % '|'.join(map(re.escape, STR_OPERATORS.keys()))) m = str_operator_rex.search(filter_spec) if m: comparison_value = m.group('value') - op = STR_OPERATORS[m.group('op')] + str_op = STR_OPERATORS[m.group('op')] + if m.group('negation'): + op = lambda attr, value: not str_op + else: + op = str_op if not m: raise ValueError('Invalid filter specification %r' % filter_spec) |