:orphan: .. _errors.py: errors.py ========= .. code-block:: py :linenos: """ App that can be used to generate errors on the Python and JS side. These errors should show tracebacks in the correct manner (and not crash the app as in #164). To test thoroughly, you should probably also set the foo and bar properties from the Python and JS console. """ from flexx import app, event, ui class Errors(ui.Widget): def init(self): with ui.VBox(): self.b1 = ui.Button(text='Raise error in JS property setter') self.b2 = ui.Button(text='Raise error in JS event handler') self.b3 = ui.Button(text='Raise error in Python property setter') self.b4 = ui.Button(text='Raise error in Python event handler') ui.Widget(flex=1) # spacer class Both: @event.prop def foo(self, v=1): return self.reciprocal(v) def reciprocal(self, v): return 1 / v def raise_error(self): raise RuntimeError('Deliberate error') class JS: @event.prop def bar(self, v): self.raise_error() # Handlers for four buttons @event.connect('b1.mouse_click') def error_in_JS_prop(self, *events): self.bar = 2 @event.connect('b2.mouse_click') def error_in_JS_handler(self, *events): self.raise_error() @event.connect('b3.mouse_click') def error_in_Py_prop(self, *events): self.foo = 0 @event.connect('b4.mouse_click') def error_in_Py_handler(self, *events): self.raise_error() if __name__ == '__main__': m = app.launch(Errors, 'browser') app.run()