Skip to content

Commit d89a91a

Browse files
committed
Change notebook code cell stream output schema
1 parent 1f4b08a commit d89a91a

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

javascript/src/ycell.ts

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -761,13 +761,35 @@ export class YCodeCell
761761
return JSONExt.deepCopy(this._youtputs.toArray());
762762
}
763763

764+
createOutputs(outputs: Array<nbformat.IOutput>): Array<any> {
765+
const newOutputs: Array<any> = [];
766+
for (const output of outputs) {
767+
if (output.output_type === 'stream') {
768+
const { text, ...outputWithoutText } = output;
769+
const _newOutput: { [id: string]: any } = outputWithoutText;
770+
const newText = new Y.Array();
771+
newText.push(text as string[]);
772+
_newOutput['text'] = newText;
773+
const newOutput = new Y.Map();
774+
for (const [key, value] of Object.entries(_newOutput)) {
775+
newOutput.set(key, value);
776+
}
777+
newOutputs.push(newOutput);
778+
} else {
779+
newOutputs.push(output);
780+
}
781+
}
782+
return newOutputs;
783+
}
784+
764785
/**
765786
* Replace all outputs.
766787
*/
767788
setOutputs(outputs: Array<nbformat.IOutput>): void {
768789
this.transact(() => {
769790
this._youtputs.delete(0, this._youtputs.length);
770-
this._youtputs.insert(0, outputs);
791+
const newOutputs = this.createOutputs(outputs);
792+
this._youtputs.insert(0, newOutputs);
771793
}, false);
772794
}
773795

@@ -789,7 +811,8 @@ export class YCodeCell
789811
end < this._youtputs.length ? end - start : this._youtputs.length - start;
790812
this.transact(() => {
791813
this._youtputs.delete(start, fin);
792-
this._youtputs.insert(start, outputs);
814+
const newOutputs = this.createOutputs(outputs);
815+
this._youtputs.insert(start, newOutputs);
793816
}, false);
794817
}
795818

jupyter_ydoc/ynotebook.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,12 @@ def create_ycell(self, value: Dict[str, Any]) -> Map:
157157
if "attachments" in cell and not cell["attachments"]:
158158
del cell["attachments"]
159159
elif cell_type == "code":
160-
cell["outputs"] = Array(cell.get("outputs", []))
160+
outputs = cell.get("outputs", [])
161+
for idx, output in enumerate(outputs):
162+
if output.get("output_type") == "stream":
163+
output["text"] = Array(output.get("text", []))
164+
outputs[idx] = Map(output)
165+
cell["outputs"] = Array(outputs)
161166

162167
return Map(cell)
163168

0 commit comments

Comments
 (0)