Skip to content

Commit 7fb4b9b

Browse files
authored
fix: normalize dev version in static notebook asset URL (#9592)
1 parent edbb526 commit 7fb4b9b

2 files changed

Lines changed: 53 additions & 1 deletion

File tree

marimo/_server/templates/templates.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,8 @@ def static_notebook_template(
395395
asset_url: str | None = None,
396396
) -> str:
397397
if asset_url is None:
398-
asset_url = f"https://cdn.jsdelivr.net/npm/@marimo-team/frontend@{__version__}/dist"
398+
version = str(__version__).replace(".dev", "-dev")
399+
asset_url = f"https://cdn.jsdelivr.net/npm/@marimo-team/frontend@{version}/dist"
399400

400401
html = html.replace("{{ base_url }}", "")
401402
filename = os.path.basename(filepath or "")

tests/_server/templates/test_templates.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import unittest
77
from pathlib import Path
88
from typing import Literal
9+
from unittest.mock import patch
910

1011
from marimo._ast.app_config import _AppConfig
1112
from marimo._config.config import (
@@ -1115,6 +1116,56 @@ def test_static_malicious_code_content(self) -> None:
11151116

11161117
_assert_no_leftover_replacements(result)
11171118

1119+
def test_static_notebook_template_dev_version_in_asset_url(self) -> None:
1120+
# jsdelivr treats `.dev` as a separate path segment, so dev versions
1121+
# like "0.16.5.dev6+gabc" must be normalized to "0.16.5-dev6+gabc"
1122+
# for the CDN URL to resolve.
1123+
with patch.object(templates, "__version__", "0.16.5.dev6+gabc"):
1124+
result = templates.static_notebook_template(
1125+
self.html,
1126+
self.user_config,
1127+
self.config_overrides,
1128+
self.server_token,
1129+
self.app_config,
1130+
self.filepath,
1131+
self.code,
1132+
hash_code(self.code),
1133+
self.session_snapshot,
1134+
self.notebook_snapshot,
1135+
self.files,
1136+
)
1137+
1138+
assert (
1139+
"https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.16.5-dev6+gabc/dist"
1140+
in result
1141+
)
1142+
assert "@0.16.5.dev6" not in result
1143+
_assert_no_leftover_replacements(result)
1144+
1145+
def test_static_notebook_template_release_version_in_asset_url(
1146+
self,
1147+
) -> None:
1148+
with patch.object(templates, "__version__", "0.16.5"):
1149+
result = templates.static_notebook_template(
1150+
self.html,
1151+
self.user_config,
1152+
self.config_overrides,
1153+
self.server_token,
1154+
self.app_config,
1155+
self.filepath,
1156+
self.code,
1157+
hash_code(self.code),
1158+
self.session_snapshot,
1159+
self.notebook_snapshot,
1160+
self.files,
1161+
)
1162+
1163+
assert (
1164+
"https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.16.5/dist"
1165+
in result
1166+
)
1167+
_assert_no_leftover_replacements(result)
1168+
11181169

11191170
class TestWasmNotebookTemplate(unittest.TestCase):
11201171
def setUp(self) -> None:

0 commit comments

Comments
 (0)