From a090b86b5e4cb1c5c6103c461f7c3a62204fd2b1 Mon Sep 17 00:00:00 2001 From: Johan Euphrosine Date: Fri, 1 Nov 2013 11:44:05 -0700 Subject: [PATCH] eg/tryhy: add error handling --- eg/tryhy/js/repl.js | 5 +++-- eg/tryhy/main.hy | 11 ++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/eg/tryhy/js/repl.js b/eg/tryhy/js/repl.js index 5f72fcd..91a22bb 100644 --- a/eg/tryhy/js/repl.js +++ b/eg/tryhy/js/repl.js @@ -6,8 +6,9 @@ $(document).ready(function(){ else return true; }, commandHandle:function(line, report){ - $.get("/eval", {code: line}, function(data) { - report([{msg : data, className:"jquery-console-message-value"}]); + $.getJSON("/eval", {code: line}, function(data) { + report([{msg : data.stdout, className:"jquery-console-message-value"}, + {msg : data.stderr, className:"jquery-console-message-error"}]); }); }, animateScroll:true, diff --git a/eg/tryhy/main.hy b/eg/tryhy/main.hy index 9914643..a1ec69b 100644 --- a/eg/tryhy/main.hy +++ b/eg/tryhy/main.hy @@ -2,20 +2,25 @@ (import [hy.cmdline [HyREPL]] [sys] [StringIO [StringIO]] - [flask [Flask redirect request]]) + [flask [Flask redirect request]] + [json]) (defclass MyHyREPL [HyREPL] [[eval (fn [self code] (setv old-stdout sys.stdout) + (setv old-stderr sys.stderr) (setv fake-stdout (StringIO)) (setv sys.stdout fake-stdout) + (setv fake-stderr (StringIO)) + (setv sys.stderr fake-stderr) (HyREPL.runsource self code "" "single") (setv sys.stdout old-stdout) - (fake-stdout.getvalue))]]) + (setv sys.stderr old-stderr) + {"stdout" (fake-stdout.getvalue) "stderr" (fake-stderr.getvalue)})]]) (def repl (MyHyREPL)) (def app (Flask __name__)) (route hello "/" [name] (.format "(hello \"{0}!\")" name)) -(route eval-get "/eval" [] (repl.eval (get request.args "code"))) +(route eval-get "/eval" [] (json.dumps (repl.eval (get request.args "code"))))