~ruther/qmk_firmware

7326a0051b1acdd8fbce741c16000866530773a2 — Joel Challis 3 years ago 74bec84
Allow module check to error out when piped to /dev/null (#17505)

1 files changed, 22 insertions(+), 14 deletions(-)

M lib/python/qmk/cli/__init__.py
M lib/python/qmk/cli/__init__.py => lib/python/qmk/cli/__init__.py +22 -14
@@ 156,6 156,18 @@ def _broken_module_imports(requirements):
    return False


def _yesno(*args):
    """Wrapper to only prompt if interactive
    """
    return sys.stdout.isatty() and yesno(*args)


def _eprint(errmsg):
    """Wrapper to print to stderr
    """
    print(errmsg, file=sys.stderr)


# Make sure our python is new enough
#
# Supported version information


@@ 177,7 189,7 @@ def _broken_module_imports(requirements):
# void: 3.9

if sys.version_info[0] != 3 or sys.version_info[1] < 7:
    print('Error: Your Python is too old! Please upgrade to Python 3.7 or later.')
    _eprint('Error: Your Python is too old! Please upgrade to Python 3.7 or later.')
    exit(127)

milc_version = __VERSION__.split('.')


@@ 185,7 197,7 @@ milc_version = __VERSION__.split('.')
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)}')
    _eprint(f'Your MILC library is too old! Please upgrade: python3 -m pip install -U -r {str(requirements)}')
    exit(127)

# Make sure we can run binaries in the same directory as our Python interpreter


@@ 195,7 207,7 @@ if python_dir not in os.environ['PATH'].split(':'):
    os.environ['PATH'] = ":".join((python_dir, os.environ['PATH']))

# Check to make sure we have all our dependencies
msg_install = f'Please run `{sys.executable} -m pip install -r %s` to install required python dependencies.'
msg_install = f'\nPlease run `{sys.executable} -m pip install -r %s` to install required python dependencies.'
args = sys.argv[1:]
while args and args[0][0] == '-':
    del args[0]


@@ 204,24 216,20 @@ 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?'):
        if _yesno('Would you like to install the required Python modules?'):
            _install_deps('requirements.txt')
        else:
            print()
            print(msg_install % (str(Path('requirements.txt').resolve()),))
            print()
            _eprint(msg_install % (str(Path('requirements.txt').resolve()),))
            exit(1)

    if cli.config.user.developer and _broken_module_imports('requirements-dev.txt'):
        if yesno('Would you like to install the required developer Python modules?'):
        if _yesno('Would you like to install the required developer Python modules?'):
            _install_deps('requirements-dev.txt')
        elif yesno('Would you like to disable developer mode?'):
        elif _yesno('Would you like to disable developer mode?'):
            _run_cmd(sys.argv[0], 'config', 'user.developer=None')
        else:
            print()
            print(msg_install % (str(Path('requirements-dev.txt').resolve()),))
            print('You can also turn off developer mode: qmk config user.developer=None')
            print()
            _eprint(msg_install % (str(Path('requirements-dev.txt').resolve()),))
            _eprint('You can also turn off developer mode: qmk config user.developer=None')
            exit(1)

# Import our subcommands


@@ 231,6 239,6 @@ for subcommand in subcommands:

    except (ImportError, ModuleNotFoundError) as e:
        if safe_command:
            print(f'Warning: Could not import {subcommand}: {e.__class__.__name__}, {e}')
            _eprint(f'Warning: Could not import {subcommand}: {e.__class__.__name__}, {e}')
        else:
            raise