qmk 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #!/usr/bin/env python3
  2. """CLI wrapper for running QMK commands.
  3. """
  4. import os
  5. import sys
  6. from importlib import import_module
  7. # Add the QMK python libs to our path
  8. script_dir = os.path.dirname(os.path.realpath(__file__))
  9. qmk_dir = os.path.abspath(os.path.join(script_dir, '..'))
  10. python_lib_dir = os.path.abspath(os.path.join(qmk_dir, 'lib', 'python'))
  11. sys.path.append(python_lib_dir)
  12. # If we were invoked as `qmk <cmd>` massage sys.argv into `qmk-<cmd>`.
  13. # This means we can't accept arguments to the qmk script itself.
  14. script_name = os.path.basename(sys.argv[0])
  15. if script_name == 'qmk':
  16. script_name = '-'.join((script_name, sys.argv[1]))
  17. if len(sys.argv) > 1:
  18. sys.argv = [script_name] + sys.argv[2:]
  19. else:
  20. sys.argv = [script_name]
  21. # Setup the environment
  22. from milc import cli
  23. # Look for which module to import
  24. if script_name == 'qmk':
  25. cli.print_help()
  26. exit(0)
  27. elif not script_name.startswith('qmk-'):
  28. cli.log.error('Invalid symlink, must start with "qmk-": %s', script_name)
  29. else:
  30. subcommand = script_name.replace('-', '.').replace('_', '.').split('.')
  31. subcommand.insert(1, 'cli')
  32. subcommand = '.'.join(subcommand)
  33. try:
  34. import_module(subcommand)
  35. except ModuleNotFoundError:
  36. cli.log.error('[!] Invalid symlink! Could not import %s.', subcommand)
  37. exit(1)
  38. # Change to the root of our checkout
  39. os.environ['ORIG_CWD'] = os.getcwd()
  40. os.chdir(qmk_dir)
  41. if __name__ == '__main__':
  42. cli()