Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure that safe_commands always run #13199

Merged
merged 2 commits into from
Jun 14, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions bin/qmk
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ def main():
print('Warning: The bin/qmk script is being deprecated. Please install the QMK CLI: python3 -m pip install qmk', file=sys.stderr)

# Import the subcommands
import milc.subcommand.config # noqa
import qmk.cli # noqa

# Execute
Expand Down
75 changes: 49 additions & 26 deletions lib/python/qmk/cli/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,42 @@
'setup',
]

subcommands = [
'qmk.cli.bux',
'qmk.cli.c2json',
'qmk.cli.cformat',
'qmk.cli.chibios.confmigrate',
'qmk.cli.clean',
'qmk.cli.compile',
'qmk.cli.console',
'qmk.cli.docs',
'qmk.cli.doctor',
'qmk.cli.fileformat',
'qmk.cli.flash',
'qmk.cli.format.json',
'qmk.cli.generate.api',
'qmk.cli.generate.config_h',
'qmk.cli.generate.dfu_header',
'qmk.cli.generate.docs',
'qmk.cli.generate.info_json',
'qmk.cli.generate.keyboard_h',
'qmk.cli.generate.layouts',
'qmk.cli.generate.rgb_breathe_table',
'qmk.cli.generate.rules_mk',
'qmk.cli.hello',
'qmk.cli.info',
'qmk.cli.json2c',
'qmk.cli.lint',
'qmk.cli.list.keyboards',
'qmk.cli.list.keymaps',
'qmk.cli.kle2json',
'qmk.cli.multibuild',
'qmk.cli.new.keyboard',
'qmk.cli.new.keymap',
'qmk.cli.pyformat',
'qmk.cli.pytest',
]


def _run_cmd(*command):
"""Run a command in a subshell.
Expand Down Expand Up @@ -113,7 +149,7 @@ def _broken_module_imports(requirements):

milc_version = __VERSION__.split('.')

if int(milc_version[0]) < 2 and int(milc_version[1]) < 3:
if int(milc_version[0]) < 2 and int(milc_version[1]) < 4:
requirements = Path('requirements.txt').resolve()

print(f'Your MILC library is too old! Please upgrade: python3 -m pip install -U -r {str(requirements)}')
Expand All @@ -125,7 +161,9 @@ def _broken_module_imports(requirements):
while args and args[0][0] == '-':
del args[0]

if not args or args[0] not in safe_commands:
safe_command = args and args[0] in safe_commands

if not safe_command:
if _broken_module_imports('requirements.txt'):
if yesno('Would you like to install the required Python modules?'):
_run_cmd(sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt')
Expand All @@ -148,27 +186,12 @@ def _broken_module_imports(requirements):
exit(1)

# Import our subcommands
from . import bux # noqa
from . import c2json # noqa
from . import cformat # noqa
from . import chibios # noqa
from . import clean # noqa
from . import compile # noqa
from milc.subcommand import config # noqa
from . import console # noqa
from . import docs # noqa
from . import doctor # noqa
from . import fileformat # noqa
from . import flash # noqa
from . import format # noqa
from . import generate # noqa
from . import hello # noqa
from . import info # noqa
from . import json2c # noqa
from . import lint # noqa
from . import list # noqa
from . import kle2json # noqa
from . import multibuild # noqa
from . import new # noqa
from . import pyformat # noqa
from . import pytest # noqa
for subcommand in subcommands:
try:
__import__(subcommand)

except ModuleNotFoundError as e:
if safe_command:
print(f'Warning: Could not import {subcommand}: {e.__class__.__name__}, {e}')
else:
raise
1 change: 0 additions & 1 deletion lib/python/qmk/cli/chibios/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +0,0 @@
from . import confmigrate
1 change: 0 additions & 1 deletion lib/python/qmk/cli/format/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +0,0 @@
from . import json
9 changes: 0 additions & 9 deletions lib/python/qmk/cli/generate/__init__.py
Original file line number Diff line number Diff line change
@@ -1,9 +0,0 @@
from . import api
from . import config_h
from . import dfu_header
from . import docs
from . import info_json
from . import keyboard_h
from . import layouts
from . import rgb_breathe_table
from . import rules_mk
2 changes: 0 additions & 2 deletions lib/python/qmk/cli/list/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +0,0 @@
from . import keyboards
from . import keymaps
2 changes: 0 additions & 2 deletions lib/python/qmk/cli/new/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +0,0 @@
from . import keyboard
from . import keymap