profile_request: Replace MockRequest with HostRequestMock.

Since previously we use a custom mock request that doesn't inherit
HttpRequest, there are some typing problems when we use it.
This commit is contained in:
PIG208
2021-08-19 00:42:39 +08:00
committed by Tim Abbott
parent 460119986b
commit bb36bd8b6b
2 changed files with 20 additions and 28 deletions

View File

@@ -297,6 +297,7 @@ class HostRequestMock(HttpRequest):
client_name: Optional[str] = None, client_name: Optional[str] = None,
meta_data: Optional[Dict[str, Any]] = None, meta_data: Optional[Dict[str, Any]] = None,
tornado_handler: Optional[AsyncDjangoHandler] = DummyHandler(), tornado_handler: Optional[AsyncDjangoHandler] = DummyHandler(),
path: str = "",
) -> None: ) -> None:
self.host = host self.host = host
self.GET = QueryDict(mutable=True) self.GET = QueryDict(mutable=True)
@@ -315,7 +316,7 @@ class HostRequestMock(HttpRequest):
self.META = {"PATH_INFO": "test"} self.META = {"PATH_INFO": "test"}
else: else:
self.META = meta_data self.META = meta_data
self.path = "" self.path = path
self.user = user_profile self.user = user_profile
self._body = b"" self._body = b""
self.content_type = "" self.content_type = ""

View File

@@ -1,8 +1,7 @@
import cProfile import cProfile
import logging import logging
import tempfile import tempfile
from os import path from typing import Any
from typing import Any, Dict
from django.contrib.sessions.backends.base import SessionBase from django.contrib.sessions.backends.base import SessionBase
from django.core.management.base import CommandParser from django.core.management.base import CommandParser
@@ -12,39 +11,17 @@ from zerver.lib.management import ZulipBaseCommand
from zerver.lib.request import get_request_notes from zerver.lib.request import get_request_notes
from zerver.lib.test_helpers import HostRequestMock from zerver.lib.test_helpers import HostRequestMock
from zerver.middleware import LogRequests from zerver.middleware import LogRequests
from zerver.models import UserMessage, UserProfile from zerver.models import UserMessage
from zerver.views.message_fetch import get_messages_backend from zerver.views.message_fetch import get_messages_backend
request_logger = LogRequests() request_logger = LogRequests()
class MockSession: class MockSession(SessionBase):
def __init__(self) -> None: def __init__(self) -> None:
self.modified = False self.modified = False
class MockRequest(HttpRequest):
def __init__(self, user: UserProfile) -> None:
self.user = user
self.path = "/"
self.method = "POST"
self.META = {"REMOTE_ADDR": "127.0.0.1"}
anchor = (
UserMessage.objects.filter(user_profile=self.user).order_by("-message")[200].message_id
)
self.REQUEST = {
"anchor": anchor,
"num_before": 1200,
"num_after": 200,
}
self.POST = self.REQUEST
self.GET: Dict[Any, Any] = {}
self.session = MockSession()
def get_full_path(self) -> str:
return self.path
def profile_request(request: HttpRequest) -> HttpResponse: def profile_request(request: HttpRequest) -> HttpResponse:
request_logger.process_request(request) request_logger.process_request(request)
prof = cProfile.Profile() prof = cProfile.Profile()
@@ -66,4 +43,18 @@ class Command(ZulipBaseCommand):
def handle(self, *args: Any, **options: Any) -> None: def handle(self, *args: Any, **options: Any) -> None:
realm = self.get_realm(options) realm = self.get_realm(options)
user = self.get_user(options["email"], realm) user = self.get_user(options["email"], realm)
profile_request(MockRequest(user)) anchor = UserMessage.objects.filter(user_profile=user).order_by("-message")[200].message_id
mock_request = HostRequestMock(
post_data={
"anchor": anchor,
"num_before": 1200,
"num_after": 200,
},
user_profile=user,
meta_data={"REMOTE_ADDR": "127.0.0.1"},
path="/",
)
mock_request.session = MockSession()
get_request_notes(mock_request).log_data = None
profile_request(mock_request)