From 44c74bd069f574eb9f346f7c66e2d6cc520152e6 Mon Sep 17 00:00:00 2001 From: "Lumberbot (aka Jack)" <39504233+meeseeksmachine@users.noreply.github.com> Date: Fri, 29 Aug 2025 09:02:27 -0700 Subject: [PATCH] Backport PR #1714: Fix: Drive issue on rewritting JSON file (#1716) Co-authored-by: martinRenou --- packages/contents/src/drivecontents.ts | 2 +- ui-tests/contents/file-access-3.ipynb | 46 ++++++++++++++++++++++++++ ui-tests/test/service-worker.spec.ts | 9 +++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 ui-tests/contents/file-access-3.ipynb diff --git a/packages/contents/src/drivecontents.ts b/packages/contents/src/drivecontents.ts index fcd9f4a9..ff46777d 100644 --- a/packages/contents/src/drivecontents.ts +++ b/packages/contents/src/drivecontents.ts @@ -225,7 +225,7 @@ export class DriveContentsProcessor implements IDriveContentsProcessor { async put(request: TDriveRequest<'put'>): Promise> { await this.contentsManager.save(request.path, { content: - request.data.format === 'json' + request.data.format === 'json' && request.data.data ? JSON.parse(request.data.data) : request.data.data, type: 'file', diff --git a/ui-tests/contents/file-access-3.ipynb b/ui-tests/contents/file-access-3.ipynb new file mode 100644 index 00000000..2e6c7ca9 --- /dev/null +++ b/ui-tests/contents/file-access-3.ipynb @@ -0,0 +1,46 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "e3c4d1de", + "metadata": {}, + "outputs": [], + "source": [ + "s = R\"\"\"\n", + "{\n", + " \"args\": {}\n", + "}\n", + "\"\"\"\n", + "import json\n", + "\n", + "data = json.loads(s)\n", + "with open(\"data.json\", \"w\") as f:\n", + " json.dump(data, f)\n", + "with open(\"data.json\", \"w\") as f:\n", + " json.dump(data, f)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python (Pyodide)", + "language": "python", + "name": "python" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/ui-tests/test/service-worker.spec.ts b/ui-tests/test/service-worker.spec.ts index 875b65bf..f344f5d5 100644 --- a/ui-tests/test/service-worker.spec.ts +++ b/ui-tests/test/service-worker.spec.ts @@ -95,4 +95,13 @@ test.describe('Service Worker Tests', () => { expect(output).toBeTruthy(); expect(output![0]).toContain(expectedOutput); }); + + test('Create a JSON file twice does not crash the kernel', async ({ page }) => { + const notebook = 'file-access-3.ipynb'; + + await page.menu.clickMenuItem('Settings>Autosave Documents'); + + await page.notebook.open(notebook); + await page.notebook.runCellByCell(); + }); });