Creating Jupytext markdown cells can cause notebook to crash
vandalt opened this issue · comments
Describe the bug
Creating a markdown cell with the # %% [markdown]
jupytext format can cause the notebook to crash if using snippets or adding the comment only after writing %% [markdown]
.
To Reproduce
Steps to reproduce the behavior:
- Open a jupynium file and sync it
- Create a markdown cell either with a snippet (e.g. with LuaSnip and
nvim-cmp
) or by first writing%% [markdown]
and then adding#
at the start of line. - See error
Expected behavior
A markdown cell should be created in the notebook, as is the case when typing # %% [markdown]
manually.
Output when using jupynium
command
The output below is when using a snippet. to generate the cell.
One thing I noted is that the line right before the notebook call is
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'CursorMovedI', [1, 4, 4]]
when crashing (both with snippet or when manually adding #
after the rest), and
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'CursorMovedI', [1, 1, 1]]
when working. The numbers at the end are different. I thought this might be the cause, though I have no idea what they mean, nor how the Selenium and Jupyter APIs work.
Crashing example
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, [''], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['m'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['ma'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['mar'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['mark'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['mark/'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['mark/m'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['mark/ma'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['mark/mar'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['mark/mark'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['mark/markd'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['mark/markdo'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['mark/markdow'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['mark/markdown'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['m'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['mark/markdown'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, [''], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['# %% [markdown]'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['# %% [markdown]'], 4, 5, 5]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'CursorMovedI', [1, 4, 4]]
jupynium.buffer: 254 - INFO - Inserting cell 1 from Notebook
jupynium.jupyter_notebook_selenium: 19 - INFO - New markdown (jupytext) cell created below cell 0
jupynium.buffer: 398 - INFO - Converting to markdown cells: [1, 2]
jupynium.cmds.jupynium: 507 - ERROR - Uncaught exception occurred while processing events. Detaching nvim.
Traceback (most recent call last):
File "/home/vandal/.local/pipx/venvs/jupynium/lib/python3.10/site-packages/jupynium/cmds/jupynium.py", line 502, in main
status, rpcrequest_event = process_events(nvim_info, driver)
File "/home/vandal/.local/pipx/venvs/jupynium/lib/python3.10/site-packages/jupynium/events_control.py", line 217, in process_events
prev_lazy_args_per_buf.process_all(nvim_info, driver)
File "/home/vandal/.local/pipx/venvs/jupynium/lib/python3.10/site-packages/jupynium/events_control.py", line 137, in process_all
lazy_args.process(nvim_info, driver, bufnr)
File "/home/vandal/.local/pipx/venvs/jupynium/lib/python3.10/site-packages/jupynium/events_control.py", line 116, in process
process_on_lines_event(nvim_info, driver, bufnr, self.on_lines_args)
File "/home/vandal/.local/pipx/venvs/jupynium/lib/python3.10/site-packages/jupynium/events_control.py", line 546, in process_on_lines_event
nvim_info.jupbufs[bufnr].process_on_lines(
File "/home/vandal/.local/pipx/venvs/jupynium/lib/python3.10/site-packages/jupynium/buffer.py", line 134, in process_on_lines
self._partial_sync_to_notebook(
File "/home/vandal/.local/pipx/venvs/jupynium/lib/python3.10/site-packages/jupynium/buffer.py", line 400, in _partial_sync_to_notebook
driver.execute_script(
File "/home/vandal/.local/pipx/venvs/jupynium/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 500, in execute_script
return self.execute(command, {"script": script, "args": converted_args})["value"]
File "/home/vandal/.local/pipx/venvs/jupynium/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 440, in execute
self.error_handler.check_response(response)
File "/home/vandal/.local/pipx/venvs/jupynium/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 245, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.JavascriptException: Message: TypeError: string is undefined
Stacktrace:
splitLinesAuto<@http://localhost:8888/static/notebook/js/main.min.js?v=bac2262d97e0eab7b445494fe686be11796512a6902a434d05aa653112727106f1684f27b88c5d6
f856ec07bf47f23b510f08badb65d627f757e61eca804345b:774:27
splitLines@http://localhost:8888/static/notebook/js/main.min.js?v=bac2262d97e0eab7b445494fe686be11796512a6902a434d05aa653112727106f1684f27b88c5d6f856e
c07bf47f23b510f08badb65d627f757e61eca804345b:6557:14
Doc.prototype<.setValue<@http://localhost:8888/static/notebook/js/main.min.js?v=bac2262d97e0eab7b445494fe686be11796512a6902a434d05aa653112727106f1684f
27b88c5d6f856ec07bf47f23b510f08badb65d627f757e61eca804345b:6211:36
docMethodOp/<@http://localhost:8888/static/notebook/js/main.min.js?v=bac2262d97e0eab7b445494fe686be11796512a6902a434d05aa653112727106f1684f27b88c5d6f8
56ec07bf47f23b510f08badb65d627f757e61eca804345b:4038:22
CodeMirror.prototype[prop]@http://localhost:8888/static/notebook/js/main.min.js?v=bac2262d97e0eab7b445494fe686be11796512a6902a434d05aa653112727106f168
4f27b88c5d6f856ec07bf47f23b510f08badb65d627f757e61eca804345b:9845:40
TextCell.prototype.set_text@http://localhost:8888/static/notebook/js/main.min.js?v=bac2262d97e0eab7b445494fe686be11796512a6902a434d05aa653112727106f16
84f27b88c5d6f856ec07bf47f23b510f08badb65d627f757e61eca804345b:59692:26
Notebook.prototype.transfer_to_new_cell@http://localhost:8888/static/notebook/js/main.min.js?v=bac2262d97e0eab7b445494fe686be11796512a6902a434d05aa653
112727106f1684f27b88c5d6f856ec07bf47f23b510f08badb65d627f757e61eca804345b:68324:21
Notebook.prototype.to_markdown@http://localhost:8888/static/notebook/js/main.min.js?v=bac2262d97e0eab7b445494fe686be11796512a6902a434d05aa653112727106
f1684f27b88c5d6f856ec07bf47f23b510f08badb65d627f757e61eca804345b:68408:22
Notebook.prototype.cells_to_markdown@http://localhost:8888/static/notebook/js/main.min.js?v=bac2262d97e0eab7b445494fe686be11796512a6902a434d05aa653112
727106f1684f27b88c5d6f856ec07bf47f23b510f08badb65d627f757e61eca804345b:68391:18
@http://localhost:8888/notebooks/Untitled5.ipynb?kernel_name=comm8-plan:2:24
@http://localhost:8888/notebooks/Untitled5.ipynb?kernel_name=comm8-plan:3:8
[I 16:13:52.416 NotebookApp] Starting buffering for 929e72b9-1150-4ee6-9588-49430fe1eaf0:21863c760c7f45509e6789f6d9574497
Working example
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['# %% [markd]'], 0, 1, 1]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'CursorMovedI', [1, 0, 0]]
jupynium.buffer: 258 - INFO - Cell 0 type change to code from Notebook
jupynium.buffer: 391 - INFO - Converting to code cells: [1]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['# %% [markdo]'], 0, 1, 1]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'CursorMovedI', [1, 0, 0]]
jupynium.buffer: 258 - INFO - Cell 0 type change to code from Notebook
jupynium.buffer: 391 - INFO - Converting to code cells: [1]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['# %% [markdow]'], 0, 1, 1]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'CursorMovedI', [1, 0, 0]]
jupynium.buffer: 258 - INFO - Cell 0 type change to code from Notebook
jupynium.buffer: 391 - INFO - Converting to code cells: [1]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['# %% [markdown]'], 0, 1, 1]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'CursorMovedI', [1, 0, 0]]
jupynium.buffer: 258 - INFO - Cell 0 type change to markdown (jupytext) from Notebook
jupynium.buffer: 398 - INFO - Converting to markdown cells: [1]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'CursorMovedI', [1, 0, 0]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'on_lines', [1, ['# %% [markdown]', '# '], 0, 1, 2]]
jupynium.events_control: 195 - INFO - Event from nvim: ['notification', 'CursorMovedI', [1, 1, 1]]
jupynium.buffer: 258 - INFO - Cell 0 type change to markdown (jupytext) from Notebook
jupynium.buffer: 398 - INFO - Converting to markdown cells: [1]
Output of jupynium --version
Jupynium v0.1.2.dev55+g8a1b2be.d20230311
Output of nvim --version
NVIM v0.8.3
Build type: Release
LuaJIT 2.1.0-beta3
Compiled by builduser
Features: +acl +iconv +tui
See ":help feature-compile"
system vimrc file: "$VIM/sysinit.vim"
fall-back for $VIM: "/usr/share/nvim"
Run :checkhealth for more info
Thanks for reporting. Based on the log, it looks like after creating a cell it wants to set the cell content, and the type of the content is not a string and rater is undefined. It looks like a simple type mismatch issue. Does it only happen with markdown cells though?
Yes, creating a regular cell seems to work fine with snippets or by adding %%
first and then #
.
I still can't figure out what the exact cause is. Based on the fact that it only happens with Jupytext style markdown separator, it looks like a problem with the implementation of #52 (removing comments for the markdown cells)