mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00: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', | ||||
|             'duration': 30, | ||||
|             'filesize': 10 * 1024, | ||||
|             'playlist_id': '42', | ||||
|         } | ||||
|         second = { | ||||
|             'id': '2', | ||||
| @@ -614,6 +615,7 @@ class TestYoutubeDL(unittest.TestCase): | ||||
|             'duration': 10, | ||||
|             'description': 'foo', | ||||
|             'filesize': 5 * 1024, | ||||
|             'playlist_id': '43', | ||||
|         } | ||||
|         videos = [first, second] | ||||
|  | ||||
| @@ -650,6 +652,10 @@ class TestYoutubeDL(unittest.TestCase): | ||||
|         res = get_videos(f) | ||||
|         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): | ||||
|         entries = [{ | ||||
|             'id': compat_str(i), | ||||
|   | ||||
| @@ -2345,11 +2345,18 @@ def _match_one(filter_part, dct): | ||||
|     m = operator_rex.search(filter_part) | ||||
|     if m: | ||||
|         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 ('=', '!='): | ||||
|                 raise ValueError( | ||||
|                     '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: | ||||
|             try: | ||||
|                 comparison_value = int(m.group('intval')) | ||||
| @@ -2361,7 +2368,6 @@ def _match_one(filter_part, dct): | ||||
|                     raise ValueError( | ||||
|                         'Invalid integer value %r in filter part %r' % ( | ||||
|                             m.group('intval'), filter_part)) | ||||
|         actual_value = dct.get(m.group('key')) | ||||
|         if actual_value is None: | ||||
|             return m.group('none_inclusive') | ||||
|         return op(actual_value, comparison_value) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․