33import json
44import re
55from dataclasses import dataclass
6- from typing import Callable , Optional
6+ from typing import Any , Awaitable , Callable , Optional
77
88from cql2 import Expr
99from starlette .requests import Request
@@ -37,7 +37,7 @@ async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
3737
3838 async def set_filter (body : Optional [dict ] = None ) -> None :
3939 assert filter_builder is not None
40- cql2_filter = await filter_builder (
40+ filter_expr = await filter_builder (
4141 {
4242 "req" : {
4343 "path" : request .url .path ,
@@ -50,6 +50,7 @@ async def set_filter(body: Optional[dict] = None) -> None:
5050 ** scope ["state" ],
5151 }
5252 )
53+ cql2_filter = Expr (filter_expr )
5354 cql2_filter .validate ()
5455 setattr (request .state , self .state_key , cql2_filter )
5556
@@ -76,7 +77,9 @@ async def receive_build_filter() -> Message:
7677
7778 return await self .app (scope , receive_build_filter , send )
7879
79- def _get_filter (self , path : str ) -> Optional [Callable [..., Expr ]]:
80+ def _get_filter (
81+ self , path : str
82+ ) -> Optional [Callable [..., Awaitable [str | dict [str , Any ]]]]:
8083 """Get the CQL2 filter builder for the given path."""
8184 endpoint_filters = [
8285 (r"^/collections(/[^/]+)?$" , self .collections_filter ),
0 commit comments