mirror of https://github.com/zulip/zulip.git
webhooks: Update comment about typing the webhook decorator.
The previous link was to "extended callable" types, which are deprecated in favor of callback protocols. Unfortunately, defining a protocol class can't express the typing -- we need some sort of variadic generics[1]. Specifically, we wish to support hitting the endpoint with additional parameters; thus, this protocol is insufficient: ``` class WebhookHandler(Protocol): def __call__(request: HttpRequest, api_key: str) -> HttpResponse: ... ``` ...since it prohibits additional parameters. And allowing extra arguments: ``` class WebhookHandler(Protocol): def __call__(request: HttpRequest, api_key: str, *args: object, **kwargs: object) -> HttpResponse: ... ``` ...is similarly problematic, since the view handlers do not support _arbitrary_ keyword arguments. [1] https://github.com/python/typing/issues/193
This commit is contained in:
parent
ea8823742b
commit
8cfacbf8aa
|
@ -324,8 +324,9 @@ def api_key_only_webhook_view(
|
||||||
webhook_client_name: str,
|
webhook_client_name: str,
|
||||||
notify_bot_owner_on_invalid_json: bool=True,
|
notify_bot_owner_on_invalid_json: bool=True,
|
||||||
) -> Callable[[Callable[..., HttpResponse]], Callable[..., HttpResponse]]:
|
) -> Callable[[Callable[..., HttpResponse]], Callable[..., HttpResponse]]:
|
||||||
# TODO The typing here could be improved by using the Extended Callable types:
|
# Unfortunately, callback protocols are insufficient for this:
|
||||||
# https://mypy.readthedocs.io/en/latest/kinds_of_types.html#extended-callable-types
|
# https://mypy.readthedocs.io/en/stable/protocols.html#callback-protocols
|
||||||
|
# Variadic generics are necessary: https://github.com/python/typing/issues/193
|
||||||
def _wrapped_view_func(view_func: Callable[..., HttpResponse]) -> Callable[..., HttpResponse]:
|
def _wrapped_view_func(view_func: Callable[..., HttpResponse]) -> Callable[..., HttpResponse]:
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
@has_request_variables
|
@has_request_variables
|
||||||
|
|
Loading…
Reference in New Issue