Skip to content

Commit 35b9dc6

Browse files
committed
Report errors with set sc = ##class(isc.py.Callout).GetStatus()
Added to interoperability too
1 parent dc7c701 commit 35b9dc6

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

isc/py/Callout.cls

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,5 +110,21 @@ ClassMethod Unload() As %Integer
110110
quit result
111111
}
112112

113+
/// Returns last occured exception in Python and clears it
114+
/// write ##class(isc.py.Callout).GetStatus()
115+
ClassMethod GetStatus() As %Status
116+
{
117+
do ##class(isc.py.Callout).SimpleString("import sys, traceback")
118+
set haxExc = ##class(isc.py.Callout).SimpleString("zzzerr = hasattr(sys, 'last_type')", "zzzerr")
119+
120+
quit:haxExc="False" $$$OK
121+
122+
set excText = ##class(isc.py.Callout).SimpleString("zzzerr = traceback.format_exception(sys.last_type, sys.last_value, sys.last_traceback)", "zzzerr")
123+
set excText = $zcvt($zcvt(excText, "I", "UTF8"), "I", "JSON")
124+
do ##class(isc.py.Callout).SimpleString("del zzzerr, sys.last_type, sys.last_value, sys.last_traceback")
125+
126+
quit $$$ERROR($$$GeneralError, excText)
127+
}
128+
113129
}
114130

isc/py/ens/Operation.cls

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ XData MessageMap
2424
/// Execute arbitrary Python code
2525
Method Execute(request As isc.py.msg.ExecutionRequest, Output response As isc.py.msg.ExecutionResponse) As %Status
2626
{
27+
#dim sc As %Status = $$$OK
2728
set response = ##class(isc.py.msg.ExecutionResponse).%New()
2829
set variables = $lfs(request.Variables)
2930
quit:'$Listvalid(variables) $$$ERROR($$$AttributeValueMustBeList, "variables")
@@ -36,18 +37,20 @@ Method Execute(request As isc.py.msg.ExecutionRequest, Output response As isc.py
3637
set lineSeparator = ""
3738
}
3839

39-
set value = ..Adapter.Execute(request.Code, variable, lineSeparator)
40+
set value = ..Adapter.Execute(request.Code, variable, lineSeparator, .sc)
41+
quit:$$$ISERR(sc) sc
4042

4143
do:variable'="" response.Variables.SetAt(value, variable)
4244

4345
for i=2:1:$ll(variables) {
4446
set variable = $lg(variables, i)
4547
continue:variable=""
46-
set value = ..Adapter.Execute("", variable)
48+
set value = ..Adapter.Execute("", variable, , .sc)
4749
do response.Variables.SetAt(value, variable)
50+
quit:$$$ISERR(sc)
4851
}
4952

50-
quit $$$OK
53+
quit sc
5154
}
5255

5356
/// Save context

isc/py/ens/OutboundAdapter.cls

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ Method OnTearDown() As %Status
1414
/// code - Python code to execute
1515
/// variable - variable name, which value is returned
1616
/// lineSeparator - separate code into lines. Defaults to $c(10).
17-
Method Execute(code = "", variable = "", lineSeparator As %String = {$c(10)}) As %String
17+
Method Execute(code = "", variable = "", lineSeparator As %String = {$c(10)}, Output sc As %Status) As %String
1818
{
19+
set sc = $$$OK
1920
if lineSeparator'="" {
2021
set codeList=$lfs(code, lineSeparator)
2122
} else {
@@ -26,11 +27,20 @@ Method Execute(code = "", variable = "", lineSeparator As %String = {$c(10)}) As
2627
set line = $lg(codeList, i)
2728
$$$TRACE(line)
2829
do ##class(isc.py.Callout).SimpleString(line)
30+
set sc = ##class(isc.py.Callout).GetStatus()
31+
if $$$ISERR(sc) {
32+
set sc = $$$ADDSC($$$ERROR($$$GeneralError, "Code: " _ line), sc)
33+
/// TODO continue despite error?
34+
quit
35+
}
2936
}
37+
quit:$$$ISERR(sc) ""
3038

3139
set line = $lg(codeList, $ll(codeList))
3240
$$$TRACE(line)
3341
set result = ##class(isc.py.Callout).SimpleString(line, variable)
42+
set sc = ##class(isc.py.Callout).GetStatus()
43+
set:$$$ISERR(sc) sc = $$$ADDSC($$$ERROR($$$GeneralError, "Code: " _ line _ ", Variable: " _ variable), sc)
3444
quit result
3545
}
3646

0 commit comments

Comments
 (0)