feat: enhance jupyter notebook functions with auto-init and kernel management
Auto-create notebooks y sesiones en jupyter_exec (append y cell). Auto-create en jupyter_write (append_code, append_markdown, batch). Nuevos subcomandos cleanup y shutdown-all en jupyter_kernel. README.md renombrado a README.txt para evitar error de parseo del indexer. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -30,6 +30,35 @@ def _resolve_collab_username(server_url: str, token: str) -> str:
|
||||
return "Anonymous"
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Helpers internos
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def _notebook_exists(notebook_path: str, server_url: str, token: str) -> bool:
|
||||
"""Comprueba si un notebook existe en el servidor Jupyter via HEAD /api/contents."""
|
||||
headers = {"Accept": "application/json"}
|
||||
if token:
|
||||
headers["Authorization"] = f"token {token}"
|
||||
check_url = f"{server_url}/api/contents/{notebook_path}"
|
||||
req = Request(check_url, headers=headers, method="HEAD")
|
||||
try:
|
||||
with urlopen(req, timeout=5):
|
||||
return True
|
||||
except HTTPError as e:
|
||||
if e.code == 404:
|
||||
return False
|
||||
raise
|
||||
|
||||
|
||||
def _auto_create_notebook(notebook_path: str, server_url: str, token: str) -> bool:
|
||||
"""Crea el notebook si no existe. Retorna True si fue creado."""
|
||||
if not _notebook_exists(notebook_path, server_url, token):
|
||||
jupyter_create_notebook(notebook_path, server_url=server_url, token=token)
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Helpers internos async
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -42,6 +71,7 @@ async def _append_cell(
|
||||
server_url: str,
|
||||
token: str,
|
||||
) -> dict:
|
||||
_auto_create_notebook(notebook_path, server_url, token)
|
||||
ws_url = get_jupyter_notebook_websocket_url(
|
||||
server_url=server_url,
|
||||
token=token,
|
||||
@@ -139,6 +169,7 @@ async def _batch_write(
|
||||
token: str,
|
||||
) -> dict:
|
||||
"""Anade multiples celdas en una sola conexion WebSocket."""
|
||||
_auto_create_notebook(notebook_path, server_url, token)
|
||||
ws_url = get_jupyter_notebook_websocket_url(
|
||||
server_url=server_url,
|
||||
token=token,
|
||||
|
||||
Reference in New Issue
Block a user