Make missing :actor_X key available in KeyError

This commit is contained in:
Simon Willison 2026-10-22 14:18:35 -07:00
commit a8e13cc489
2 changed files with 25 additions and 1 deletions

View file

@ -13,7 +13,7 @@ def header(key, request):
def actor(key, request):
if request.actor is None:
raise KeyError
raise KeyError(key)
return request.actor[key]

View file

@ -5,6 +5,9 @@ import pytest
from asgiref.sync import async_to_sync
from bs4 import BeautifulSoup as Soup
from datasette.utils.asgi import Request
from datasette.views.database import MagicParameters
from .fixtures import make_app_client
@ -343,6 +346,27 @@ def magic_parameters_client():
yield client
@pytest.mark.parametrize(
"actor,key",
[
(None, "id"),
(None, "name"),
({}, "id"),
({"id": "root"}, "name"),
],
)
@pytest.mark.asyncio
async def test_magic_actor_missing_key(bare_ds, actor, key):
request = Request.fake("/")
request.scope["actor"] = actor
parameters = MagicParameters(f"select :_actor_{key}", {}, request, bare_ds)
with pytest.raises(KeyError) as exc_info:
await parameters.execute_params()
assert exc_info.value.args == (key,)
@pytest.mark.parametrize(
"magic_parameter,expected_re",
[