Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions marimo/_server/file_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,10 @@ def reload(self) -> set[CellId_t]:

# Return the changes cell IDs
prev_cell_ids = set(prev_cell_manager.cell_ids())
changed_cell_ids: set[CellId_t] = set()
for cell_id in self.app.cell_manager.cell_ids():
current_cell_ids = set(self.app.cell_manager.cell_ids())
# Capture deleted cells
changed_cell_ids: set[CellId_t] = prev_cell_ids - current_cell_ids
for cell_id in current_cell_ids:
if cell_id not in prev_cell_ids:
changed_cell_ids.add(cell_id)
new_code = self.app.cell_manager.get_cell_code(cell_id)
Expand Down
33 changes: 23 additions & 10 deletions marimo/_server/sessions.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
from marimo._runtime.requests import (
AppMetadata,
CreationRequest,
DeleteCellRequest,
ExecuteMultipleRequest,
ExecutionRequest,
HTTPRequest,
Expand Down Expand Up @@ -1205,24 +1206,36 @@ def _handle_file_change(

# Auto-run cells if configured
if should_autorun:
changed_cell_ids_list = list(changed_cell_ids)
cell_ids_to_idx = {
cell_id: idx for idx, cell_id in enumerate(cell_ids)
}
deleted = {
cell_id
for cell_id in changed_cell_ids
if cell_id not in cell_ids_to_idx
}
changed_cell_ids_list = list(changed_cell_ids - deleted)
changed_codes = [
codes[cell_ids_to_idx[cell_id]]
for cell_id in changed_cell_ids_list
if cell_id not in deleted
]

# This runs the request and also runs UpdateCellCodes
session.put_control_request(
ExecuteMultipleRequest(
cell_ids=changed_cell_ids_list,
codes=changed_codes,
request=None,
),
from_consumer_id=None,
)
if changed_cell_ids_list:
# This runs the request and also runs UpdateCellCodes
session.put_control_request(
ExecuteMultipleRequest(
cell_ids=changed_cell_ids_list,
codes=changed_codes,
request=None,
),
from_consumer_id=None,
)
for to_delete in deleted:
session.put_control_request(
DeleteCellRequest(cell_id=to_delete),
from_consumer_id=None,
)
else:
session.write_operation(
UpdateCellCodes(
Expand Down
Loading
Loading