2019-07-15 12:14:27 -07:00
#!/usr/bin/env python3
"""CLI wrapper for running QMK commands.
"""
import os
import sys
from importlib.util import find_spec
2019-11-27 21:27:06 +01:00
from time import strftime
from pathlib import Path
2019-07-15 12:14:27 -07:00
# Add the QMK python libs to our path
2019-11-27 21:27:06 +01:00
script_dir = Path ( os . path . realpath ( __file__ )) . parent
qmk_dir = script_dir . parent
python_lib_dir = Path ( qmk_dir / 'lib' / 'python' ) . resolve ()
sys . path . append ( str ( python_lib_dir ))
2019-07-15 12:14:27 -07:00
2020-02-20 01:10:56 +01:00
# Setup the CLI
import milc # noqa
2019-07-15 12:14:27 -07:00
2019-11-27 21:27:06 +01:00
def _check_modules ( requirements ):
""" Check if the modules in the given requirements.txt are available.
"""
with Path ( qmk_dir / requirements ) . open () as fd :
for line in fd . readlines ():
line = line . strip () . replace ( '<' , '=' ) . replace ( '>' , '=' )
2019-07-15 12:14:27 -07:00
2020-03-22 19:48:30 +01:00
if len ( line ) == 0 or line [ 0 ] == '#' or line . startswith ( '-r' ):
2019-11-27 21:27:06 +01:00
continue
if '#' in line :
line = line . split ( '#' )[ 0 ]
module = dict ()
module [ 'name' ] = module [ 'import' ] = line . split ( '=' )[ 0 ] if '=' in line else line
2019-11-23 10:42:39 -08:00
# Not every module is importable by its own name.
2019-11-27 21:27:06 +01:00
if module [ 'name' ] == "pep8-naming" :
module [ 'import' ] = "pep8ext_naming"
2019-11-23 10:42:39 -08:00
2019-11-27 21:27:06 +01:00
if not find_spec ( module [ 'import' ]):
print ( 'Could not find module %s !' % module [ 'name' ])
if developer :
print ( 'Please run `pip3 install -r requirements-dev.txt` to install the python development dependencies or turn off developer mode with `qmk config user.developer=None`.' )
print ()
else :
print ( 'Please run `pip3 install -r requirements.txt` to install the python dependencies.' )
print ()
exit ( 255 )
developer = False
# Make sure our modules have been setup
_check_modules ( 'requirements.txt' )
# For developers additional modules are needed
2020-02-20 01:10:56 +01:00
if milc . cli . config . user . developer :
2019-11-27 21:27:06 +01:00
developer = True
_check_modules ( 'requirements-dev.txt' )
2019-07-15 12:14:27 -07:00
2019-09-22 13:25:33 -07:00
2019-08-31 03:23:36 +10:00
milc . EMOJI_LOGLEVELS [ 'INFO' ] = ' {fg_blue} Ψ {style_reset_all} '
2019-07-15 12:14:27 -07:00
2019-09-22 13:25:33 -07:00
@milc.cli.entrypoint ( 'QMK Helper Script' )
def qmk_main ( cli ):
"""The function that gets run when no subcommand is provided.
"""
cli . print_help ()
2019-07-15 12:14:27 -07:00
2019-09-22 13:25:33 -07:00
def main ():
"""Setup our environment and then call the CLI entrypoint.
"""
# Change to the root of our checkout
os . environ [ 'ORIG_CWD' ] = os . getcwd ()
os . chdir ( qmk_dir )
2019-07-15 12:14:27 -07:00
2019-09-22 13:25:33 -07:00
# Import the subcommands
2019-11-20 14:54:18 -08:00
import qmk.cli # noqa
2019-07-15 12:14:27 -07:00
2019-09-22 13:25:33 -07:00
# Execute
2019-08-21 23:40:24 -07:00
return_code = milc . cli ()
2019-09-22 13:25:33 -07:00
2019-08-21 23:40:24 -07:00
if return_code is False :
exit ( 1 )
2019-09-22 13:25:33 -07:00
elif return_code is not True and isinstance ( return_code , int ):
if return_code < 0 or return_code > 255 :
milc . cli . log . error ( 'Invalid return_code: %d ' , return_code )
exit ( 255 )
2019-08-21 23:40:24 -07:00
exit ( return_code )
2019-09-22 13:25:33 -07:00
exit ( 0 )
if __name__ == '__main__' :
main ()