__init__.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import importlib
  2. import os
  3. aliases = {
  4. 'qt4': 'qt',
  5. 'gtk2': 'gtk',
  6. }
  7. backends = [
  8. 'qt', 'qt4', 'qt5',
  9. 'gtk', 'gtk2', 'gtk3',
  10. 'tk',
  11. 'wx',
  12. 'pyglet', 'glut',
  13. 'osx',
  14. ]
  15. registered = {}
  16. def register(name, inputhook):
  17. """Register the function *inputhook* as an event loop integration."""
  18. registered[name] = inputhook
  19. class UnknownBackend(KeyError):
  20. def __init__(self, name):
  21. self.name = name
  22. def __str__(self):
  23. return ("No event loop integration for {!r}. "
  24. "Supported event loops are: {}").format(self.name,
  25. ', '.join(backends + sorted(registered)))
  26. def get_inputhook_func(gui):
  27. if gui in registered:
  28. return registered[gui]
  29. if gui not in backends:
  30. raise UnknownBackend(gui)
  31. if gui in aliases:
  32. return get_inputhook_func(aliases[gui])
  33. if gui == 'qt5':
  34. os.environ['QT_API'] = 'pyqt5'
  35. gui = 'qt'
  36. mod = importlib.import_module('IPython.terminal.pt_inputhooks.'+gui)
  37. return mod.inputhook