Skip to content

Commit 2e48b8c

Browse files
committed
fixes #771
1 parent 7d0e613 commit 2e48b8c

File tree

2 files changed

+20
-22
lines changed

2 files changed

+20
-22
lines changed

fasthtml/core.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ async def _find_p(req, arg:str, p:Parameter):
213213
except ValueError: raise HTTPException(404, req.url.path) from None
214214

215215
async def _wrap_req(req, params):
216-
return [await _find_p(req, arg, p) for arg,p in params.items()]
216+
return {arg:await _find_p(req, arg, p) for arg,p in params.items()}
217217

218218
# %% ../nbs/api/00_core.ipynb
219219
def flat_xt(lst):
@@ -230,7 +230,7 @@ class Beforeware:
230230
def __init__(self, f, skip=None): self.f,self.skip = f,skip or []
231231

232232
# %% ../nbs/api/00_core.ipynb
233-
async def _handle(f, args, **kwargs):
233+
async def _handle(f, *args, **kwargs):
234234
return (await f(*args, **kwargs)) if is_async_callable(f) else await run_in_threadpool(f, *args, **kwargs)
235235

236236
# %% ../nbs/api/00_core.ipynb
@@ -260,12 +260,11 @@ def _find_wsp(ws, data, hdrs, arg:str, p:Parameter):
260260

261261
def _wrap_ws(ws, data, params):
262262
hdrs = {k.lower().replace('-','_'):v for k,v in data.pop('HEADERS', {}).items()}
263-
return [_find_wsp(ws, data, hdrs, arg, p) for arg,p in params.items()]
263+
return {arg:_find_wsp(ws, data, hdrs, arg, p) for arg,p in params.items()}
264264

265265
# %% ../nbs/api/00_core.ipynb
266266
async def _send_ws(ws, resp):
267267
if not resp: return
268-
# res = to_xml(resp, indent=fh_cfg.indent) if isinstance(resp, (list,tuple,FT)) or hasattr(resp, '__ft__') else resp
269268
res = to_xml(resp, indent=fh_cfg.indent)
270269
await ws.send_text(res)
271270

@@ -274,7 +273,7 @@ def _ws_endp(recv, conn=None, disconn=None):
274273

275274
async def _generic_handler(handler, ws, data=None):
276275
wd = _wrap_ws(ws, loads(data) if data else {}, _params(handler))
277-
resp = await _handle(handler, wd)
276+
resp = await _handle(handler, **wd)
278277
if resp: await _send_ws(ws, resp)
279278

280279
async def _connect(self, ws):
@@ -469,7 +468,7 @@ def __response__(self, req):
469468
async def _wrap_call(f, req, params):
470469
"Wrap function call with request parameter injection"
471470
wreq = await _wrap_req(req, params)
472-
return await _handle(f, wreq)
471+
return await _handle(f, **wreq)
473472

474473
# %% ../nbs/api/00_core.ipynb
475474
htmx_exts = {
@@ -514,7 +513,7 @@ def _wrap_ex(f, status_code, hdrs, ftrs, htmlkw, bodykw, body_wrap):
514513
async def _f(req, exc):
515514
req.hdrs,req.ftrs,req.htmlkw,req.bodykw = map(deepcopy, (hdrs, ftrs, htmlkw, bodykw))
516515
req.body_wrap = body_wrap
517-
res = await _handle(f, (req, exc))
516+
res = await _handle(f, req, exc)
518517
return _resp(req, res, status_code=status_code)
519518
return _f
520519

nbs/api/00_core.ipynb

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@
131131
{
132132
"data": {
133133
"text/plain": [
134-
"datetime.datetime(2025, 8, 4, 14, 0)"
134+
"datetime.datetime(2025, 8, 22, 14, 0)"
135135
]
136136
},
137137
"execution_count": null,
@@ -774,7 +774,7 @@
774774
" except ValueError: raise HTTPException(404, req.url.path) from None\n",
775775
"\n",
776776
"async def _wrap_req(req, params):\n",
777-
" return [await _find_p(req, arg, p) for arg,p in params.items()]"
777+
" return {arg:await _find_p(req, arg, p) for arg,p in params.items()}"
778778
]
779779
},
780780
{
@@ -787,7 +787,7 @@
787787
"name": "stdout",
788788
"output_type": "stream",
789789
"text": [
790-
"[<starlette.requests.Request object>, <starlette.applications.Starlette object>, '1', HttpHeader(k='value1', v='value3')]\n"
790+
"{'req': <starlette.requests.Request object>, 'this': <starlette.applications.Starlette object>, 'a': '1', 'b': HttpHeader(k='value1', v='value3')}\n"
791791
]
792792
}
793793
],
@@ -813,7 +813,7 @@
813813
"name": "stdout",
814814
"output_type": "stream",
815815
"text": [
816-
"[<starlette.requests.Request object>, <starlette.applications.Starlette object>, '1', HttpHeader(k='value1', v='value3')]\n"
816+
"{'req': <starlette.requests.Request object>, 'this': <starlette.applications.Starlette object>, 'a': '1', 'b': HttpHeader(k='value1', v='value3')}\n"
817817
]
818818
}
819819
],
@@ -855,7 +855,7 @@
855855
"name": "stdout",
856856
"output_type": "stream",
857857
"text": [
858-
"[<starlette.requests.Request object>, <starlette.applications.Starlette object>, '']\n"
858+
"{'req': <starlette.requests.Request object>, 'this': <starlette.applications.Starlette object>, 'a': ''}\n"
859859
]
860860
}
861861
],
@@ -955,7 +955,7 @@
955955
"outputs": [],
956956
"source": [
957957
"#| export\n",
958-
"async def _handle(f, args, **kwargs):\n",
958+
"async def _handle(f, *args, **kwargs):\n",
959959
" return (await f(*args, **kwargs)) if is_async_callable(f) else await run_in_threadpool(f, *args, **kwargs)"
960960
]
961961
},
@@ -1001,7 +1001,7 @@
10011001
"\n",
10021002
"def _wrap_ws(ws, data, params):\n",
10031003
" hdrs = {k.lower().replace('-','_'):v for k,v in data.pop('HEADERS', {}).items()}\n",
1004-
" return [_find_wsp(ws, data, hdrs, arg, p) for arg,p in params.items()]"
1004+
" return {arg:_find_wsp(ws, data, hdrs, arg, p) for arg,p in params.items()}"
10051005
]
10061006
},
10071007
{
@@ -1014,7 +1014,6 @@
10141014
"#| export\n",
10151015
"async def _send_ws(ws, resp):\n",
10161016
" if not resp: return\n",
1017-
"# res = to_xml(resp, indent=fh_cfg.indent) if isinstance(resp, (list,tuple,FT)) or hasattr(resp, '__ft__') else resp\n",
10181017
" res = to_xml(resp, indent=fh_cfg.indent)\n",
10191018
" await ws.send_text(res)\n",
10201019
"\n",
@@ -1023,7 +1022,7 @@
10231022
"\n",
10241023
" async def _generic_handler(handler, ws, data=None):\n",
10251024
" wd = _wrap_ws(ws, loads(data) if data else {}, _params(handler))\n",
1026-
" resp = await _handle(handler, wd)\n",
1025+
" resp = await _handle(handler, **wd)\n",
10271026
" if resp: await _send_ws(ws, resp)\n",
10281027
"\n",
10291028
" async def _connect(self, ws):\n",
@@ -1403,7 +1402,7 @@
14031402
"async def _wrap_call(f, req, params):\n",
14041403
" \"Wrap function call with request parameter injection\"\n",
14051404
" wreq = await _wrap_req(req, params)\n",
1406-
" return await _handle(f, wreq)"
1405+
" return await _handle(f, **wreq)"
14071406
]
14081407
},
14091408
{
@@ -1514,7 +1513,7 @@
15141513
" async def _f(req, exc):\n",
15151514
" req.hdrs,req.ftrs,req.htmlkw,req.bodykw = map(deepcopy, (hdrs, ftrs, htmlkw, bodykw))\n",
15161515
" req.body_wrap = body_wrap\n",
1517-
" res = await _handle(f, (req, exc))\n",
1516+
" res = await _handle(f, req, exc)\n",
15181517
" return _resp(req, res, status_code=status_code)\n",
15191518
" return _f"
15201519
]
@@ -2879,13 +2878,13 @@
28792878
"name": "stdout",
28802879
"output_type": "stream",
28812880
"text": [
2882-
"Set to 2025-05-29 08:31:48.235262\n"
2881+
"Set to 2025-08-22 01:21:53.772537\n"
28832882
]
28842883
},
28852884
{
28862885
"data": {
28872886
"text/plain": [
2888-
"'Session time: 2025-05-29 08:31:48.235262'"
2887+
"'Session time: 2025-08-22 01:21:53.772537'"
28892888
]
28902889
},
28912890
"execution_count": null,
@@ -3407,7 +3406,7 @@
34073406
" <link rel=\"canonical\" href=\"http://testserver/setcookie\">\n",
34083407
" <meta charset=\"utf-8\">\n",
34093408
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\">\n",
3410-
"<script src=\"https://cdn.jsdelivr.net/npm/[email protected].4/dist/htmx.min.js\"></script><script src=\"https://cdn.jsdelivr.net/gh/answerdotai/[email protected]/fasthtml.js\"></script><script src=\"https://cdn.jsdelivr.net/gh/answerdotai/surreal@main/surreal.js\"></script><script src=\"https://cdn.jsdelivr.net/gh/gnat/css-scope-inline@main/script.js\"></script><script>\n",
3409+
"<script src=\"https://cdn.jsdelivr.net/npm/[email protected].6/dist/htmx.min.js\"></script><script src=\"https://cdn.jsdelivr.net/gh/answerdotai/[email protected]/fasthtml.js\"></script><script src=\"https://cdn.jsdelivr.net/gh/answerdotai/surreal@main/surreal.js\"></script><script src=\"https://cdn.jsdelivr.net/gh/gnat/css-scope-inline@main/script.js\"></script><script>\n",
34113410
" function sendmsg() {\n",
34123411
" window.parent.postMessage({height: document.documentElement.offsetHeight}, '*');\n",
34133412
" }\n",
@@ -3424,7 +3423,7 @@
34243423
{
34253424
"data": {
34263425
"text/plain": [
3427-
"'Cookie was set at time 08:31:49.013668'"
3426+
"'Cookie was set at time 01:21:59.994611'"
34283427
]
34293428
},
34303429
"execution_count": null,

0 commit comments

Comments
 (0)