From 0eac382913a50df028c7c58ed5b2a2a50f41dd65 Mon Sep 17 00:00:00 2001 From: Kiyoon Kim Date: Sat, 15 Jun 2024 11:09:36 +0900 Subject: [PATCH] fix: error in empty ipynb and default kernel not existing --- lua/jupynium/cells.lua | 4 +++- src/jupynium/events_control.py | 42 +++++++++++++++++++++++++--------- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/lua/jupynium/cells.lua b/lua/jupynium/cells.lua index 2dae8a8..7105e49 100644 --- a/lua/jupynium/cells.lua +++ b/lua/jupynium/cells.lua @@ -8,7 +8,9 @@ function M.line_type(line) line = vim.api.nvim_buf_get_lines(0, line - 1, line, false)[1] end - if vim.startswith(line, "# %% [md]") or vim.startswith(line, "# %% [markdown]") then + if line == nil then + return "empty" + elseif vim.startswith(line, "# %% [md]") or vim.startswith(line, "# %% [markdown]") then return "cell separator: markdown" elseif vim.fn.trim(line) == "# %%" then return "cell separator: code" diff --git a/src/jupynium/events_control.py b/src/jupynium/events_control.py index 5178012..f93d204 100644 --- a/src/jupynium/events_control.py +++ b/src/jupynium/events_control.py @@ -77,6 +77,10 @@ } +class StartSyncError(Exception): + pass + + @dataclass class OnLinesArgs: lines: list[str] @@ -313,7 +317,16 @@ def start_sync_with_filename( ) if kernel_name is None: kernel_name = "python3" - kernel_btn = driver.find_element(By.ID, f"kernel-{kernel_name}") + + try: + kernel_btn = driver.find_element(By.ID, f"kernel-{kernel_name}") + except NoSuchElementException: + # match anything with ID starting with kernel- + kernel_btns = driver.find_elements(By.CSS_SELECTOR, "[id^=kernel-]") + if len(kernel_btns) == 0: + raise StartSyncError("No kernel found in the kernel list.") from None + kernel_btn = kernel_btns[0] + driver.execute_script("arguments[0].scrollIntoView(true);", kernel_btn) prev_windows = set(driver.window_handles) try: @@ -448,16 +461,23 @@ def process_request_event(nvim_info: NvimInfo, driver: WebDriver, event: list[An if ipynb_filename != "" and not ipynb_filename.lower().endswith(".ipynb"): ipynb_filename += ".ipynb" - start_sync_with_filename( - bufnr, - ipynb_filename, - ask, - content, - buf_filetype, - conda_or_venv_path, - nvim_info, - driver, - ) + try: + start_sync_with_filename( + bufnr, + ipynb_filename, + ask, + content, + buf_filetype, + conda_or_venv_path, + nvim_info, + driver, + ) + except StartSyncError as e: + nvim_info.nvim.lua.Jupynium_notify.error( + ["Error while starting sync:", str(e)], async_=True + ) + event[3].send("N") + return False, None else: # start sync with tab index tab_idx = int(ipynb_filename)