[YoutubeDL] Allow filtering by string properties (#4906)

This commit is contained in:
Sergey M․ 2015-02-09 01:07:43 +06:00
parent 12931e1c6e
commit 9ddb6925bf

View File

@ -832,9 +832,7 @@ class YoutubeDL(object):
\]$ \]$
''' % '|'.join(map(re.escape, OPERATORS.keys()))) ''' % '|'.join(map(re.escape, OPERATORS.keys())))
m = operator_rex.search(format_spec) m = operator_rex.search(format_spec)
if not m: if m:
raise ValueError('Invalid format specification %r' % format_spec)
try: try:
comparison_value = int(m.group('value')) comparison_value = int(m.group('value'))
except ValueError: except ValueError:
@ -847,6 +845,25 @@ class YoutubeDL(object):
m.group('value'), format_spec)) m.group('value'), format_spec))
op = OPERATORS[m.group('op')] op = OPERATORS[m.group('op')]
if not m:
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')]
if not m:
raise ValueError('Invalid format specification %r' % format_spec)
def _filter(f): def _filter(f):
actual_value = f.get(m.group('key')) actual_value = f.get(m.group('key'))
if actual_value is None: if actual_value is None: