1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-12-22 13:33:56 +03:00

Merge pull request #25073 from mrc0mmand/parse-hwdb-tweaks

test: make parse-hwdb compatible with older pyparsing versions
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2022-10-20 10:02:04 +02:00 committed by GitHub
commit c2af23b50f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,4 +1,6 @@
#!/usr/bin/env python3
# pylint: disable=line-too-long,invalid-name,global-statement,redefined-outer-name
# pylint: disable=missing-function-docstring,missing-class-docstring,missing-module-docstring
# SPDX-License-Identifier: MIT
#
# This file is distributed under the MIT license, see below.
@ -33,11 +35,22 @@ try:
OneOrMore, Combine, Or, Optional, Suppress, Group,
nums, alphanums, printables,
stringEnd, pythonStyleComment,
ParseBaseException, __diag__)
ParseBaseException)
except ImportError:
print('pyparsing is not available')
sys.exit(77)
try:
from pyparsing import __diag__
__diag__.warn_multiple_tokens_in_named_alternation = True
__diag__.warn_ungrouped_named_tokens_in_collection = True
__diag__.warn_name_set_on_empty_Forward = True
__diag__.warn_on_multiple_string_args_to_oneof = True
__diag__.enable_debug_on_named_expressions = True
except ImportError:
pass
try:
from evdev.ecodes import ecodes
except ImportError:
@ -50,12 +63,6 @@ except ImportError:
# don't do caching on old python
lru_cache = lambda: (lambda f: f)
__diag__.warn_multiple_tokens_in_named_alternation = True
__diag__.warn_ungrouped_named_tokens_in_collection = True
__diag__.warn_name_set_on_empty_Forward = True
__diag__.warn_on_multiple_string_args_to_oneof = True
__diag__.enable_debug_on_named_expressions = True
EOL = LineEnd().suppress()
EMPTYLINE = LineEnd()
COMMENTLINE = pythonStyleComment + EOL
@ -272,7 +279,7 @@ def check_one_mount_matrix(prop, value):
'x' if bad_x else ('y' if bad_y else 'z'),
prop)
def check_one_keycode(prop, value):
def check_one_keycode(value):
if value != '!' and ecodes is not None:
key = 'KEY_' + value.upper()
if not (key in ecodes or
@ -292,14 +299,14 @@ def check_wheel_clicks(properties):
def check_properties(groups):
grammar = property_grammar()
for matches, props in groups:
for _, props in groups:
seen_props = {}
for prop in props:
# print('--', prop)
prop = prop.partition('#')[0].rstrip()
try:
parsed = grammar.parseString(prop)
except ParseBaseException as e:
except ParseBaseException:
error('Failed to parse: {!r}', prop)
continue
# print('{!r}'.format(parsed))
@ -312,18 +319,17 @@ def check_properties(groups):
check_one_mount_matrix(prop, parsed.VALUE)
elif parsed.NAME.startswith('KEYBOARD_KEY_'):
val = parsed.VALUE if isinstance(parsed.VALUE, str) else parsed.VALUE[0]
check_one_keycode(prop, val)
check_one_keycode(val)
check_wheel_clicks(seen_props)
def print_summary(fname, groups):
n_matches = sum(len(matches) for matches, props in groups)
n_props = sum(len(props) for matches, props in groups)
print('{}: {} match groups, {} matches, {} properties'
.format(fname, len(groups), n_matches, n_props))
print(f'{fname}: {len(groups)} match groups, {n_matches} matches, {n_props} properties')
if n_matches == 0 or n_props == 0:
error('{}: no matches or props'.format(fname))
error(f'{fname}: no matches or props')
if __name__ == '__main__':
args = sys.argv[1:] or sorted(glob.glob(os.path.dirname(sys.argv[0]) + '/[678][0-9]-*.hwdb'))