summary refs log tree commit diff
path: root/lib/python
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python')
-rw-r--r--lib/python/qmk/cli/__init__.py7
-rw-r--r--lib/python/qmk/cli/cformat.py5
-rwxr-xr-xlib/python/qmk/cli/doctor.py11
-rwxr-xr-xlib/python/qmk/cli/json2c.py8
-rwxr-xr-xlib/python/qmk/cli/kle2json.py8
-rwxr-xr-xlib/python/qmk/cli/new/keymap.py2
-rw-r--r--lib/python/qmk/keymap.py5
7 files changed, 22 insertions, 24 deletions
diff --git a/lib/python/qmk/cli/__init__.py b/lib/python/qmk/cli/__init__.py
index eb524217cd..394a1353bc 100644
--- a/lib/python/qmk/cli/__init__.py
+++ b/lib/python/qmk/cli/__init__.py
@@ -2,6 +2,8 @@
 
 We list each subcommand here explicitly because all the reliable ways of searching for modules are slow and delay startup.
 """
+import sys
+
 from milc import cli
 
 from . import cformat
@@ -19,5 +21,6 @@ from . import new
 from . import pyformat
 from . import pytest
 
-if not hasattr(cli, 'config_source'):
-    cli.log.warning("Your QMK CLI is out of date. Please upgrade with `pip3 install --upgrade qmk` or by using your package manager.")
+if sys.version_info[0] != 3 or sys.version_info[1] < 6:
+    cli.log.error('Your Python is too old! Please upgrade to Python 3.6 or later.')
+    exit(127)
diff --git a/lib/python/qmk/cli/cformat.py b/lib/python/qmk/cli/cformat.py
index 536ee30fd8..0cd8b6192a 100644
--- a/lib/python/qmk/cli/cformat.py
+++ b/lib/python/qmk/cli/cformat.py
@@ -22,9 +22,8 @@ def cformat_run(files, all_files):
             cli.log.warn('No changes detected. Use "qmk cformat -a" to format all files')
             return False
         if files and all_files:
-            cli.log.warning('Filenames passed with -a, only formatting: %s', ','.join(cli.args.files))
-        # 3.6+: Can remove the str casting, python will cast implicitly
-        subprocess.run(clang_format + [str(file) for file in files], check=True)
+            cli.log.warning('Filenames passed with -a, only formatting: %s', ','.join(files))
+        subprocess.run(clang_format + [file for file in files], check=True)
         cli.log.info('Successfully formatted the C code.')
 
     except subprocess.CalledProcessError:
diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py
index 3c74fae699..3c46248372 100755
--- a/lib/python/qmk/cli/doctor.py
+++ b/lib/python/qmk/cli/doctor.py
@@ -135,16 +135,15 @@ def check_udev_rules():
     }
 
     if udev_dir.exists():
-        udev_rules = [str(rule_file) for rule_file in udev_dir.glob('*.rules')]
+        udev_rules = [rule_file for rule_file in udev_dir.glob('*.rules')]
         current_rules = set()
 
         # Collect all rules from the config files
         for rule_file in udev_rules:
-            with open(rule_file, "r") as fd:
-                for line in fd.readlines():
-                    line = line.strip()
-                    if not line.startswith("#") and len(line):
-                        current_rules.add(line)
+            for line in rule_file.read_text().split('\n'):
+                line = line.strip()
+                if not line.startswith("#") and len(line):
+                    current_rules.add(line)
 
         # Check if the desired rules are among the currently present rules
         for bootloader, rules in desired_rules.items():
diff --git a/lib/python/qmk/cli/json2c.py b/lib/python/qmk/cli/json2c.py
index 46c4d04bb7..5218405070 100755
--- a/lib/python/qmk/cli/json2c.py
+++ b/lib/python/qmk/cli/json2c.py
@@ -10,29 +10,27 @@ import qmk.path
 
 @cli.argument('-o', '--output', arg_only=True, type=qmk.path.normpath, help='File to write to')
 @cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages")
-@cli.argument('filename', arg_only=True, help='Configurator JSON file')
+@cli.argument('filename', type=qmk.path.normpath, arg_only=True, help='Configurator JSON file')
 @cli.subcommand('Creates a keymap.c from a QMK Configurator export.')
 def json2c(cli):
     """Generate a keymap.c from a configurator export.
 
     This command uses the `qmk.keymap` module to generate a keymap.c from a configurator export. The generated keymap is written to stdout, or to a file if -o is provided.
     """
-    cli.args.filename = qmk.path.normpath(cli.args.filename)
-
     # Error checking
     if not cli.args.filename.exists():
         cli.log.error('JSON file does not exist!')
         cli.print_usage()
         exit(1)
 
-    if str(cli.args.filename) == '-':
+    if cli.args.filename.name == '-':
         # TODO(skullydazed/anyone): Read file contents from STDIN
         cli.log.error('Reading from STDIN is not (yet) supported.')
         cli.print_usage()
         exit(1)
 
     # Environment processing
-    if cli.args.output == ('-'):
+    if cli.args.output.name == ('-'):
         cli.args.output = None
 
     # Parse the configurator json
diff --git a/lib/python/qmk/cli/kle2json.py b/lib/python/qmk/cli/kle2json.py
index 3ed6594e0b..5268462f92 100755
--- a/lib/python/qmk/cli/kle2json.py
+++ b/lib/python/qmk/cli/kle2json.py
@@ -37,12 +37,12 @@ def kle2json(cli):
         file_path = Path(os.environ['ORIG_CWD'], cli.args.filename)
     # Check for valid file_path for more graceful failure
     if not file_path.exists():
-        return cli.log.error('File {fg_cyan}%s{style_reset_all} was not found.', str(file_path))
+        return cli.log.error('File {fg_cyan}%s{style_reset_all} was not found.', file_path)
     out_path = file_path.parent
     raw_code = file_path.open().read()
     # Check if info.json exists, allow overwrite with force
     if Path(out_path, "info.json").exists() and not cli.args.force:
-        cli.log.error('File {fg_cyan}%s/info.json{style_reset_all} already exists, use -f or --force to overwrite.', str(out_path))
+        cli.log.error('File {fg_cyan}%s/info.json{style_reset_all} already exists, use -f or --force to overwrite.', out_path)
         return False
     try:
         # Convert KLE raw to x/y coordinates (using kle2xy package from skullydazed)
@@ -69,7 +69,7 @@ def kle2json(cli):
     # Replace layout in keyboard json
     keyboard = keyboard.replace('"LAYOUT_JSON_HERE"', layout)
     # Write our info.json
-    file = open(str(out_path) + "/info.json", "w")
+    file = open(out_path + "/info.json", "w")
     file.write(keyboard)
     file.close()
-    cli.log.info('Wrote out {fg_cyan}%s/info.json', str(out_path))
+    cli.log.info('Wrote out {fg_cyan}%s/info.json', out_path)
diff --git a/lib/python/qmk/cli/new/keymap.py b/lib/python/qmk/cli/new/keymap.py
index 5ae2628565..474fe7974f 100755
--- a/lib/python/qmk/cli/new/keymap.py
+++ b/lib/python/qmk/cli/new/keymap.py
@@ -40,7 +40,7 @@ def new_keymap(cli):
         exit(1)
 
     # create user directory with default keymap files
-    shutil.copytree(str(keymap_path_default), str(keymap_path_new), symlinks=True)
+    shutil.copytree(keymap_path_default, keymap_path_new, symlinks=True)
 
     # end message to user
     cli.log.info("%s keymap directory created in: %s", keymap, keymap_path_new)
diff --git a/lib/python/qmk/keymap.py b/lib/python/qmk/keymap.py
index 4aa87de20d..69cdc8d5b5 100644
--- a/lib/python/qmk/keymap.py
+++ b/lib/python/qmk/keymap.py
@@ -1,6 +1,5 @@
 """Functions that help you work with QMK keymaps.
 """
-import os
 from pathlib import Path
 
 import qmk.path
@@ -127,7 +126,7 @@ def list_keymaps(keyboard_name):
         while kb_path != keyboards_dir:
             keymaps_dir = kb_path / "keymaps"
             if keymaps_dir.exists():
-                names = names.union([keymap for keymap in os.listdir(str(keymaps_dir)) if (keymaps_dir / keymap / "keymap.c").is_file()])
+                names = names.union([keymap for keymap in keymaps_dir.iterdir() if (keymaps_dir / keymap / "keymap.c").is_file()])
             kb_path = kb_path.parent
 
         # if community layouts are supported, get them
@@ -135,6 +134,6 @@ def list_keymaps(keyboard_name):
             for layout in rules_mk["LAYOUTS"].split():
                 cl_path = Path.cwd() / "layouts" / "community" / layout
                 if cl_path.exists():
-                    names = names.union([keymap for keymap in os.listdir(str(cl_path)) if (cl_path / keymap / "keymap.c").is_file()])
+                    names = names.union([keymap for keymap in cl_path.iterdir() if (cl_path / keymap / "keymap.c").is_file()])
 
     return sorted(names)