Skip to content

Commit 796d792

Browse files
committed
If JSON or Pickle serialization can't be obtained return error and empty but initialized list
1 parent d4d1cb3 commit 796d792

File tree

2 files changed

+29
-20
lines changed

2 files changed

+29
-20
lines changed

isc/py/Main.cls

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,20 @@ ClassMethod GetVariableJson(variable As %String, ByRef stream As %Stream.Object,
207207
}
208208
}
209209
}
210+
211+
if $$$ISERR(sc) {
212+
if useString {
213+
set stream = ""
214+
} else {
215+
if $isObject($g(stream)) {
216+
do stream.Clear()
217+
do stream.%Save()
218+
do stream.Rewind()
219+
} else {
220+
set stream = ##class(%Stream.GlobalCharacter).%New()
221+
}
222+
}
223+
}
210224
quit sc
211225
}
212226

@@ -221,27 +235,24 @@ ClassMethod GetVariablePickle(variable As %String, ByRef stream As %Stream.Objec
221235
do ##class(isc.py.Callout).SimpleString("import pickle;")
222236

223237
set sc = ##class(isc.py.Main).ExcuteCode("pickle.dumps(" _ variable _ ")", "zzzpickle")
238+
if $$$ISOK(sc) {
239+
set sc = ##class(isc.py.Main).GetVariable("zzzpickle", ##class(isc.py.Callout).#SerializationStr, .stream, useString)
240+
do ##class(isc.py.Callout).SimpleString("del zzzpickle")
241+
}
242+
224243
if $$$ISERR(sc) {
225-
// can't pickle xyz objects
226-
if $system.Status.GetErrorText(sc) [ "can't pickle" {
227-
if useString {
228-
set stream = ""
244+
if useString {
245+
set stream = ""
246+
} else {
247+
if $isObject($g(stream)) {
248+
do stream.Clear()
249+
do stream.%Save()
250+
do stream.Rewind()
229251
} else {
230-
if $isObject($g(stream)) {
231-
do stream.Clear()
232-
do stream.%Save()
233-
do stream.Rewind()
234-
} else {
235-
set stream = ##class(%Stream.GlobalCharacter).%New()
236-
}
252+
set stream = ##class(%Stream.GlobalCharacter).%New()
237253
}
238-
set sc = $$$OK
239254
}
240-
} else {
241-
set sc = ##class(isc.py.Main).GetVariable("zzzpickle", ##class(isc.py.Callout).#SerializationStr, .stream, useString)
242-
do ##class(isc.py.Callout).SimpleString("del zzzpickle")
243255
}
244-
245256
quit sc
246257
}
247258

isc/py/data/Variable.cls

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,9 @@ ClassMethod SaveVariable(variable As %String = "", maxLength As %Integer = {$$$M
3939
set sc = ##class(isc.py.Main).GetVariable(variable, ##class(isc.py.Callout).#SerializationRepr, .repr)
4040
quit:$$$ISERR(sc) sc
4141

42-
set sc = ##class(isc.py.Main).GetVariableJson(variable, .json)
43-
quit:$$$ISERR(sc) sc
44-
42+
// Ignore errors, as some types can't be serialized.
43+
set sc = ##class(isc.py.Main).GetVariableJson(variable, .json)
4544
set sc = ##class(isc.py.Main).GetVariablePickle(variable, .pickle)
46-
quit:$$$ISERR(sc) sc
4745

4846
set obj = ..%New()
4947
set obj.Name = variable

0 commit comments

Comments
 (0)