瀏覽代碼

add more error handling

Steven Silvester 6 年之前
父節點
當前提交
9e25e995ba
共有 3 個文件被更改,包括 31 次插入9 次删除
  1. 7 6
      examples/app/index.js
  2. 13 2
      examples/example_check.py
  3. 11 1
      jupyterlab/browser_check.py

+ 7 - 6
examples/app/index.js

@@ -8,8 +8,7 @@ __webpack_public_path__ = URLExt.join(
   'example/static/'
 );
 
-window.addEventListener('load', function() {
-  require('font-awesome/css/font-awesome.min.css');
+window.addEventListener('load', async function() {
   var JupyterLab = require('@jupyterlab/application').JupyterLab;
 
   var mods = [
@@ -47,8 +46,10 @@ window.addEventListener('load', function() {
     version: require('./package.json').version
   });
   lab.registerPluginModules(mods);
-  lab.start().then(() => {
-    // eslint-disable-next-line
-    console.log('Example started!');
-  });
+  // eslint - disable no - console.
+  console.log('Starting app');
+  await lab.start();
+  console.log('App started, waiting for restore');
+  await lab.restored;
+  console.log('Example started!');
 });

+ 13 - 2
examples/example_check.py

@@ -11,6 +11,7 @@ e.g. python example_check.py ./app
 """
 from concurrent.futures import ThreadPoolExecutor
 import importlib.util
+import logging
 from os import path as osp
 import os
 import shutil
@@ -32,8 +33,18 @@ mod = importlib.util.module_from_spec(spec)
 spec.loader.exec_module(mod)
 
 
-class ExampleCheckApp(mod.ExampleApp):
+class LogErrorHandler(logging.Handler):
+    """A handler that exits with 1 on a logged error."""
+    def emit(self, record):
+        if record.level < logging.ERROR:
+            return
+        print(record.msg, file=sys.stderr)
+        logging.shutdown()
+        sys.exit(1)
+
 
+class ExampleCheckApp(mod.ExampleApp):
+    """An example app that adds instrumentation."""
     open_browser = Bool(False)
     default_url = '/example'
     base_url = '/foo/'
@@ -43,6 +54,7 @@ class ExampleCheckApp(mod.ExampleApp):
         pool = ThreadPoolExecutor()
         future = pool.submit(run_browser, self.display_url)
         IOLoop.current().add_future(future, self._browser_finished)
+        self.log.addHandler(LogErrorHandler())
         super().start()
 
     def _browser_finished(self, future):
@@ -50,7 +62,6 @@ class ExampleCheckApp(mod.ExampleApp):
             sys.exit(future.result())
         except Exception as e:
             self.log.error(str(e))
-            sys.exit(1)
 
 
 def run_browser(url):

+ 11 - 1
jupyterlab/browser_check.py

@@ -30,6 +30,16 @@ test_aliases = dict(aliases)
 test_aliases['app-dir'] = 'BrowserApp.app_dir'
 
 
+class LogErrorHandler(logging.Handler):
+    """A handler that exits with 1 on a logged error."""
+    def emit(self, record):
+        if record.level < logging.ERROR:
+            return
+        print(record.msg, file=sys.stderr)
+        logging.shutdown()
+        sys.exit(1)
+
+
 class BrowserApp(LabApp):
 
     open_browser = Bool(False)
@@ -47,6 +57,7 @@ class BrowserApp(LabApp):
         pool = ThreadPoolExecutor()
         future = pool.submit(run_browser, self.display_url)
         IOLoop.current().add_future(future, self._browser_finished)
+        self.log.addHandler(LogErrorHandler())
         super(BrowserApp, self).start()
 
     def _browser_finished(self, future):
@@ -54,7 +65,6 @@ class BrowserApp(LabApp):
             sys.exit(future.result())
         except Exception as e:
             self.log.error(str(e))
-            sys.exit(1)
 
 
 def run_browser(url):