Files
zulip/zerver/webhooks/gosquared/view.py
Anders Kaseorg 69730a78cc python: Use trailing commas consistently.
Automatically generated by the following script, based on the output
of lint with flake8-comma:

import re
import sys

last_filename = None
last_row = None
lines = []

for msg in sys.stdin:
    m = re.match(
        r"\x1b\[35mflake8    \|\x1b\[0m \x1b\[1;31m(.+):(\d+):(\d+): (\w+)", msg
    )
    if m:
        filename, row_str, col_str, err = m.groups()
        row, col = int(row_str), int(col_str)

        if filename == last_filename:
            assert last_row != row
        else:
            if last_filename is not None:
                with open(last_filename, "w") as f:
                    f.writelines(lines)

            with open(filename) as f:
                lines = f.readlines()
            last_filename = filename
        last_row = row

        line = lines[row - 1]
        if err in ["C812", "C815"]:
            lines[row - 1] = line[: col - 1] + "," + line[col - 1 :]
        elif err in ["C819"]:
            assert line[col - 2] == ","
            lines[row - 1] = line[: col - 2] + line[col - 1 :].lstrip(" ")

if last_filename is not None:
    with open(last_filename, "w") as f:
        f.writelines(lines)

Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-06-11 16:04:12 -07:00

61 lines
2.3 KiB
Python

from typing import Any, Dict
from django.http import HttpRequest, HttpResponse
from zerver.decorator import api_key_only_webhook_view
from zerver.lib.request import REQ, has_request_variables
from zerver.lib.response import json_success
from zerver.lib.webhooks.common import UnexpectedWebhookEventType, \
check_send_webhook_message
from zerver.models import UserProfile
TRAFFIC_SPIKE_TEMPLATE = '[{website_name}]({website_url}) has {user_num} visitors online.'
CHAT_MESSAGE_TEMPLATE = """
The {status} **{name}** messaged:
``` quote
{content}
```
""".strip()
@api_key_only_webhook_view('GoSquared')
@has_request_variables
def api_gosquared_webhook(request: HttpRequest, user_profile: UserProfile,
payload: Dict[str, Dict[str, Any]]=REQ(argument_type='body')) -> HttpResponse:
body = ""
topic = ""
# Unfortunately, there is no other way to infer the event type
# than just inferring it from the payload's attributes
# Traffic spike/dip event
if (payload.get('concurrents') is not None and
payload.get('siteDetails') is not None):
domain_name = payload['siteDetails']['domain']
user_num = payload['concurrents']
user_acc = payload['siteDetails']['acct']
acc_url = 'https://www.gosquared.com/now/' + user_acc
body = TRAFFIC_SPIKE_TEMPLATE.format(website_name=domain_name,
website_url=acc_url,
user_num=user_num)
topic = f'GoSquared - {domain_name}'
check_send_webhook_message(request, user_profile, topic, body)
# Live chat message event
elif (payload.get('message') is not None and
payload.get('person') is not None):
# Only support non-private messages
if not payload['message']['private']:
session_title = payload['message']['session']['title']
topic = f'Live Chat Session - {session_title}'
body = CHAT_MESSAGE_TEMPLATE.format(
status=payload['person']['status'],
name=payload['person']['_anon']['name'],
content=payload['message']['content'],
)
check_send_webhook_message(request, user_profile, topic, body)
else:
raise UnexpectedWebhookEventType('GoSquared', 'unknown_event')
return json_success()