Skip to content

Commit

Permalink
Allow module check to error out when piped to /dev/null (qmk#17505)
Browse files Browse the repository at this point in the history
  • Loading branch information
zvecr committed Jun 29, 2022
1 parent 74bec84 commit 7326a00
Showing 1 changed file with 22 additions and 14 deletions.
36 changes: 22 additions & 14 deletions lib/python/qmk/cli/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -177,15 +189,15 @@ 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('.')

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
Expand All @@ -195,7 +207,7 @@ def _broken_module_imports(requirements):
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]
Expand All @@ -204,24 +216,20 @@ def _broken_module_imports(requirements):

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
Expand All @@ -231,6 +239,6 @@ def _broken_module_imports(requirements):

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

0 comments on commit 7326a00

Please sign in to comment.