diff --git a/datasette/app.py b/datasette/app.py index af89d7f6..dfba438a 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -600,8 +600,8 @@ class Datasette: add_route( asgi_static(app_root / "datasette" / "static"), r"/-/static/(?P.*)$" ) - # for path, dirname in self.static_mounts: - # app.static(path, dirname) + for path, dirname in self.static_mounts: + add_route(asgi_static(dirname), r"/" + path + "/(?P.*)$") # Mount any plugin static/ directories for plugin in get_plugins(pm): diff --git a/tests/fixtures.py b/tests/fixtures.py index b1f54185..e98bf492 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -82,6 +82,7 @@ def make_app_client( is_immutable=False, extra_databases=None, inspect_data=None, + static_mounts=None, ): with tempfile.TemporaryDirectory() as tmpdir: filepath = os.path.join(tmpdir, filename) @@ -123,6 +124,7 @@ def make_app_client( plugins_dir=plugins_dir, config=config, inspect_data=inspect_data, + static_mounts=static_mounts, ) ds.sqlite_functions.append(("sleep", 1, lambda n: time.sleep(float(n)))) client = TestClient(ds.app()) diff --git a/tests/test_html.py b/tests/test_html.py index f9ff393f..60014691 100644 --- a/tests/test_html.py +++ b/tests/test_html.py @@ -8,6 +8,7 @@ from .fixtures import ( # noqa METADATA, ) import json +import pathlib import pytest import re import urllib.parse @@ -52,6 +53,16 @@ def test_static(app_client): assert "text/css" == response.headers["content-type"] +def test_static_mounts(): + for client in make_app_client( + static_mounts=[("custom-static", str(pathlib.Path(__file__).parent))] + ): + response = client.get("/custom-static/test_html.py") + assert response.status == 200 + response = client.get("/custom-static/not_exists.py") + assert response.status == 404 + + def test_memory_database_page(): for client in make_app_client(memory=True): response = client.get("/:memory:")