mirror of
https://github.com/zulip/zulip.git
synced 2025-11-09 00:18:12 +00:00
typing: Fix misuse of HttpResponse.
Amend usage of HttpResponse when appropriate.
This commit is contained in:
@@ -30,7 +30,7 @@ class TestSupportEndpoint(ZulipTestCase):
|
||||
reset_emails_in_zulip_realm()
|
||||
|
||||
def assert_user_details_in_html_response(
|
||||
html_response: str, full_name: str, email: str, role: str
|
||||
html_response: HttpResponse, full_name: str, email: str, role: str
|
||||
) -> None:
|
||||
self.assert_in_success_response(
|
||||
[
|
||||
|
||||
@@ -53,7 +53,7 @@ def render_stats(
|
||||
for_installation: bool = False,
|
||||
remote: bool = False,
|
||||
analytics_ready: bool = True,
|
||||
) -> HttpRequest:
|
||||
) -> HttpResponse:
|
||||
page_params = dict(
|
||||
data_url_suffix=data_url_suffix,
|
||||
for_installation=for_installation,
|
||||
|
||||
@@ -379,7 +379,7 @@ def webhook_view(
|
||||
# the subdomain validation happen elsewhere and switch to using the
|
||||
# stock Django version.
|
||||
def user_passes_test(
|
||||
test_func: Callable[[HttpResponse], bool],
|
||||
test_func: Callable[[HttpRequest], bool],
|
||||
login_url: Optional[str] = None,
|
||||
redirect_field_name: str = REDIRECT_FIELD_NAME,
|
||||
) -> Callable[[ViewFuncT], ViewFuncT]:
|
||||
|
||||
@@ -2,24 +2,13 @@ import cProfile
|
||||
import logging
|
||||
import time
|
||||
import traceback
|
||||
from typing import (
|
||||
Any,
|
||||
AnyStr,
|
||||
Callable,
|
||||
Dict,
|
||||
Iterable,
|
||||
List,
|
||||
MutableMapping,
|
||||
Optional,
|
||||
Tuple,
|
||||
Union,
|
||||
)
|
||||
from typing import Any, AnyStr, Callable, Dict, Iterable, List, MutableMapping, Optional, Tuple
|
||||
|
||||
from django.conf import settings
|
||||
from django.conf.urls.i18n import is_language_prefix_patterns_used
|
||||
from django.core.handlers.wsgi import WSGIRequest
|
||||
from django.db import connection
|
||||
from django.http import HttpRequest, HttpResponse, HttpResponseRedirect, StreamingHttpResponse
|
||||
from django.http.response import HttpResponseBase
|
||||
from django.middleware.common import CommonMiddleware
|
||||
from django.middleware.locale import LocaleMiddleware as DjangoLocaleMiddleware
|
||||
from django.shortcuts import render
|
||||
@@ -428,9 +417,7 @@ class LogRequests(MiddlewareMixin):
|
||||
|
||||
|
||||
class JsonErrorHandler(MiddlewareMixin):
|
||||
def __init__(
|
||||
self, get_response: Callable[[Any, WSGIRequest], Union[HttpResponse, BaseException]]
|
||||
) -> None:
|
||||
def __init__(self, get_response: Callable[[HttpRequest], HttpResponse]) -> None:
|
||||
super().__init__(get_response)
|
||||
ignore_logger("zerver.middleware.json_error_handler")
|
||||
|
||||
@@ -498,7 +485,9 @@ def csrf_failure(request: HttpRequest, reason: str = "") -> HttpResponse:
|
||||
|
||||
|
||||
class LocaleMiddleware(DjangoLocaleMiddleware):
|
||||
def process_response(self, request: HttpRequest, response: HttpResponse) -> HttpResponse:
|
||||
def process_response(
|
||||
self, request: HttpRequest, response: HttpResponseBase
|
||||
) -> HttpResponseBase:
|
||||
|
||||
# This is the same as the default LocaleMiddleware, minus the
|
||||
# logic that redirects 404's that lack a prefixed language in
|
||||
|
||||
@@ -262,17 +262,19 @@ class DecoratorTestCase(ZulipTestCase):
|
||||
|
||||
def test_webhook_view(self) -> None:
|
||||
@webhook_view("ClientName")
|
||||
def my_webhook(request: HttpRequest, user_profile: UserProfile) -> str:
|
||||
return user_profile.email
|
||||
def my_webhook(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
|
||||
return json_response(msg=user_profile.email)
|
||||
|
||||
@webhook_view("ClientName")
|
||||
def my_webhook_raises_exception(request: HttpRequest, user_profile: UserProfile) -> None:
|
||||
def my_webhook_raises_exception(
|
||||
request: HttpRequest, user_profile: UserProfile
|
||||
) -> HttpResponse:
|
||||
raise Exception("raised by webhook function")
|
||||
|
||||
@webhook_view("ClientName")
|
||||
def my_webhook_raises_exception_unsupported_event(
|
||||
request: HttpRequest, user_profile: UserProfile
|
||||
) -> None:
|
||||
) -> HttpResponse:
|
||||
raise UnsupportedWebhookEventType("test_event")
|
||||
|
||||
webhook_bot_email = "webhook-bot@zulip.com"
|
||||
@@ -367,7 +369,7 @@ class DecoratorTestCase(ZulipTestCase):
|
||||
|
||||
with self.settings(RATE_LIMITING=True):
|
||||
with mock.patch("zerver.decorator.rate_limit_user") as rate_limit_mock:
|
||||
api_result = my_webhook(request)
|
||||
api_result = orjson.loads(my_webhook(request).content).get("msg")
|
||||
|
||||
# Verify rate limiting was attempted.
|
||||
self.assertTrue(rate_limit_mock.called)
|
||||
@@ -393,11 +395,11 @@ class DecoratorTestCase(ZulipTestCase):
|
||||
class SkipRateLimitingTest(ZulipTestCase):
|
||||
def test_authenticated_rest_api_view(self) -> None:
|
||||
@authenticated_rest_api_view(skip_rate_limiting=False)
|
||||
def my_rate_limited_view(request: HttpRequest, user_profile: UserProfile) -> str:
|
||||
def my_rate_limited_view(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
|
||||
return json_success() # nocoverage # mock prevents this from being called
|
||||
|
||||
@authenticated_rest_api_view(skip_rate_limiting=True)
|
||||
def my_unlimited_view(request: HttpRequest, user_profile: UserProfile) -> str:
|
||||
def my_unlimited_view(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
|
||||
return json_success()
|
||||
|
||||
request = HostRequestMock(host="zulip.testserver")
|
||||
@@ -416,11 +418,11 @@ class SkipRateLimitingTest(ZulipTestCase):
|
||||
|
||||
def test_authenticated_uploads_api_view(self) -> None:
|
||||
@authenticated_uploads_api_view(skip_rate_limiting=False)
|
||||
def my_rate_limited_view(request: HttpRequest, user_profile: UserProfile) -> str:
|
||||
def my_rate_limited_view(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
|
||||
return json_success() # nocoverage # mock prevents this from being called
|
||||
|
||||
@authenticated_uploads_api_view(skip_rate_limiting=True)
|
||||
def my_unlimited_view(request: HttpRequest, user_profile: UserProfile) -> str:
|
||||
def my_unlimited_view(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
|
||||
return json_success()
|
||||
|
||||
request = HostRequestMock(host="zulip.testserver")
|
||||
@@ -438,7 +440,7 @@ class SkipRateLimitingTest(ZulipTestCase):
|
||||
self.assertTrue(rate_limit_mock.called)
|
||||
|
||||
def test_authenticated_json_view(self) -> None:
|
||||
def my_view(request: HttpRequest, user_profile: UserProfile) -> str:
|
||||
def my_view(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
|
||||
return json_success()
|
||||
|
||||
my_rate_limited_view = authenticated_json_view(my_view, skip_rate_limiting=False)
|
||||
@@ -462,7 +464,9 @@ class SkipRateLimitingTest(ZulipTestCase):
|
||||
class DecoratorLoggingTestCase(ZulipTestCase):
|
||||
def test_authenticated_rest_api_view_logging(self) -> None:
|
||||
@authenticated_rest_api_view(webhook_client_name="ClientName")
|
||||
def my_webhook_raises_exception(request: HttpRequest, user_profile: UserProfile) -> None:
|
||||
def my_webhook_raises_exception(
|
||||
request: HttpRequest, user_profile: UserProfile
|
||||
) -> HttpResponse:
|
||||
raise Exception("raised by webhook function")
|
||||
|
||||
webhook_bot_email = "webhook-bot@zulip.com"
|
||||
@@ -483,7 +487,9 @@ class DecoratorLoggingTestCase(ZulipTestCase):
|
||||
|
||||
def test_authenticated_rest_api_view_logging_unsupported_event(self) -> None:
|
||||
@authenticated_rest_api_view(webhook_client_name="ClientName")
|
||||
def my_webhook_raises_exception(request: HttpRequest, user_profile: UserProfile) -> None:
|
||||
def my_webhook_raises_exception(
|
||||
request: HttpRequest, user_profile: UserProfile
|
||||
) -> HttpResponse:
|
||||
raise UnsupportedWebhookEventType("test_event")
|
||||
|
||||
webhook_bot_email = "webhook-bot@zulip.com"
|
||||
@@ -511,7 +517,7 @@ class DecoratorLoggingTestCase(ZulipTestCase):
|
||||
@authenticated_rest_api_view()
|
||||
def non_webhook_view_raises_exception(
|
||||
request: HttpRequest, user_profile: UserProfile
|
||||
) -> None:
|
||||
) -> HttpResponse:
|
||||
raise Exception("raised by a non-webhook view")
|
||||
|
||||
request = HostRequestMock()
|
||||
|
||||
@@ -646,7 +646,7 @@ def redirect_and_log_into_subdomain(result: ExternalAuthResult) -> HttpResponse:
|
||||
return redirect(subdomain_login_uri)
|
||||
|
||||
|
||||
def redirect_to_misconfigured_ldap_notice(request: HttpResponse, error_type: int) -> HttpResponse:
|
||||
def redirect_to_misconfigured_ldap_notice(request: HttpRequest, error_type: int) -> HttpResponse:
|
||||
if error_type == ZulipLDAPAuthBackend.REALM_IS_NONE_ERROR:
|
||||
return config_error(request, "ldap")
|
||||
else:
|
||||
@@ -789,6 +789,7 @@ def login_page(
|
||||
# https://github.com/django/django/blob/master/django/template/response.py#L19.
|
||||
update_login_page_context(request, template_response.context_data)
|
||||
|
||||
assert isinstance(template_response, HttpResponse)
|
||||
return template_response
|
||||
|
||||
|
||||
@@ -957,12 +958,13 @@ def logout_then_login(request: HttpRequest, **kwargs: Any) -> HttpResponse:
|
||||
|
||||
|
||||
def password_reset(request: HttpRequest) -> HttpResponse:
|
||||
view_func = DjangoPasswordResetView.as_view(
|
||||
response = DjangoPasswordResetView.as_view(
|
||||
template_name="zerver/reset.html",
|
||||
form_class=ZulipPasswordResetForm,
|
||||
success_url="/accounts/password/reset/done/",
|
||||
)
|
||||
return view_func(request)
|
||||
)(request)
|
||||
assert isinstance(response, HttpResponse)
|
||||
return response
|
||||
|
||||
|
||||
@csrf_exempt
|
||||
|
||||
@@ -167,7 +167,7 @@ def create_default_stream_group(
|
||||
group_name: str = REQ(),
|
||||
description: str = REQ(),
|
||||
stream_names: List[str] = REQ(json_validator=check_list(check_string)),
|
||||
) -> None:
|
||||
) -> HttpResponse:
|
||||
streams = []
|
||||
for stream_name in stream_names:
|
||||
(stream, sub) = access_stream_by_name(user_profile, stream_name)
|
||||
@@ -184,7 +184,7 @@ def update_default_stream_group_info(
|
||||
group_id: int,
|
||||
new_group_name: Optional[str] = REQ(default=None),
|
||||
new_description: Optional[str] = REQ(default=None),
|
||||
) -> None:
|
||||
) -> HttpResponse:
|
||||
if not new_group_name and not new_description:
|
||||
raise JsonableError(_('You must pass "new_description" or "new_group_name".'))
|
||||
|
||||
@@ -204,7 +204,7 @@ def update_default_stream_group_streams(
|
||||
group_id: int,
|
||||
op: str = REQ(),
|
||||
stream_names: List[str] = REQ(json_validator=check_list(check_string)),
|
||||
) -> None:
|
||||
) -> HttpResponse:
|
||||
group = access_default_stream_group_by_id(user_profile.realm, group_id)
|
||||
streams = []
|
||||
for stream_name in stream_names:
|
||||
@@ -224,7 +224,7 @@ def update_default_stream_group_streams(
|
||||
@has_request_variables
|
||||
def remove_default_stream_group(
|
||||
request: HttpRequest, user_profile: UserProfile, group_id: int
|
||||
) -> None:
|
||||
) -> HttpResponse:
|
||||
group = access_default_stream_group_by_id(user_profile.realm, group_id)
|
||||
do_remove_default_stream_group(user_profile.realm, group)
|
||||
return json_success()
|
||||
|
||||
Reference in New Issue
Block a user