papertrail: Strengthen types using WildValue.

This commit is contained in:
Hari Prashant Bhimaraju 2022-10-09 22:05:43 +05:30 committed by Tim Abbott
parent 4210ab6c41
commit f374498f38
2 changed files with 19 additions and 27 deletions

View File

@ -67,7 +67,7 @@ message body 4
"incorrect_post", "", "", content_type="application/x-www-form-urlencoded"
)
self.assertIn("events key is missing from payload", e.exception.args[0])
self.assertIn("Events key is missing from payload", e.exception.args[0])
def get_body(self, fixture_name: str) -> str:
# Papertrail webhook sends a POST request with payload parameter

View File

@ -1,11 +1,11 @@
from typing import Any, Dict
from django.http import HttpRequest, HttpResponse
from django.utils.translation import gettext as _
from zerver.decorator import webhook_view
from zerver.lib.exceptions import JsonableError
from zerver.lib.request import REQ, has_request_variables
from zerver.lib.response import json_success
from zerver.lib.validator import check_dict, check_list, check_string
from zerver.lib.validator import WildValue, check_string, to_wild_value
from zerver.lib.webhooks.common import check_send_webhook_message
from zerver.models import UserProfile
@ -23,43 +23,35 @@ SEARCH_TEMPLATE = """
def api_papertrail_webhook(
request: HttpRequest,
user_profile: UserProfile,
payload: Dict[str, Any] = REQ(
json_validator=check_dict(
[
("events", check_list(check_dict([]))),
(
"saved_search",
check_dict(
[
("name", check_string),
("html_search_url", check_string),
]
),
),
]
)
),
payload: WildValue = REQ(converter=to_wild_value),
) -> HttpResponse:
if "events" not in payload:
raise JsonableError(_("Events key is missing from payload"))
matches = MATCHES_TEMPLATE.format(
name=payload["saved_search"]["name"],
url=payload["saved_search"]["html_search_url"],
name=payload["saved_search"]["name"].tame(check_string),
url=payload["saved_search"]["html_search_url"].tame(check_string),
number=str(len(payload["events"])),
)
message = [matches]
for i, event in enumerate(payload["events"]):
event_text = SEARCH_TEMPLATE.format(
timestamp=event["display_received_at"],
source=event["source_name"],
query=payload["saved_search"]["query"],
message=event["message"],
timestamp=event["display_received_at"].tame(check_string),
source=event["source_name"].tame(check_string),
query=payload["saved_search"]["query"].tame(check_string),
message=event["message"].tame(check_string),
)
message.append(event_text)
if i >= 3:
message.append("[See more]({})".format(payload["saved_search"]["html_search_url"]))
message.append(
"[See more]({})".format(
payload["saved_search"]["html_search_url"].tame(check_string)
)
)
break
post = "\n".join(message)