Skip to content

Conversation

@jsquaredosquared
Copy link
Contributor

@jsquaredosquared jsquaredosquared commented Jan 16, 2026

Add support for marimo notebooks.

QC

  • The PR contains a test case for the changes or the changes are already covered by an existing test case.
  • The documentation (docs/) is updated to reflect the changes or this is not necessary (e.g. if the change does neither modify the language nor the behavior or functionalities of Snakemake).

Summary by CodeRabbit

  • Documentation

    • Updated notebook integration guidance to include Marimo notebooks alongside Jupyter, note Marimo file naming and that Marimo logs are stored as flat Python scripts, and add a Marimo project link.
  • New Features

    • Added end-user support for Marimo notebooks (.marimo.py) so they can be executed within workflows and produce flat Python log outputs.
  • Tests

    • Added test fixtures and expected results validating Marimo notebook execution.
  • Bug Fixes / Improvements

    • Improved notebook detection and clarified error messages for unsupported notebook types.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 16, 2026

📝 Walkthrough

Walkthrough

Adds Marimo notebook support: new MarimoNotebook executor class, language detection updated to recognize marimo_py for .marimo.py files, execution dispatch updated to use MarimoNotebook, tests and docs updated to reference Marimo notebooks and .marimo.py logs. (≤50 words)

Changes

Cohort / File(s) Summary
Documentation Updates
docs/snakefiles/rules.rst
Section title and content updated to reference Marimo notebooks alongside Jupyter; added Marimo project link and guidance about .marimo.py files and notebook logs.
Notebook Executor Implementation
src/snakemake/notebook.py
Added MarimoNotebook subclass of PythonScript with write_script() and execute_script() implementing Marimo export/run behavior; get_exec_class() now recognizes marimo_py; minor import/format tweaks.
Language Detection / Script Init
src/snakemake/script/__init__.py
Language tagging adjusted to emit marimo_py for filenames ending with .marimo.py; KeyError handling during kernel language extraction simplified.
Tests: New Marimo Notebook Tests & Fixtures
tests/test_marimo_notebook/Snakefile, tests/test_marimo_notebook/env.yaml, tests/test_marimo_notebook/notebook.marimo.py, tests/test_marimo_notebook/expected-results/snakemake_plus_marimo.txt
New test rule, conda env, example Marimo notebook script, and expected output added to validate Marimo integration.
Test Suite Adjustments
tests/tests.py
Import reorganization and addition of test_marimo_notebook test(s); added related error imports.

Sequence Diagram

sequenceDiagram
    participant Engine as Snakemake Engine
    participant Detector as Script Detector
    participant Executor as MarimoNotebook Executor
    participant MarimoCLI as Marimo CLI / Python Runtime
    participant FS as Filesystem

    Engine->>Detector: inspect script filename / metadata
    Detector-->>Engine: return "marimo_py"
    Engine->>Executor: instantiate MarimoNotebook / prepare preamble & temp file
    Executor->>FS: write_script(preamble, fd) (inject Marimo-compatible preamble)
    Executor->>MarimoCLI: run `marimo edit` or `python` (export/run)
    MarimoCLI-->>FS: produce flat `.py` logs / exported script
    MarimoCLI-->>Executor: process exit / exported path
    Executor-->>Engine: execution result / outputs
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • johanneskoester
  • cmeesters
🚥 Pre-merge checks | ✅ 1 | ❌ 2
❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ❓ Inconclusive The description provides a brief overview and addresses both QC checklist items, though the test case checkbox remains unchecked despite test files being added in the changeset. Verify and check the test case checkbox if the added tests in tests/test_marimo_notebook/ provide adequate coverage for the marimo notebook feature.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: adding support for marimo notebooks.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Fix all issues with AI agents
In `@src/snakemake/notebook.py`:
- Around line 287-288: The ValueError raised when exec_class is None uses an
outdated message; update the exception message in the block that checks
exec_class (the raise in notebook.py near exec_class None) to mention both
supported notebook types (e.g., "Expecting Jupyter (.ipynb) or Marimo notebook")
or a more generic "Unsupported notebook format" so it reflects Marimo support.
- Around line 264-278: In execute_script (method execute_script in the notebook
class) change the command selection to respect the edit parameter: when edit is
None (headless) call marimo run --headless (instead of marimo edit) and when
edit is truthy keep marimo edit; ensure the export step still runs when
fname_out is present (use marimo run --headless {fname} && marimo export script
... or marimo edit ... && marimo export script ... as appropriate). Also add the
missing keyword is_python_script=True to both _execute_cmd calls so they match
PythonScript.execute_script and JupyterNotebook.execute_script signatures;
retain the existing path normalization logic for fname and fname_out and pass
those normalized values into the chosen commands.

In `@src/snakemake/script/__init__.py`:
- Around line 1682-1686: The duplicate condition filename.endswith(".py")
incorrectly marks all .py files as "marimo_py"; update the inner condition to
check for the Marimo suffix (e.g., filename.endswith(".marimo.py")) so that when
filename.endswith(".py") you further test filename.endswith(".marimo.py") to set
language = "marimo_py" only for Marimo notebooks and otherwise set language =
"python"; locate the logic that assigns the language variable (uses the filename
and language symbols) and replace the inner check accordingly.
🧹 Nitpick comments (1)
src/snakemake/notebook.py (1)

246-262: The regex for indenting the preamble is fragile and may produce incorrect results.

The regex r'(?:#)\n|(?:\n)#' with replacement '\n ' seems intended to add indentation, but:

  1. It removes # characters in the process, which could corrupt comment delimiters in the preamble
  2. The preamble from PythonScript.generate_preamble is minified onto a single line (via _minify_preamble), so there won't be newlines to match

Consider using Python's textwrap.indent for cleaner indentation handling, or adjusting the preamble generation to work better with Marimo's cell structure.

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4783371 and a5697d5.

📒 Files selected for processing (3)
  • docs/snakefiles/rules.rst
  • src/snakemake/notebook.py
  • src/snakemake/script/__init__.py
🧰 Additional context used
📓 Path-based instructions (1)
**/*.py

⚙️ CodeRabbit configuration file

**/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of the self argument of methods.
Do not suggest type annotation of the cls argument of classmethods.
Do not suggest return type annotation if a function or method does not contain a return statement.

Files:

  • src/snakemake/script/__init__.py
  • src/snakemake/notebook.py
🧠 Learnings (4)
📓 Common learnings
Learnt from: zmbc
Repo: snakemake/snakemake PR: 2857
File: snakemake/notebook.py:84-90
Timestamp: 2024-10-29T17:14:13.585Z
Learning: In `snakemake/notebook.py`, when suggesting enhancements to the `execute_script` method in the `JupyterNotebook` class, ensure that changes align with both papermill and nbconvert use cases.
📚 Learning: 2024-10-29T17:14:13.585Z
Learnt from: zmbc
Repo: snakemake/snakemake PR: 2857
File: snakemake/notebook.py:84-90
Timestamp: 2024-10-29T17:14:13.585Z
Learning: In `snakemake/notebook.py`, when suggesting enhancements to the `execute_script` method in the `JupyterNotebook` class, ensure that changes align with both papermill and nbconvert use cases.

Applied to files:

  • docs/snakefiles/rules.rst
  • src/snakemake/script/__init__.py
  • src/snakemake/notebook.py
📚 Learning: 2024-10-06T14:09:54.370Z
Learnt from: johanneskoester
Repo: snakemake/snakemake PR: 3117
File: tests/test_wrapper/Snakefile:11-11
Timestamp: 2024-10-06T14:09:54.370Z
Learning: Changes made within test cases, such as in `tests/test_wrapper/Snakefile`, are for testing purposes and do not require updates to the project documentation.

Applied to files:

  • docs/snakefiles/rules.rst
  • src/snakemake/script/__init__.py
📚 Learning: 2026-01-08T11:13:20.523Z
Learnt from: johanneskoester
Repo: snakemake/snakemake PR: 3643
File: src/snakemake/sourcecache.py:474-492
Timestamp: 2026-01-08T11:13:20.523Z
Learning: In Python files under src/snakemake, ensure that the per-run cache_path for source files does not change within a single workflow run, so that HostingProviderFile._hosted_repos can be keyed reliably by repository name. This invariant should be documented and enforced (e.g., by freezing cache_path after initialization, avoiding mutations during a run, and ensuring any caching uses a run-scoped key). This pattern applies to all modules in the Snakemake source cache area where per-run caching and repository hosting are implemented.

Applied to files:

  • src/snakemake/script/__init__.py
  • src/snakemake/notebook.py
🧬 Code graph analysis (1)
src/snakemake/notebook.py (3)
src/snakemake/common/__init__.py (2)
  • is_local_file (193-194)
  • write (487-488)
src/snakemake/script/__init__.py (22)
  • script (1720-1802)
  • PythonScript (693-897)
  • ScriptBase (573-690)
  • get_source (1649-1673)
  • write_script (671-671)
  • write_script (824-826)
  • write_script (1019-1021)
  • write_script (1107-1121)
  • write_script (1194-1196)
  • write_script (1408-1410)
  • write_script (1601-1603)
  • write_script (1626-1628)
  • execute_script (674-674)
  • execute_script (865-897)
  • execute_script (1023-1034)
  • execute_script (1123-1134)
  • execute_script (1198-1199)
  • execute_script (1412-1420)
  • execute_script (1613-1614)
  • execute_script (1618-1622)
  • execute_script (1630-1631)
  • _execute_cmd (676-690)
src/snakemake/sourcecache.py (1)
  • abspath (195-196)
🪛 Ruff (0.14.11)
src/snakemake/notebook.py

264-264: Unused method argument: edit

(ARG002)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (37)
  • GitHub Check: tests (9, ubuntu-latest, py312)
  • GitHub Check: tests (7, ubuntu-latest, py312)
  • GitHub Check: tests (9, macos-latest, py313)
  • GitHub Check: tests (5, windows-2022, py313)
  • GitHub Check: tests (9, windows-2022, py313)
  • GitHub Check: tests (9, ubuntu-latest, py313)
  • GitHub Check: tests (6, macos-latest, py313)
  • GitHub Check: tests (10, macos-latest, py313)
  • GitHub Check: tests (8, windows-2022, py313)
  • GitHub Check: tests (10, windows-2022, py313)
  • GitHub Check: tests (8, ubuntu-latest, py312)
  • GitHub Check: tests (7, ubuntu-latest, py313)
  • GitHub Check: tests (3, macos-latest, py313)
  • GitHub Check: tests (7, windows-2022, py313)
  • GitHub Check: tests (6, ubuntu-latest, py313)
  • GitHub Check: tests (8, ubuntu-latest, py313)
  • GitHub Check: tests (6, windows-2022, py313)
  • GitHub Check: tests (4, ubuntu-latest, py313)
  • GitHub Check: tests (10, ubuntu-latest, py312)
  • GitHub Check: tests (10, ubuntu-latest, py313)
  • GitHub Check: tests (5, ubuntu-latest, py312)
  • GitHub Check: tests (6, ubuntu-latest, py312)
  • GitHub Check: tests (5, ubuntu-latest, py313)
  • GitHub Check: tests (4, windows-2022, py313)
  • GitHub Check: tests (5, ubuntu-latest, py311)
  • GitHub Check: tests (3, ubuntu-latest, py312)
  • GitHub Check: tests (4, ubuntu-latest, py312)
  • GitHub Check: tests (2, ubuntu-latest, py312)
  • GitHub Check: tests (3, ubuntu-latest, py313)
  • GitHub Check: tests (1, ubuntu-latest, py312)
  • GitHub Check: tests (1, windows-2022, py313)
  • GitHub Check: tests (3, windows-2022, py313)
  • GitHub Check: tests (1, ubuntu-latest, py313)
  • GitHub Check: tests (2, windows-2022, py313)
  • GitHub Check: tests (2, macos-latest, py313)
  • GitHub Check: tests (2, ubuntu-latest, py313)
  • GitHub Check: apidocs
🔇 Additional comments (2)
src/snakemake/script/__init__.py (1)

1709-1713: LGTM!

The simplified exception handling is appropriate since the exception variable wasn't being used.

docs/snakefiles/rules.rst (1)

1838-1871: LGTM!

The documentation updates clearly explain Marimo notebook support, including the .marimo.py file extension requirement and the note about logs being stored as flat Python scripts.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment on lines 264 to 278
def execute_script(self, fname, edit=None):
if fname_out := self.log.get("notebook", None):
fname_out = os.path.abspath(fname_out)

if ON_WINDOWS:
fname = fname.replace("\\", "/")
fname_out = fname_out.replace("\\", "/") if fname_out else fname_out

self._execute_cmd(
"marimo edit {fname:q} && marimo export script {fname:q} -o {fname_out:q}",
fname=fname,
fname_out=fname_out,
)
else:
self._execute_cmd("marimo edit {fname:q}", fname=fname)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

# First, let's examine the actual code at the specified lines
cat -n src/snakemake/notebook.py | sed -n '264,278p'

Repository: snakemake/snakemake

Length of output: 770


🏁 Script executed:

# Let's see the full MarimoNotebook class to understand the context
cat -n src/snakemake/notebook.py | sed -n '243,290p'

Repository: snakemake/snakemake

Length of output: 2008


🏁 Script executed:

# Let's check the JupyterNotebook.execute_script for comparison
rg -A 20 "class JupyterNotebook" src/snakemake/notebook.py

Repository: snakemake/snakemake

Length of output: 707


🏁 Script executed:

# Search for any marimo references in the codebase
rg "marimo" src/snakemake/

Repository: snakemake/snakemake

Length of output: 405


🌐 Web query:

marimo CLI commands headless execution marimo run

💡 Result:

You can run marimo non‑interactively (headless) with the CLI. Key points:

  • Start an app without opening a browser: marimo run notebook.py --headless. [1]
  • Useful flags: --port, --host, --watch, --include-code, --token/--no-token, --token-password-file, --sandbox, --trusted/untrusted. [1]
  • To pass arguments to the notebook (available via sys.argv), put them after --, e.g. marimo run notebook.py -- --lr 1e-4 --epochs 10. Use mo.cli_args() or argparse inside the notebook. [2]
  • For editing headless (no browser) use marimo edit --headless with similar server options. [1]

Sources: marimo CLI reference and running-as-app docs. [1][2]

References
[1] marimo CLI commands (marimo docs).
[2] Command line arguments / mo.cli_args() (marimo docs).


🏁 Script executed:

# Find JupyterNotebook.execute_script implementation
rg -A 30 "class JupyterNotebook" src/snakemake/notebook.py | grep -A 30 "def execute_script"

Repository: snakemake/snakemake

Length of output: 45


🏁 Script executed:

# Find PythonScript.execute_script implementation
rg -A 30 "class PythonScript" src/snakemake/script/__init__.py | grep -A 30 "def execute_script"

Repository: snakemake/snakemake

Length of output: 45


🏁 Script executed:

# Check the _execute_cmd method signature to understand is_python_script parameter
rg -B 5 "def _execute_cmd" src/snakemake/script/__init__.py

Repository: snakemake/snakemake

Length of output: 242


🏁 Script executed:

# Search for all execute_script definitions in notebook.py
rg "def execute_script" -A 15 src/snakemake/notebook.py

Repository: snakemake/snakemake

Length of output: 1234


🏁 Script executed:

# Search for is_python_script usage in the codebase
rg "is_python_script" src/snakemake/

Repository: snakemake/snakemake

Length of output: 476


🏁 Script executed:

# Look at the full _execute_cmd method
rg -A 40 "def _execute_cmd" src/snakemake/script/__init__.py | head -60

Repository: snakemake/snakemake

Length of output: 1100


🏁 Script executed:

# Get the full JupyterNotebook.execute_script implementation
rg -A 60 "class JupyterNotebook" src/snakemake/notebook.py | grep -A 60 "def execute_script"

Repository: snakemake/snakemake

Length of output: 1148


🏁 Script executed:

# Check what parameters are passed when edit is not None
rg "edit\." src/snakemake/notebook.py | head -20

Repository: snakemake/snakemake

Length of output: 336


🏁 Script executed:

# Look for where execute_script is called to understand the edit parameter
rg "execute_script\(" src/snakemake/ -B 2 -A 2

Repository: snakemake/snakemake

Length of output: 3922


🏁 Script executed:

# Get the complete JupyterNotebook.execute_script to see the full logic
cat -n src/snakemake/notebook.py | sed -n '87,160p'

Repository: snakemake/snakemake

Length of output: 3441


🏁 Script executed:

# Check PythonScript.execute_script to see is_python_script usage
cat -n src/snakemake/script/__init__.py | sed -n '350,380p'

Repository: snakemake/snakemake

Length of output: 1410


🏁 Script executed:

# Find PythonScript.execute_script
rg -A 5 "class PythonScript" src/snakemake/script/__init__.py | grep -A 5 "def execute_script"

Repository: snakemake/snakemake

Length of output: 45


🏁 Script executed:

# Get the complete PythonScript.execute_script
cat -n src/snakemake/script/__init__.py | sed -n '250,270p'

Repository: snakemake/snakemake

Length of output: 1219


🏁 Script executed:

# Search for PythonScript class definition
rg "^class PythonScript" src/snakemake/script/__init__.py -A 100 | head -120

Repository: snakemake/snakemake

Length of output: 3411


🏁 Script executed:

# Search for the execute_script method in PythonScript
rg "class PythonScript" src/snakemake/script/__init__.py -n

Repository: snakemake/snakemake

Length of output: 98


🏁 Script executed:

# Find all execute_script methods and their line numbers
rg "def execute_script" src/snakemake/script/__init__.py -n

Repository: snakemake/snakemake

Length of output: 558


🏁 Script executed:

# Get PythonScript.execute_script at line 865
cat -n src/snakemake/script/__init__.py | sed -n '865,875p'

Repository: snakemake/snakemake

Length of output: 681


🏁 Script executed:

# Let me also check around line 1023 to see which class that belongs to
cat -n src/snakemake/script/__init__.py | sed -n '1020,1030p'

Repository: snakemake/snakemake

Length of output: 653


🏁 Script executed:

# Get complete PythonScript.execute_script
cat -n src/snakemake/script/__init__.py | sed -n '865,920p'

Repository: snakemake/snakemake

Length of output: 2524


🏁 Script executed:

# Check what class is at line 1023
cat -n src/snakemake/script/__init__.py | sed -n '990,1025p'

Repository: snakemake/snakemake

Length of output: 1386


marimo edit always opens an interactive editor, breaking headless execution.

The execute_script method always runs marimo edit regardless of the edit parameter, which opens an interactive editor and blocks execution. In headless mode (where edit is None), the command should use marimo run --headless to execute the notebook without user interaction.

Additionally, is_python_script=True is missing from the _execute_cmd calls. This parameter is present in both PythonScript.execute_script (line 896) and JupyterNotebook.execute_script (line 117).

🧰 Tools
🪛 Ruff (0.14.11)

264-264: Unused method argument: edit

(ARG002)

🤖 Prompt for AI Agents
In `@src/snakemake/notebook.py` around lines 264 - 278, In execute_script (method
execute_script in the notebook class) change the command selection to respect
the edit parameter: when edit is None (headless) call marimo run --headless
(instead of marimo edit) and when edit is truthy keep marimo edit; ensure the
export step still runs when fname_out is present (use marimo run --headless
{fname} && marimo export script ... or marimo edit ... && marimo export script
... as appropriate). Also add the missing keyword is_python_script=True to both
_execute_cmd calls so they match PythonScript.execute_script and
JupyterNotebook.execute_script signatures; retain the existing path
normalization logic for fname and fname_out and pass those normalized values
into the chosen commands.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/snakemake/notebook.py`:
- Around line 246-264: The write_script method may silently fail to inject the
preamble if self.source does not contain the marker if __name__ == "__main__":;
update write_script (referencing preamble, source_with_preamble, and
self.source) to verify the substitution occurred (e.g., check that
source_with_preamble != self.source or that the target pattern exists in
self.source) and raise a clear exception or assert with an explanatory message
when injection did not happen, so callers fail fast instead of proceeding with a
missing Snakemake context.
♻️ Duplicate comments (2)
src/snakemake/notebook.py (2)

266-280: Duplicate: execute_script ignores edit/headless and omits is_python_script.

This matches an existing review finding (headless execution should not invoke interactive marimo edit, and _execute_cmd should pass is_python_script=True).

marimo CLI documentation: flags for `marimo run --headless` and `marimo edit` (host/port/no-browser)

283-290: Duplicate: update unsupported-notebook error message to mention Marimo.

The existing error text still references only Jupyter notebooks; this was already flagged.

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a5697d5 and d1614d6.

📒 Files selected for processing (1)
  • src/snakemake/notebook.py
🧰 Additional context used
📓 Path-based instructions (1)
**/*.py

⚙️ CodeRabbit configuration file

**/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of the self argument of methods.
Do not suggest type annotation of the cls argument of classmethods.
Do not suggest return type annotation if a function or method does not contain a return statement.

Files:

  • src/snakemake/notebook.py
🧠 Learnings (3)
📓 Common learnings
Learnt from: zmbc
Repo: snakemake/snakemake PR: 2857
File: snakemake/notebook.py:84-90
Timestamp: 2024-10-29T17:14:13.585Z
Learning: In `snakemake/notebook.py`, when suggesting enhancements to the `execute_script` method in the `JupyterNotebook` class, ensure that changes align with both papermill and nbconvert use cases.
📚 Learning: 2024-10-29T17:14:13.585Z
Learnt from: zmbc
Repo: snakemake/snakemake PR: 2857
File: snakemake/notebook.py:84-90
Timestamp: 2024-10-29T17:14:13.585Z
Learning: In `snakemake/notebook.py`, when suggesting enhancements to the `execute_script` method in the `JupyterNotebook` class, ensure that changes align with both papermill and nbconvert use cases.

Applied to files:

  • src/snakemake/notebook.py
📚 Learning: 2026-01-08T11:13:20.523Z
Learnt from: johanneskoester
Repo: snakemake/snakemake PR: 3643
File: src/snakemake/sourcecache.py:474-492
Timestamp: 2026-01-08T11:13:20.523Z
Learning: In Python files under src/snakemake, ensure that the per-run cache_path for source files does not change within a single workflow run, so that HostingProviderFile._hosted_repos can be keyed reliably by repository name. This invariant should be documented and enforced (e.g., by freezing cache_path after initialization, avoiding mutations during a run, and ensuring any caching uses a run-scoped key). This pattern applies to all modules in the Snakemake source cache area where per-run caching and repository hosting are implemented.

Applied to files:

  • src/snakemake/notebook.py
🧬 Code graph analysis (1)
src/snakemake/notebook.py (2)
src/snakemake/common/__init__.py (2)
  • is_local_file (193-194)
  • write (487-488)
src/snakemake/script/__init__.py (21)
  • script (1720-1802)
  • PythonScript (693-897)
  • ScriptBase (573-690)
  • write_script (671-671)
  • write_script (824-826)
  • write_script (1019-1021)
  • write_script (1107-1121)
  • write_script (1194-1196)
  • write_script (1408-1410)
  • write_script (1601-1603)
  • write_script (1626-1628)
  • execute_script (674-674)
  • execute_script (865-897)
  • execute_script (1023-1034)
  • execute_script (1123-1134)
  • execute_script (1198-1199)
  • execute_script (1412-1420)
  • execute_script (1613-1614)
  • execute_script (1618-1622)
  • execute_script (1630-1631)
  • _execute_cmd (676-690)
🪛 Ruff (0.14.11)
src/snakemake/notebook.py

266-266: Unused method argument: edit

(ARG002)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (46)
  • GitHub Check: tests (6, ubuntu-latest, py311)
  • GitHub Check: tests (7, ubuntu-latest, py312)
  • GitHub Check: tests (8, windows-2022, py313)
  • GitHub Check: tests (10, ubuntu-latest, py311)
  • GitHub Check: tests (9, windows-2022, py313)
  • GitHub Check: tests (10, ubuntu-latest, py312)
  • GitHub Check: tests (8, ubuntu-latest, py312)
  • GitHub Check: tests (8, ubuntu-latest, py311)
  • GitHub Check: tests (7, macos-latest, py313)
  • GitHub Check: tests (3, ubuntu-latest, py312)
  • GitHub Check: tests (10, ubuntu-latest, py313)
  • GitHub Check: tests (10, windows-2022, py313)
  • GitHub Check: tests (8, ubuntu-latest, py313)
  • GitHub Check: tests (6, windows-2022, py313)
  • GitHub Check: tests (7, ubuntu-latest, py313)
  • GitHub Check: tests (7, ubuntu-latest, py311)
  • GitHub Check: tests (5, ubuntu-latest, py311)
  • GitHub Check: tests (7, windows-2022, py313)
  • GitHub Check: tests (4, ubuntu-latest, py312)
  • GitHub Check: tests (9, ubuntu-latest, py311)
  • GitHub Check: tests (5, ubuntu-latest, py312)
  • GitHub Check: tests (8, macos-latest, py313)
  • GitHub Check: tests (4, ubuntu-latest, py311)
  • GitHub Check: tests (4, macos-latest, py313)
  • GitHub Check: tests (6, ubuntu-latest, py313)
  • GitHub Check: tests (9, ubuntu-latest, py312)
  • GitHub Check: tests (5, ubuntu-latest, py313)
  • GitHub Check: tests (3, windows-2022, py313)
  • GitHub Check: tests (9, ubuntu-latest, py313)
  • GitHub Check: tests (5, windows-2022, py313)
  • GitHub Check: tests (4, windows-2022, py313)
  • GitHub Check: tests (1, ubuntu-latest, py311)
  • GitHub Check: tests (3, ubuntu-latest, py311)
  • GitHub Check: tests (4, ubuntu-latest, py313)
  • GitHub Check: tests (6, ubuntu-latest, py312)
  • GitHub Check: tests (3, ubuntu-latest, py313)
  • GitHub Check: tests (2, ubuntu-latest, py313)
  • GitHub Check: tests (2, windows-2022, py313)
  • GitHub Check: tests (2, ubuntu-latest, py312)
  • GitHub Check: tests (2, ubuntu-latest, py311)
  • GitHub Check: tests (1, ubuntu-latest, py313)
  • GitHub Check: tests (2, macos-latest, py313)
  • GitHub Check: tests (1, ubuntu-latest, py312)
  • GitHub Check: tests (1, windows-2022, py313)
  • GitHub Check: tests (1, macos-latest, py313)
  • GitHub Check: apidocs
🔇 Additional comments (2)
src/snakemake/notebook.py (2)

2-12: Import updates look good.

The added imports are appropriate for the Marimo notebook integration.


90-92: Papermill command refactor preserves placeholder behavior.

No issues with the updated formatting logic.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

@jsquaredosquared jsquaredosquared marked this pull request as draft January 16, 2026 19:23
@jsquaredosquared jsquaredosquared marked this pull request as ready for review January 17, 2026 18:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant