def run(self): env = self.state.document.settings.env app = env.app rst = [] versions = [ x.rstrip(".rst") for x in listdir(join(app.srcdir, "docs", "releases")) ] versions.sort(key=V, reverse=True) for v in versions: rst_text = f".. include:: releases/{v}.rst" try: hashes = get_sri_hashes_for_version(v) rst_text += _SRI_SECTION % v for key, val in sorted(hashes.items()): rst_text += f" ``{key}``, ``{val}``\n" except KeyError: if v == __version__: raise RuntimeError( f"Missing SRI Hash for full release version {v!r}") entry = self._parse(rst_text, "<bokeh-releases>") rst.extend(entry) return rst
def test_js_resources_hashes_mock_full(monkeypatch) -> None: monkeypatch.setattr(buv, "__version__", "1.4.0") monkeypatch.setattr(resources, "__version__", "1.4.0") r = resources.JSResources() assert r.mode == "cdn" min_hashes = set(v for k, v in resources.get_sri_hashes_for_version("1.4.0").items() if k.endswith(".min.js") and "api" not in k) assert set(r.hashes.values()) == min_hashes
def test_js_resources_hashes_mock_full(self, monkeypatch: pytest.MonkeyPatch) -> None: monkeypatch.setattr(buv, "__version__", "1.4.0") monkeypatch.setattr(resources, "__version__", "1.4.0") r = deepcopy(resources.JSResources()) # Skip bokeh-mathjax for older versions r.js_components.remove("bokeh-mathjax") assert r.mode == "cdn" hashes = resources.get_sri_hashes_for_version("1.4.0") min_hashes = {v for k, v in hashes.items() if k.endswith(".min.js") and "api" not in k} assert set(r.hashes.values()) == min_hashes
def run(self): rst = [] srcdir = self.env.app.srcdir versions = [ x.rstrip(".rst") for x in listdir(join(srcdir, "docs", "releases")) if x.endswith(".rst") ] versions.sort(key=V, reverse=True) for v in versions: rst += self.parse(f".. include:: releases/{v}.rst", "<bokeh-releases>") try: hashes = get_sri_hashes_for_version(v) rst += [sri_table(version=v, table=sorted(hashes.items()))] except KeyError: if v == __version__: raise RuntimeError( f"Missing SRI Hash for full release version {v!r}") return rst
def bokeh_cdn_resources(): """Create script to load Bokeh resources from CDN based on installed bokeh version. Returns: script -- script to load resources from CDN """ included_resources = [ f'bokeh-{bokeh_release_ver}.min.js', f'bokeh-api-{bokeh_release_ver}.min.js', f'bokeh-tables-{bokeh_release_ver}.min.js', f'bokeh-widgets-{bokeh_release_ver}.min.js' ] resources = '\n ' for key, value in get_sri_hashes_for_version(bokeh_release_ver).items(): if key in included_resources: resources += '<script type="text/javascript" ' resources += f'src="{BOKEH_CDN}/{key}" ' resources += f'integrity="sha384-{value}" ' resources += 'crossorigin="anonymous"></script>\n ' resources += BOKEH_BROWSER_LOGGING return resources
def test_get_sri_hashes_for_version(self) -> None: all_hashes = resources.get_all_sri_hashes() for key in all_hashes: h = resources.get_sri_hashes_for_version(key) assert h == all_hashes[key]
def test_get_sri_hashes_for_version_bad(self) -> None: with pytest.raises(KeyError): resources.get_sri_hashes_for_version("junk")
def test_get_sri_hashes_for_version(self): all_hashes = resources.get_all_sri_hashes() for key, value in all_hashes.items(): h = resources.get_sri_hashes_for_version(key) assert h == all_hashes[key]