mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[utils] Fix --match-filter for int-like strings (closes #11082)
This commit is contained in:
		| @@ -605,6 +605,7 @@ class TestYoutubeDL(unittest.TestCase): | |||||||
|             'extractor': 'TEST', |             'extractor': 'TEST', | ||||||
|             'duration': 30, |             'duration': 30, | ||||||
|             'filesize': 10 * 1024, |             'filesize': 10 * 1024, | ||||||
|  |             'playlist_id': '42', | ||||||
|         } |         } | ||||||
|         second = { |         second = { | ||||||
|             'id': '2', |             'id': '2', | ||||||
| @@ -614,6 +615,7 @@ class TestYoutubeDL(unittest.TestCase): | |||||||
|             'duration': 10, |             'duration': 10, | ||||||
|             'description': 'foo', |             'description': 'foo', | ||||||
|             'filesize': 5 * 1024, |             'filesize': 5 * 1024, | ||||||
|  |             'playlist_id': '43', | ||||||
|         } |         } | ||||||
|         videos = [first, second] |         videos = [first, second] | ||||||
|  |  | ||||||
| @@ -650,6 +652,10 @@ class TestYoutubeDL(unittest.TestCase): | |||||||
|         res = get_videos(f) |         res = get_videos(f) | ||||||
|         self.assertEqual(res, ['1']) |         self.assertEqual(res, ['1']) | ||||||
|  |  | ||||||
|  |         f = match_filter_func('playlist_id = 42') | ||||||
|  |         res = get_videos(f) | ||||||
|  |         self.assertEqual(res, ['1']) | ||||||
|  |  | ||||||
|     def test_playlist_items_selection(self): |     def test_playlist_items_selection(self): | ||||||
|         entries = [{ |         entries = [{ | ||||||
|             'id': compat_str(i), |             'id': compat_str(i), | ||||||
|   | |||||||
| @@ -2345,11 +2345,18 @@ def _match_one(filter_part, dct): | |||||||
|     m = operator_rex.search(filter_part) |     m = operator_rex.search(filter_part) | ||||||
|     if m: |     if m: | ||||||
|         op = COMPARISON_OPERATORS[m.group('op')] |         op = COMPARISON_OPERATORS[m.group('op')] | ||||||
|         if m.group('strval') is not None: |         actual_value = dct.get(m.group('key')) | ||||||
|  |         if (m.group('strval') is not None or | ||||||
|  |             # If the original field is a string and matching comparisonvalue is | ||||||
|  |             # a number we should respect the origin of the original field | ||||||
|  |             # and process comparison value as a string (see | ||||||
|  |             # https://github.com/rg3/youtube-dl/issues/11082). | ||||||
|  |             actual_value is not None and m.group('intval') is not None and | ||||||
|  |                 isinstance(actual_value, compat_str)): | ||||||
|             if m.group('op') not in ('=', '!='): |             if m.group('op') not in ('=', '!='): | ||||||
|                 raise ValueError( |                 raise ValueError( | ||||||
|                     'Operator %s does not support string values!' % m.group('op')) |                     'Operator %s does not support string values!' % m.group('op')) | ||||||
|             comparison_value = m.group('strval') |             comparison_value = m.group('strval') or m.group('intval') | ||||||
|         else: |         else: | ||||||
|             try: |             try: | ||||||
|                 comparison_value = int(m.group('intval')) |                 comparison_value = int(m.group('intval')) | ||||||
| @@ -2361,7 +2368,6 @@ def _match_one(filter_part, dct): | |||||||
|                     raise ValueError( |                     raise ValueError( | ||||||
|                         'Invalid integer value %r in filter part %r' % ( |                         'Invalid integer value %r in filter part %r' % ( | ||||||
|                             m.group('intval'), filter_part)) |                             m.group('intval'), filter_part)) | ||||||
|         actual_value = dct.get(m.group('key')) |  | ||||||
|         if actual_value is None: |         if actual_value is None: | ||||||
|             return m.group('none_inclusive') |             return m.group('none_inclusive') | ||||||
|         return op(actual_value, comparison_value) |         return op(actual_value, comparison_value) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user