__init__.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import os
  2. import terminado
  3. from ..utils import check_version
  4. if not check_version(terminado.__version__, '0.8.1'):
  5. raise ImportError("terminado >= 0.8.1 required, found %s" % terminado.__version__)
  6. from ipython_genutils.py3compat import which
  7. from terminado import NamedTermManager
  8. from tornado.log import app_log
  9. from notebook.utils import url_path_join as ujoin
  10. from .handlers import TerminalHandler, TermSocket
  11. from . import api_handlers
  12. def initialize(webapp, notebook_dir, connection_url, settings):
  13. if os.name == 'nt':
  14. default_shell = 'powershell.exe'
  15. else:
  16. default_shell = which('sh')
  17. shell = settings.get('shell_command',
  18. [os.environ.get('SHELL') or default_shell]
  19. )
  20. terminal_manager = webapp.settings['terminal_manager'] = NamedTermManager(
  21. shell_command=shell,
  22. extra_env={'JUPYTER_SERVER_ROOT': notebook_dir,
  23. 'JUPYTER_SERVER_URL': connection_url,
  24. },
  25. )
  26. terminal_manager.log = app_log
  27. base_url = webapp.settings['base_url']
  28. handlers = [
  29. (ujoin(base_url, r"/terminals/(\w+)"), TerminalHandler),
  30. (ujoin(base_url, r"/terminals/websocket/(\w+)"), TermSocket,
  31. {'term_manager': terminal_manager}),
  32. (ujoin(base_url, r"/api/terminals"), api_handlers.TerminalRootHandler),
  33. (ujoin(base_url, r"/api/terminals/(\w+)"), api_handlers.TerminalHandler),
  34. ]
  35. webapp.add_handlers(".*$", handlers)