mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-30 21:02:32 +01:00 
			
		
		
		
	qmk find: Fix handling of keys with dots in filter functions (#24393)
				
					
				
			This commit is contained in:
		
							parent
							
								
									ae4ab5ed31
								
							
						
					
					
						commit
						0b3ece1189
					
				| @ -74,28 +74,30 @@ class Exists(FilterFunction): | |||||||
|     func_name = "exists" |     func_name = "exists" | ||||||
| 
 | 
 | ||||||
|     def apply(self, target_info: KeyboardKeymapDesc) -> bool: |     def apply(self, target_info: KeyboardKeymapDesc) -> bool: | ||||||
|         return self.key in target_info.data |         return self.key in target_info.dotty | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Absent(FilterFunction): | class Absent(FilterFunction): | ||||||
|     func_name = "absent" |     func_name = "absent" | ||||||
| 
 | 
 | ||||||
|     def apply(self, target_info: KeyboardKeymapDesc) -> bool: |     def apply(self, target_info: KeyboardKeymapDesc) -> bool: | ||||||
|         return self.key not in target_info.data |         return self.key not in target_info.dotty | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Length(FilterFunction): | class Length(FilterFunction): | ||||||
|     func_name = "length" |     func_name = "length" | ||||||
| 
 | 
 | ||||||
|     def apply(self, target_info: KeyboardKeymapDesc) -> bool: |     def apply(self, target_info: KeyboardKeymapDesc) -> bool: | ||||||
|         return (self.key in target_info.data and len(target_info.data[self.key]) == int(self.value)) |         info_dotty = target_info.dotty | ||||||
|  |         return (self.key in info_dotty and len(info_dotty[self.key]) == int(self.value)) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Contains(FilterFunction): | class Contains(FilterFunction): | ||||||
|     func_name = "contains" |     func_name = "contains" | ||||||
| 
 | 
 | ||||||
|     def apply(self, target_info: KeyboardKeymapDesc) -> bool: |     def apply(self, target_info: KeyboardKeymapDesc) -> bool: | ||||||
|         return (self.key in target_info.data and self.value in target_info.data[self.key]) |         info_dotty = target_info.dotty | ||||||
|  |         return (self.key in info_dotty and self.value in info_dotty[self.key]) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def _get_filter_class(func_name: str, key: str, value: str) -> Optional[FilterFunction]: | def _get_filter_class(func_name: str, key: str, value: str) -> Optional[FilterFunction]: | ||||||
|  | |||||||
| @ -347,3 +347,68 @@ def test_format_json_keymap_auto(): | |||||||
|     result = check_subcommand('format-json', '--format', 'auto', 'lib/python/qmk/tests/minimal_keymap.json') |     result = check_subcommand('format-json', '--format', 'auto', 'lib/python/qmk/tests/minimal_keymap.json') | ||||||
|     check_returncode(result) |     check_returncode(result) | ||||||
|     assert result.stdout == '{\n    "keyboard": "handwired/pytest/basic",\n    "keymap": "test",\n    "layers": [\n        ["KC_A"]\n    ],\n    "layout": "LAYOUT_ortho_1x1",\n    "version": 1\n}\n' |     assert result.stdout == '{\n    "keyboard": "handwired/pytest/basic",\n    "keymap": "test",\n    "layers": [\n        ["KC_A"]\n    ],\n    "layout": "LAYOUT_ortho_1x1",\n    "version": 1\n}\n' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_find_exists(): | ||||||
|  |     result = check_subcommand('find', '-f', 'exists(rgb_matrix.split_count)', '-p', 'rgb_matrix.split_count') | ||||||
|  |     check_returncode(result) | ||||||
|  |     values = [s for s in result.stdout.splitlines() if 'rgb_matrix.split_count=' in s] | ||||||
|  |     assert len(values) > 0 | ||||||
|  |     for s in values: | ||||||
|  |         assert '=None' not in s | ||||||
|  |         assert '=[' in s | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_find_absent(): | ||||||
|  |     result = check_subcommand('find', '-f', 'absent(rgb_matrix.split_count)', '-p', 'rgb_matrix.split_count') | ||||||
|  |     check_returncode(result) | ||||||
|  |     values = [s for s in result.stdout.splitlines() if 'rgb_matrix.split_count=' in s] | ||||||
|  |     assert len(values) > 0 | ||||||
|  |     for s in values: | ||||||
|  |         assert '=None' in s | ||||||
|  |         assert '=[' not in s | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_find_length(): | ||||||
|  |     result = check_subcommand('find', '-f', 'length(matrix_pins.cols, 6)', '-p', 'matrix_pins.cols') | ||||||
|  |     check_returncode(result) | ||||||
|  |     values = [s for s in result.stdout.splitlines() if 'matrix_pins.cols=' in s] | ||||||
|  |     assert len(values) > 0 | ||||||
|  |     for s in values: | ||||||
|  |         assert s.count(',') == 5 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_find_contains(): | ||||||
|  |     result = check_subcommand('find', '-f', 'contains(matrix_pins.cols, B1)', '-p', 'matrix_pins.cols') | ||||||
|  |     check_returncode(result) | ||||||
|  |     values = [s for s in result.stdout.splitlines() if 'matrix_pins.cols=' in s] | ||||||
|  |     assert len(values) > 0 | ||||||
|  |     for s in values: | ||||||
|  |         assert "'B1'" in s | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_find_multiple_conditions(): | ||||||
|  |     # this is intended to match at least 'crkbd/rev1' | ||||||
|  |     result = check_subcommand( | ||||||
|  |         'find', '-f', 'exists(rgb_matrix.split_count)', '-f', 'contains(matrix_pins.cols, B1)', '-f', 'length(matrix_pins.cols, 6)', '-f', 'absent(eeprom.driver)', '-f', 'ws2812.pin=D3', '-p', 'rgb_matrix.split_count', '-p', 'matrix_pins.cols', '-p', | ||||||
|  |         'eeprom.driver', '-p', 'ws2812.pin' | ||||||
|  |     ) | ||||||
|  |     check_returncode(result) | ||||||
|  |     rgb_matrix_split_count_values = [s for s in result.stdout.splitlines() if 'rgb_matrix.split_count=' in s] | ||||||
|  |     assert len(rgb_matrix_split_count_values) > 0 | ||||||
|  |     for s in rgb_matrix_split_count_values: | ||||||
|  |         assert '=None' not in s | ||||||
|  |         assert '=[' in s | ||||||
|  |     matrix_pins_cols_values = [s for s in result.stdout.splitlines() if 'matrix_pins.cols=' in s] | ||||||
|  |     assert len(matrix_pins_cols_values) > 0 | ||||||
|  |     for s in matrix_pins_cols_values: | ||||||
|  |         assert s.count(',') == 5 | ||||||
|  |         assert "'B1'" in s | ||||||
|  |     eeprom_driver_values = [s for s in result.stdout.splitlines() if 'eeprom.driver=' in s] | ||||||
|  |     assert len(eeprom_driver_values) > 0 | ||||||
|  |     for s in eeprom_driver_values: | ||||||
|  |         assert '=None' in s | ||||||
|  |     ws2812_pin_values = [s for s in result.stdout.splitlines() if 'ws2812.pin=' in s] | ||||||
|  |     assert len(ws2812_pin_values) > 0 | ||||||
|  |     for s in ws2812_pin_values: | ||||||
|  |         assert '=D3' in s | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Sergey Vlasov
						Sergey Vlasov