diff options
-rwxr-xr-x | bin/qmk | 62 | ||||
-rwxr-xr-x | lib/python/qmk/cli/hello.py | 2 | ||||
-rwxr-xr-x | lib/python/qmk/cli/pyformat.py | 2 | ||||
-rw-r--r-- | lib/python/qmk/cli/pytest.py | 2 | ||||
-rw-r--r-- | requirements-dev.txt | 4 | ||||
-rw-r--r-- | requirements.txt | 3 |
6 files changed, 50 insertions, 25 deletions
@@ -4,34 +4,58 @@ import os import sys from importlib.util import find_spec +from time import strftime +from pathlib import Path # Add the QMK python libs to our path -script_dir = os.path.dirname(os.path.realpath(__file__)) -qmk_dir = os.path.abspath(os.path.join(script_dir, '..')) -python_lib_dir = os.path.abspath(os.path.join(qmk_dir, 'lib', 'python')) -sys.path.append(python_lib_dir) +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)) + +# QMK CLI user config file +config_file = Path(Path.home() / '.config/qmk/qmk.ini') -# Make sure our modules have been setup -with open(os.path.join(qmk_dir, 'requirements.txt'), 'r') as fd: - for line in fd.readlines(): - line = line.strip().replace('<', '=').replace('>', '=') - if line[0] == '#': - continue +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('>', '=') - if '#' in line: - line = line.split('#')[0] + if line[0] == '#': + continue - module = line.split('=')[0] if '=' in line else line + if '#' in line: + line = line.split('#')[0] + + module = dict() + module['name'] = module['import'] = line.split('=')[0] if '=' in line else line - if module in ['pep8-naming']: # Not every module is importable by its own name. - continue + if module['name'] == "pep8-naming": + module['import'] = "pep8ext_naming" - if not find_spec(module): - print('Could not find module %s!', module) - print('Please run `pip3 install -r requirements.txt` to install the python dependencies.') - exit(255) + 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 +if config_file.exists() and 'developer = True' in config_file.read_text(): + developer = True + _check_modules('requirements-dev.txt') # Setup the CLI import milc # noqa diff --git a/lib/python/qmk/cli/hello.py b/lib/python/qmk/cli/hello.py index bee28c3013..5119188a07 100755 --- a/lib/python/qmk/cli/hello.py +++ b/lib/python/qmk/cli/hello.py @@ -6,7 +6,7 @@ from milc import cli @cli.argument('-n', '--name', default='World', help='Name to greet.') -@cli.subcommand('QMK Hello World.') +@cli.subcommand('QMK Hello World.', hidden=False if cli.config.user.developer else True) def hello(cli): """Log a friendly greeting. """ diff --git a/lib/python/qmk/cli/pyformat.py b/lib/python/qmk/cli/pyformat.py index a53ba40c0a..1464443804 100755 --- a/lib/python/qmk/cli/pyformat.py +++ b/lib/python/qmk/cli/pyformat.py @@ -5,7 +5,7 @@ from milc import cli import subprocess -@cli.subcommand("Format python code according to QMK's style.") +@cli.subcommand("Format python code according to QMK's style.", hidden=False if cli.config.user.developer else True) def pyformat(cli): """Format python code according to QMK's style. """ diff --git a/lib/python/qmk/cli/pytest.py b/lib/python/qmk/cli/pytest.py index 09611d750f..5417a9cb34 100644 --- a/lib/python/qmk/cli/pytest.py +++ b/lib/python/qmk/cli/pytest.py @@ -7,7 +7,7 @@ import subprocess from milc import cli -@cli.subcommand('QMK Python Unit Tests') +@cli.subcommand('QMK Python Unit Tests', hidden=False if cli.config.user.developer else True) def pytest(cli): """Run several linting/testing commands. """ diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000000..deab419cb2 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,4 @@ +# Python development requirements +nose2 +flake8 +pep8-naming diff --git a/requirements.txt b/requirements.txt index 074b11a8ce..aa6ee1ba32 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,6 +4,3 @@ appdirs argcomplete colorama hjson -nose2 -flake8 -pep8-naming |