Allow module check to error out when piped to /dev/null (#17505)
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user