diff options
| author | Sergey M․ <dstftw@gmail.com> | 2015-02-09 01:07:43 +0600 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2015-02-09 01:07:43 +0600 | 
| commit | 9ddb6925bfc53e0f31f7d114490259e293e91edd (patch) | |
| tree | f4ccd096f65ba39738cd355e6bcb9896fe7eca15 /youtube_dl/YoutubeDL.py | |
| parent | 12931e1c6eb85adeffa19dcbd3b911335a5ab032 (diff) | |
[YoutubeDL] Allow filtering by string properties (#4906)
Diffstat (limited to 'youtube_dl/YoutubeDL.py')
| -rwxr-xr-x | youtube_dl/YoutubeDL.py | 41 | 
1 files changed, 29 insertions, 12 deletions
| diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index 633e3d8a1..0934911ec 100755 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -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')) | 
