diff --git a/zerver/lib/request.py b/zerver/lib/request.py index d9377bf259..515c420998 100644 --- a/zerver/lib/request.py +++ b/zerver/lib/request.py @@ -11,7 +11,7 @@ from zerver.lib.types import Validator, ViewFuncT from django.http import HttpRequest, HttpResponse -from typing import Any, Callable, Dict, Generic, List, Optional, Type, TypeVar, Union, cast, overload +from typing import Any, Callable, Dict, Generic, List, Optional, TypeVar, Union, cast, overload from typing_extensions import Literal class RequestConfusingParmsError(JsonableError): @@ -64,7 +64,6 @@ class _REQ(Generic[ResultT]): self, whence: Optional[str] = None, *, - type: Type[ResultT] = Type[None], converter: Optional[Callable[[str], ResultT]] = None, default: Union[_NotSpecified, ResultT, None] = NotSpecified, validator: Optional[Validator] = None, @@ -95,10 +94,6 @@ class _REQ(Generic[ResultT]): argument_type: pass 'body' to extract the parsed JSON corresponding to the request body - type: a hint to typing (using mypy) what the type of this parameter is. - Currently only typically necessary if default=None and the type cannot - be inferred in another way (eg. via converter). - aliases: alternate names for the POST var path_only: Used for parameters included in the URL that we still want @@ -137,7 +132,6 @@ class _REQ(Generic[ResultT]): def REQ( whence: Optional[str] = ..., *, - type: Type[ResultT] = ..., converter: Callable[[str], ResultT], default: ResultT = ..., intentionally_undocumented: bool = ..., @@ -152,7 +146,6 @@ def REQ( def REQ( whence: Optional[str] = ..., *, - type: Type[ResultT] = ..., default: ResultT = ..., validator: Validator, intentionally_undocumented: bool = ..., @@ -167,7 +160,6 @@ def REQ( def REQ( whence: Optional[str] = ..., *, - type: Type[str] = ..., default: str = ..., str_validator: Optional[Validator] = ..., intentionally_undocumented: bool = ..., @@ -182,7 +174,6 @@ def REQ( def REQ( whence: Optional[str] = ..., *, - type: Type[str] = ..., default: None, str_validator: Optional[Validator] = ..., intentionally_undocumented: bool = ..., @@ -197,7 +188,6 @@ def REQ( def REQ( whence: Optional[str] = ..., *, - type: Type[ResultT] = ..., default: ResultT = ..., str_validator: Optional[Validator] = ..., argument_type: Literal["body"], @@ -212,7 +202,6 @@ def REQ( def REQ( whence: Optional[str] = None, *, - type: Type[ResultT] = Type[None], converter: Optional[Callable[[str], ResultT]] = None, default: Union[_REQ._NotSpecified, ResultT] = _REQ.NotSpecified, validator: Optional[Validator] = None, @@ -225,7 +214,6 @@ def REQ( ) -> ResultT: return cast(ResultT, _REQ( whence, - type=type, converter=converter, default=default, validator=validator, diff --git a/zerver/views/typing.py b/zerver/views/typing.py index 521725d35c..39e317bfb7 100644 --- a/zerver/views/typing.py +++ b/zerver/views/typing.py @@ -7,12 +7,16 @@ from zerver.lib.actions import check_send_typing_notification, \ from zerver.lib.response import json_success from zerver.models import UserProfile +EMPTY_STRS: List[str] = [] +EMPTY_STRS_OR_INTS: Union[List[str], List[int]] = EMPTY_STRS + @has_request_variables def send_notification_backend( - request: HttpRequest, user_profile: UserProfile, - operator: str=REQ('op'), - notification_to: Union[List[str], List[int]]=REQ( - 'to', type=Union[List[str], List[int]], - converter=extract_private_recipients, default=[])) -> HttpResponse: + request: HttpRequest, user_profile: UserProfile, + operator: str=REQ('op'), + notification_to: Union[List[str], List[int]]=REQ( + 'to', converter=extract_private_recipients, default=EMPTY_STRS_OR_INTS, + ), +) -> HttpResponse: check_send_typing_notification(user_profile, notification_to, operator) return json_success()