# Webhooks for external integrations.
from typing import Any, Dict, Iterable, Optional, Text

from django.http import HttpRequest, HttpResponse
from django.utils.translation import ugettext as _

from zerver.decorator import api_key_only_webhook_view
from zerver.lib.actions import check_send_stream_message
from zerver.lib.request import REQ, has_request_variables
from zerver.lib.response import json_error, json_success
from zerver.lib.validator import check_dict, check_string
from zerver.models import UserProfile

@api_key_only_webhook_view('Mention')
@has_request_variables
def api_mention_webhook(request, user_profile,
                        payload=REQ(argument_type='body'),
                        stream=REQ(default='mention'),
                        topic=REQ(default='news')):
    # type: (HttpRequest, UserProfile, Dict[str, Iterable[Dict[str, Any]]], Text, Optional[Text]) -> HttpResponse
    title = payload["title"]
    source_url = payload["url"]
    description = payload["description"]
    # construct the body of the message
    body = '**[%s](%s)**:\n%s' % (title, source_url, description)

    # send the message
    check_send_stream_message(user_profile, request.client, stream, topic, body)

    return json_success()

@@ -605,16 +605,29 @@
 (request
+: HttpRequest
 , user_p
@@ -632,16 +632,29 @@
 _profile
+: UserProfile
 ,%0A      
@@ -678,17 +678,56 @@
  payload
-=
+: Dict%5Bstr, Iterable%5BDict%5Bstr, Any%5D%5D%5D = 
 REQ(argu
@@ -775,17 +775,25 @@
   stream
-=
+: Text = 
 REQ(defa
@@ -837,17 +837,35 @@
    topic
-=
+: Optional%5BText%5D = 
 REQ(defa
@@ -880,107 +880,8 @@
 s'))
-:%0A    # type: (HttpRequest, UserProfile, Dict%5Bstr, Iterable%5BDict%5Bstr, Any%5D%5D%5D, Text, Optional%5BText%5D)
  -%3E 
@@ -892,16 +892,17 @@
 Response
+:
 %0A    tit

Use Python 3 type syntax in `zerver/webhooks/mention/view.py`.