some pylint and tests

pull/14/head
sezanzeb 4 years ago
parent fb94742d8a
commit 398493149b

@ -15,7 +15,7 @@
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11"> <g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="31.5" y="15" fill="#010101" fill-opacity=".3">coverage</text> <text x="31.5" y="15" fill="#010101" fill-opacity=".3">coverage</text>
<text x="31.5" y="14">coverage</text> <text x="31.5" y="14">coverage</text>
<text x="80" y="15" fill="#010101" fill-opacity=".3">82%</text> <text x="80" y="15" fill="#010101" fill-opacity=".3">83%</text>
<text x="80" y="14">82%</text> <text x="80" y="14">83%</text>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 904 B

After

Width:  |  Height:  |  Size: 904 B

@ -17,7 +17,7 @@
<text x="22.0" y="14">pylint</text> <text x="22.0" y="14">pylint</text>
</g> </g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11"> <g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="63.0" y="15" fill="#010101" fill-opacity=".3">9.66</text> <text x="63.0" y="15" fill="#010101" fill-opacity=".3">9.82</text>
<text x="62.0" y="14">9.66</text> <text x="62.0" y="14">9.82</text>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -24,6 +24,7 @@
import subprocess import subprocess
import dbus
from dbus import service from dbus import service
import dbus.mainloop.glib import dbus.mainloop.glib
@ -57,7 +58,7 @@ def get_dbus_interface():
remote_object = bus.get_object('keymapper.Control', '/') remote_object = bus.get_object('keymapper.Control', '/')
interface = dbus.Interface(remote_object, 'keymapper.Interface') interface = dbus.Interface(remote_object, 'keymapper.Interface')
logger.debug('Connected to dbus') logger.debug('Connected to dbus')
except Exception as error: except dbus.exceptions.DBusException as error:
logger.error( logger.error(
'Could not connect to the dbus of "key-mapper-service", mapping ' 'Could not connect to the dbus of "key-mapper-service", mapping '
'keys only works as long as the window is open.' 'keys only works as long as the window is open.'
@ -86,7 +87,11 @@ class Daemon(service.Object):
print(device, preset) print(device, preset)
mapping = Mapping() mapping = Mapping()
mapping.load(device, preset) mapping.load(device, preset)
self.injectors[device] = KeycodeInjector(device, mapping) try:
injector = KeycodeInjector(device, mapping)
self.injectors[device] = injector
except OSError as error:
logger.error(error)
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
@dbus.service.method( @dbus.service.method(

@ -40,8 +40,10 @@ def can_read_devices():
def warn(group): def warn(group):
logger.warning( logger.warning(
'Some devices may not be visible without being in the ' 'Some devices may not be visible without being in the '
f'"{group}" user group. Try `sudo usermod -a -G {group} $USER` ' f'"%s" user group. Try `sudo usermod -a -G %s $USER` '
'and log out and back in.' 'and log out and back in.',
group,
group
) )
if not is_root and not is_test: if not is_root and not is_test:

@ -109,6 +109,7 @@ class Row(Gtk.ListBoxRow):
self.get_style_context().remove_class('changed') self.get_style_context().remove_class('changed')
def on_character_input_change(self, _): def on_character_input_change(self, _):
"""When the output character for that keycode is typed in."""
keycode = self.get_keycode() keycode = self.get_keycode()
character = self.get_character() character = self.get_character()

@ -27,13 +27,17 @@ import logging
import pkg_resources import pkg_resources
SPAM = 5
def spam(self, message, *args, **kws): def spam(self, message, *args, **kws):
"""Log a more-verbose message than debug."""
# pylint: disable=protected-access
if self.isEnabledFor(SPAM): if self.isEnabledFor(SPAM):
# https://stackoverflow.com/a/13638084 # https://stackoverflow.com/a/13638084
self._log(SPAM, message, args, **kws) self._log(SPAM, message, args, **kws)
SPAM = 5
logging.addLevelName(SPAM, "SPAM") logging.addLevelName(SPAM, "SPAM")
logging.Logger.spam = spam logging.Logger.spam = spam
@ -42,10 +46,11 @@ class Formatter(logging.Formatter):
"""Overwritten Formatter to print nicer logs.""" """Overwritten Formatter to print nicer logs."""
def format(self, record): def format(self, record):
"""Overwritten format function.""" """Overwritten format function."""
# pylint: disable=protected-access
debug = logger.level <= logging.DEBUG debug = logger.level <= logging.DEBUG
if record.levelno == logging.INFO and not debug: if record.levelno == logging.INFO and not debug:
# if not launched with --debug, then don't print "INFO:" # if not launched with --debug, then don't print "INFO:"
self._style._fmt = '%(message)s' # pylint: disable=line-too-long self._style._fmt = '%(message)s'
else: else:
# see https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit # see https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit
# for those numbers # for those numbers

@ -30,19 +30,11 @@ from keymapper.logger import logger
from keymapper.paths import get_config_path from keymapper.paths import get_config_path
def update_reverse_mapping(func): def keep_reverse_mapping_intact(func):
"""Generate a reverse mapping to optimize reverse lookups. """Decorator for Mapping.update_reverse_mapping."""
If _mapping contains `20: "a, A"` (the xkb syntax for modified keys),
reverse mapping will contain `"a": 20, "A": 20`.
"""
def wrapper(self, *args, **kwargs): def wrapper(self, *args, **kwargs):
func(self, *args, **kwargs) func(self, *args, **kwargs)
self.update_reverse_mapping()
self._reverse_mapping = {}
for key, value in self._mapping.items():
for character in value.split(','):
self._reverse_mapping[character.strip()] = key
return wrapper return wrapper
@ -71,7 +63,18 @@ class Mapping:
def __len__(self): def __len__(self):
return len(self._mapping) return len(self._mapping)
@update_reverse_mapping def update_reverse_mapping(self):
"""Generate a reverse mapping to optimize reverse lookups.
If _mapping contains `20: "a, A"` (the xkb syntax for modified keys),
reverse mapping will contain `"a": 20, "A": 20`.
"""
self._reverse_mapping = {}
for key, value in self._mapping.items():
for character in value.split(','):
self._reverse_mapping[character.strip()] = key
@keep_reverse_mapping_intact
def change(self, new_keycode, character, previous_keycode=None): def change(self, new_keycode, character, previous_keycode=None):
"""Replace the mapping of a keycode with a different one. """Replace the mapping of a keycode with a different one.
@ -110,7 +113,7 @@ class Mapping:
return False return False
@update_reverse_mapping @keep_reverse_mapping_intact
def clear(self, keycode): def clear(self, keycode):
"""Remove a keycode from the mapping. """Remove a keycode from the mapping.
@ -122,13 +125,13 @@ class Mapping:
del self._mapping[keycode] del self._mapping[keycode]
self.changed = True self.changed = True
@update_reverse_mapping @keep_reverse_mapping_intact
def empty(self): def empty(self):
"""Remove all mappings.""" """Remove all mappings."""
self._mapping = {} self._mapping = {}
self.changed = True self.changed = True
@update_reverse_mapping @keep_reverse_mapping_intact
def load(self, device, preset): def load(self, device, preset):
"""Load a dumped JSON from home to overwrite the mappings.""" """Load a dumped JSON from home to overwrite the mappings."""
path = get_config_path(device, preset) path = get_config_path(device, preset)

Loading…
Cancel
Save