|
|
@ -832,20 +832,37 @@ class YoutubeDL(object): |
|
|
|
\]$ |
|
|
|
''' % '|'.join(map(re.escape, OPERATORS.keys()))) |
|
|
|
m = operator_rex.search(format_spec) |
|
|
|
if m: |
|
|
|
try: |
|
|
|
comparison_value = int(m.group('value')) |
|
|
|
except ValueError: |
|
|
|
comparison_value = parse_filesize(m.group('value')) |
|
|
|
if comparison_value is None: |
|
|
|
comparison_value = parse_filesize(m.group('value') + 'B') |
|
|
|
if comparison_value is None: |
|
|
|
raise ValueError( |
|
|
|
'Invalid value %r in format specification %r' % ( |
|
|
|
m.group('value'), format_spec)) |
|
|
|
op = OPERATORS[m.group('op')] |
|
|
|
|
|
|
|
if not m: |
|
|
|
raise ValueError('Invalid format specification %r' % format_spec) |
|
|
|
STR_OPERATORS = { |
|
|
|
'=': operator.eq, |
|
|
|
'!=': operator.ne, |
|
|
|
} |
|
|
|
str_operator_rex = re.compile(r'''(?x)\s*\[ |
|
|
|
\s*(?P<key>ext|acodec|vcodec|container|protocol) |
|
|
|
\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(format_spec) |
|
|
|
if m: |
|
|
|
comparison_value = m.group('value') |
|
|
|
op = STR_OPERATORS[m.group('op')] |
|
|
|
|
|
|
|
try: |
|
|
|
comparison_value = int(m.group('value')) |
|
|
|
except ValueError: |
|
|
|
comparison_value = parse_filesize(m.group('value')) |
|
|
|
if comparison_value is None: |
|
|
|
comparison_value = parse_filesize(m.group('value') + 'B') |
|
|
|
if comparison_value is None: |
|
|
|
raise ValueError( |
|
|
|
'Invalid value %r in format specification %r' % ( |
|
|
|
m.group('value'), format_spec)) |
|
|
|
op = OPERATORS[m.group('op')] |
|
|
|
if not m: |
|
|
|
raise ValueError('Invalid format specification %r' % format_spec) |
|
|
|
|
|
|
|
def _filter(f): |
|
|
|
actual_value = f.get(m.group('key')) |
|
|
|