Skip to content

Commit bc3b521

Browse files
committed
Version runnable example URLs to avoid stale cached code
1 parent 5ba86c9 commit bc3b521

2 files changed

Lines changed: 13 additions & 1 deletion

File tree

docs/_ext/demo.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from __future__ import annotations
99

10+
import hashlib
1011
import html
1112
import importlib.util
1213
import pathlib
@@ -116,6 +117,8 @@ def run(self) -> list[Node]:
116117
here = ''
117118
svg_uri = relative_uri(here, f'_static/demos/{demo.svg_path.name}')
118119
source_uri = relative_uri(here, f'_static/examples/{stem}.py')
120+
source_hash: str = hashlib.sha256(source.encode('utf-8')).hexdigest()
121+
source_uri += f'?v={source_hash}'
119122

120123
container = nodes.container(classes=['demo'])
121124
container += nodes.raw(

tests/console/test_homepage.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ def _stale_home_styles(route: Route) -> None:
3838
)
3939

4040

41+
def _stale_example_source(route: Route) -> None:
42+
route.fulfill(
43+
content_type='text/plain',
44+
body="print('Cached example from an earlier build')",
45+
)
46+
47+
4148
def test_homepage_loads_python_only_after_run(
4249
server: str,
4350
page: tuple[Page, list[str]],
@@ -155,12 +162,14 @@ def test_guide_example_has_one_code_view_and_coloured_output(
155162
path: str,
156163
) -> None:
157164
browser_page: Page = page[0]
165+
browser_page.route('**/_static/examples/*.py', _stale_example_source)
158166
browser_page.goto(f'{server}/{path}')
159167
source: Locator = browser_page.locator('.demo-source')
160168
editor: Locator = browser_page.locator('.demo-editor')
161169
playwright_api.expect(editor).to_be_attached()
162170
playwright_api.expect(source).to_be_visible()
163171
playwright_api.expect(editor).to_be_hidden()
172+
assert editor.input_value().strip() == source.inner_text().strip()
164173
browser_page.get_by_role('button', name='Run', exact=True).click()
165174
_wait_for_terminal_text(browser_page, '100%', BOOT_TIMEOUT_MS)
166175
browser_page.wait_for_function(
@@ -286,7 +295,7 @@ def test_homepage_source_failure_keeps_readable_example(
286295
page: tuple[Page, list[str]],
287296
) -> None:
288297
browser_page: Page = page[0]
289-
browser_page.route('**/_static/examples/homepage-quickstart.py', _missing)
298+
browser_page.route('**/_static/examples/homepage-quickstart.py*', _missing)
290299
browser_page.goto(f'{server}/index.html')
291300
playwright_api.expect(
292301
browser_page.locator('.home-quickstart .demo-run')

0 commit comments

Comments
 (0)