From 7326a0051b1acdd8fbce741c16000866530773a2 Mon Sep 17 00:00:00 2001
From: Joel Challis <git@zvecr.com>
Date: Thu, 30 Jun 2022 00:33:59 +0100
Subject: Allow module check to error out when piped to /dev/null (#17505)

---
 lib/python/qmk/cli/__init__.py | 36 ++++++++++++++++++++++--------------
 1 file changed, 22 insertions(+), 14 deletions(-)

(limited to 'lib/python')

diff --git a/lib/python/qmk/cli/__init__.py b/lib/python/qmk/cli/__init__.py
index d7192631a3..02c6d1cbf4 100644
--- a/lib/python/qmk/cli/__init__.py
+++ b/lib/python/qmk/cli/__init__.py
@@ -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
-- 
cgit v1.2.3