pylint 9.70

xkb
sezanzeb 4 years ago committed by sezanzeb
parent 62ba26345d
commit 8561bfac63

@ -0,0 +1,5 @@
[_]
disable=
# that is the standard way to import GTK afaik
wrong-import-position

@ -28,6 +28,7 @@ Depending on how those packages are called in your distro:
# Tests
```bash
pylint keymapper --extension-pkg-whitelist=evdev
sudo python3 setup.py install && python3 tests/test.py
```

@ -61,9 +61,9 @@ class _Config:
self.save_config()
return
with open(CONFIG_PATH, 'r') as f:
with open(CONFIG_PATH, 'r') as file:
self._config = copy.deepcopy(INITIAL_CONFIG)
self._config.update(json.load(f))
self._config.update(json.load(file))
logger.info('Loaded config from %s', CONFIG_PATH)
def clear_config(self):
@ -77,11 +77,11 @@ class _Config:
os.makedirs(os.path.dirname(CONFIG_PATH), exist_ok=True)
os.mknod(CONFIG_PATH)
with open(CONFIG_PATH, 'w') as f:
json.dump(self._config, f, indent=4)
with open(CONFIG_PATH, 'w') as file:
json.dump(self._config, file, indent=4)
logger.info('Saved config to %s', CONFIG_PATH)
shutil.chown(CONFIG_PATH, os.getlogin())
f.write('\n')
file.write('\n')
config = _Config()

@ -33,6 +33,9 @@ from keymapper.injector import KeycodeInjector
from keymapper.mapping import Mapping
# TODO service file in data for a root daemon
def is_service_running():
"""Check if the daemon is running."""
try:
@ -50,13 +53,13 @@ def get_dbus_interface():
'long as the window is open.'
)
return Daemon(autoload=False)
else:
logger.debug('Found the daemon process')
bus = dbus.SessionBus()
remote_object = bus.get_object('com.keymapper.Control', '/')
interface = dbus.Interface(remote_object, 'com.keymapper.Interface')
logger.debug('Connected to dbus')
return interface
logger.debug('Found the daemon process')
bus = dbus.SessionBus()
remote_object = bus.get_object('com.keymapper.Control', '/')
interface = dbus.Interface(remote_object, 'com.keymapper.Interface')
logger.debug('Connected to dbus')
return interface
class Daemon(service.Object):
@ -91,7 +94,7 @@ class Daemon(service.Object):
self.injectors[device].stop_injecting()
# TODO if ss is the correct signature for multiple parameters, add an
# example to https://gitlab.freedesktop.org/dbus/dbus-python/-/blob/master/doc/tutorial.txt # noqa
# example to https://gitlab.freedesktop.org/dbus/dbus-python/-/blob/master/doc/tutorial.txt # noqa pylint: disable=line-too-long
@dbus.service.method(
'com.keymapper.Interface',
in_signature='ss'

@ -24,12 +24,10 @@
import multiprocessing
import time
import copy
import evdev
from keymapper.logger import logger
from keymapper.config import config
_devices = None

@ -49,4 +49,4 @@ class ErrorDialog:
builder.get_object('primary_error_label').set_text(primary)
builder.get_object('secondary_error_label').set_text(secondary)
error_dialog.run()
error_dialog.hide()
error_dialog.hide()

@ -29,7 +29,6 @@ from gi.repository import Gtk, GLib
from keymapper.state import custom_mapping
from keymapper.logger import logger
from keymapper.reader import keycode_reader
CTX_KEYCODE = 2
@ -52,10 +51,12 @@ class Row(Gtk.ListBoxRow):
self.put_together(keycode, character)
def get_keycode(self):
"""Get the integer keycode from the left column."""
keycode = self.keycode.get_label()
return int(keycode) if keycode else None
def get_character(self):
"""Get the assigned character from the middle column."""
character = self.character_input.get_text()
return character if character else None
@ -107,7 +108,7 @@ class Row(Gtk.ListBoxRow):
"""Mark this row as unchanged."""
self.get_style_context().remove_class('changed')
def on_character_input_change(self, entry):
def on_character_input_change(self, _):
keycode = self.get_keycode()
character = self.get_character()

@ -43,7 +43,8 @@ def unsaved_changes_dialog():
dialog.show()
response = dialog.run()
dialog.hide()
if response == Gtk.ResponseType.ACCEPT:
return CONTINUE
else:
return GO_BACK
return GO_BACK

@ -22,7 +22,6 @@
"""User Interface."""
import dbus
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('GLib', '2.0')
@ -78,9 +77,9 @@ class Window:
self.selected_preset = None
css_provider = Gtk.CssProvider()
with open(get_data_path('style.css'), 'r') as f:
with open(get_data_path('style.css'), 'r') as file:
data = (
f.read() +
file.read() +
'\n.changed{background-color:' +
get_selected_row_bg() +
';}\n'
@ -196,10 +195,10 @@ class Window:
key_list = self.get('key_list')
key_list.forall(lambda row: row.unhighlight())
def on_window_event(self, button, event):
def on_window_event(self, *args):
"""Write down the pressed key in the UI.
Works with any mouse and keyboard event.
Triggered from any mouse and keyboard event.
"""
# to capture regular keyboard keys or extra-mouse keys
keycode = keycode_reader.read()
@ -221,7 +220,7 @@ class Window:
if isinstance(focused, Gtk.ToggleButton) and isinstance(row, Row):
row.set_new_keycode(keycode)
def on_apply_system_layout_clicked(self, button):
def on_apply_system_layout_clicked(self, _):
"""Load the mapping."""
self.dbus.stop_injecting(self.selected_device)
self.get('status_bar').push(
@ -237,7 +236,7 @@ class Window:
new_name = self.get('preset_name_input').get_text()
try:
self.save_config()
if new_name != '' and new_name != self.selected_preset:
if new_name not in ['', self.selected_preset]:
rename_preset(
self.selected_device,
self.selected_preset,
@ -251,19 +250,19 @@ class Window:
CTX_SAVE,
f'Saved "{self.selected_preset}"'
)
except PermissionError as e:
except PermissionError as error:
self.get('status_bar').push(
CTX_ERROR,
'Error: Permission denied!'
)
logger.error(str(e))
logger.error(str(error))
def on_delete_preset_clicked(self, button):
def on_delete_preset_clicked(self, _):
"""Delete a preset from the file system."""
delete_preset(self.selected_device, self.selected_preset)
self.populate_presets()
def on_apply_preset_clicked(self, button):
def on_apply_preset_clicked(self, _):
"""Apply a preset without saving changes."""
logger.debug(
'Applying preset "%s" for "%s"',
@ -310,7 +309,7 @@ class Window:
lambda: keycode_reader.start_reading(self.selected_device)
)
def on_create_preset_clicked(self, button):
def on_create_preset_clicked(self, _):
"""Create a new preset and select it."""
if custom_mapping.changed:
if unsaved_changes_dialog() == GO_BACK:
@ -322,12 +321,12 @@ class Window:
custom_mapping.save(self.selected_device, new_preset)
self.get('preset_selection').append(new_preset, new_preset)
self.get('preset_selection').set_active_id(new_preset)
except PermissionError as e:
except PermissionError as error:
self.get('status_bar').push(
CTX_ERROR,
'Error: Permission denied!'
)
logger.error(str(e))
logger.error(str(error))
def on_select_preset(self, dropdown):
"""Show the mappings of the preset."""
@ -360,6 +359,7 @@ class Window:
self.add_empty()
def add_empty(self):
"""Add one empty row for a single mapped key."""
empty = Row(
window=self,
delete_callback=self.on_row_removed

@ -34,7 +34,7 @@ import multiprocessing
import evdev
from keymapper.logger import logger
from keymapper.getdevices import get_devices, refresh_devices
from keymapper.getdevices import get_devices
from keymapper.state import custom_mapping, system_mapping
@ -126,8 +126,8 @@ def _start_injecting_worker(path, pipe, mapping):
try:
device = _grab(path)
except Exception as e:
logger.error(e)
except Exception as error:
logger.error(error)
pipe.send(FAILED)
return
@ -200,9 +200,12 @@ def is_numlock_on():
r'Num Lock:\s+(.+?)\s',
xset_q
)
if num_lock_status is not None:
return num_lock_status[1] == 'on'
return False
def toggle_numlock():
"""Turn the numlock on or off."""
@ -223,6 +226,7 @@ def toggle_numlock():
def ensure_numlock(func):
"""Decorator to reset the numlock to its initial state afterwards."""
def wrapped(*args, **kwargs):
# for some reason, grabbing a device can modify the num lock state.
# remember it and apply back later

@ -41,10 +41,11 @@ logging.Logger.spam = spam
class Formatter(logging.Formatter):
"""Overwritten Formatter to print nicer logs."""
def format(self, record):
"""Overwritten format function."""
debug = logger.level <= logging.DEBUG
if record.levelno == logging.INFO and not debug:
# if not launched with --debug, then don't print "INFO:"
self._style._fmt = '%(message)s' # noqa
self._style._fmt = '%(message)s' # pylint: disable=line-too-long
else:
# see https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit
# for those numbers
@ -82,6 +83,7 @@ logging.getLogger('asyncio').setLevel(logging.WARNING)
def is_debug():
"""True, if the logger is currently in DEBUG or SPAM mode."""
return logger.level <= logging.DEBUG
@ -101,10 +103,6 @@ def update_verbosity(debug):
logger.setLevel(logging.INFO)
def debug_log_on():
return logger.level == logging.DEBUG
def add_filehandler():
"""Clear the existing logfile and start logging to it."""
# jack also logs to ~/.log

@ -110,8 +110,8 @@ class Mapping:
logger.error('Tried to load non-existing preset "%s"', path)
return
with open(path, 'r') as f:
mapping = json.load(f)
with open(path, 'r') as file:
mapping = json.load(file)
for keycode, character in mapping.items():
try:
keycode = int(keycode)
@ -134,9 +134,9 @@ class Mapping:
# if this is done with sudo rights, give the file to the user
shutil.chown(path, os.getlogin())
with open(path, 'w') as f:
json.dump(self._mapping, f, indent=4)
f.write('\n')
with open(path, 'w') as file:
json.dump(self._mapping, file, indent=4)
file.write('\n')
self.changed = False

@ -74,8 +74,6 @@ def get_any_preset():
return None, None
any_device = list(devices)[0]
any_preset = (get_presets(any_device) or [None])[0]
if any_preset is not None:
any_preset = any_preset
return any_device, any_preset

@ -22,7 +22,6 @@
"""Keeps reading keycodes in the background for the UI to use."""
import os
import evdev
from keymapper.logger import logger

@ -36,18 +36,18 @@ class Install(DistUtilsExtra.auto.install_auto):
policy_path = '/usr/share/polkit-1/actions/org.key-mapper.policy'
with open(policy_path, 'r') as f:
contents = f.read()
with open(policy_path, 'r') as file:
contents = file.read()
if '{executable}' not in contents:
# already done previously
return
with open(policy_path, 'w') as f:
with open(policy_path, 'w') as file:
print(
f'Inserting the correct path "{executable}" into '
'org.key-mapper.policy'
)
f.write(contents.format(
file.write(contents.format(
executable=executable
))

@ -110,13 +110,13 @@ class TestInjector(unittest.TestCase):
self.assertEqual(len(injector2.processes), 1)
self.assertEqual(injector2.processes[0].is_alive(), True)
injector2.processes[0].join()
except Exception as e:
except Exception as error:
# make sure to not cause race conditions for other tests
# if this test fails
if injector2 is not None:
for p in injector2.processes:
p.join()
raise e
raise error
def test_injector(self):
device = get_devices()['device 2']

Loading…
Cancel
Save