Add widget.py to enable widgets on the server side.

The only slash command implemented in this initial
version is an extremely crippled version of a
"/stats" slash command that reports that you are
running 1 server.
This commit is contained in:
Steve Howell
2018-02-23 06:26:56 -05:00
committed by Tim Abbott
parent a84bd6da57
commit 1f0ffdc415
3 changed files with 30 additions and 0 deletions

View File

@@ -93,6 +93,8 @@ not_yet_fully_covered = {
'zerver/lib/test_fixtures.py',
'zerver/lib/test_runner.py',
'zerver/lib/api_test_helpers.py',
# Experimenatal
'zerver/lib/widget.py',
# Webhook integrations with incomplete coverage
'zerver/webhooks/basecamp/view.py',
'zerver/webhooks/beanstalk/view.py',

View File

@@ -88,6 +88,8 @@ from zerver.models import Realm, RealmEmoji, Stream, UserProfile, UserActivity,
from zerver.lib.alert_words import alert_words_in_realm
from zerver.lib.avatar import avatar_url, avatar_url_from_dict
from zerver.lib.stream_recipient import StreamRecipientMap
from zerver.lib.widget import do_widget_post_save_actions, \
get_fixed_content_for_widget
from django.db import transaction, IntegrityError, connection
from django.db.models import F, Q, Max, Sum
@@ -1137,6 +1139,10 @@ def do_send_messages(messages_maybe_none: Sequence[Optional[MutableMapping[str,
message['sender_queue_id'] = message.get('sender_queue_id', None)
message['realm'] = message.get('realm', message['message'].sender.realm)
# Some widgets just overwrite content.
fixed_content = get_fixed_content_for_widget(message['message'].content)
message['message'].content = fixed_content
mention_data = bugdown.MentionData(
realm_id=message['realm'].id,
content=message['message'].content,
@@ -1238,6 +1244,9 @@ def do_send_messages(messages_maybe_none: Sequence[Optional[MutableMapping[str,
if Message.content_has_attachment(message['message'].content):
do_claim_attachments(message['message'])
for message in messages:
do_widget_post_save_actions(message)
for message in messages:
# Deliver events to the real-time push system, as well as
# enqueuing any additional processing triggered by the message.

19
zerver/lib/widget.py Normal file
View File

@@ -0,0 +1,19 @@
from typing import MutableMapping, Any
from django.conf import settings
def get_fixed_content_for_widget(content: str) -> str:
if not settings.ALLOW_SUB_MESSAGES:
return content
if content == '/stats':
return 'We are running **1 server**.'
return content
def do_widget_post_save_actions(message: MutableMapping[str, Any]) -> None:
'''
This is experimental code that only works with the
webapp for now.
'''
if not settings.ALLOW_SUB_MESSAGES:
return