views: Extract message_flags.py for flags views.

This commit is contained in:
Tim Abbott
2020-06-22 13:57:01 -07:00
committed by Tim Abbott
parent 4d7550d705
commit 55448ecf24
4 changed files with 94 additions and 87 deletions

View File

@@ -28,7 +28,7 @@ from zerver.lib.users import compute_show_invites_and_add_streams
from zerver.lib.utils import generate_random_token, statsd
from zerver.models import Message, PreregistrationUser, Realm, Stream, UserProfile
from zerver.views.compatibility import is_outdated_desktop_app, is_unsupported_browser
from zerver.views.messages import get_latest_update_message_flag_activity
from zerver.views.message_flags import get_latest_update_message_flag_activity
from zerver.views.portico import hello_view

View File

@@ -0,0 +1,87 @@
from typing import List, Optional
from django.http import HttpRequest, HttpResponse
from django.utils.translation import ugettext as _
from zerver.decorator import REQ, has_request_variables
from zerver.lib.actions import (
do_mark_all_as_read,
do_mark_stream_messages_as_read,
do_update_message_flags,
)
from zerver.lib.exceptions import JsonableError
from zerver.lib.response import json_success
from zerver.lib.streams import access_stream_by_id
from zerver.lib.topic import user_message_exists_for_topic
from zerver.lib.validator import check_int, check_list
from zerver.models import UserActivity, UserProfile
def get_latest_update_message_flag_activity(user_profile: UserProfile) -> Optional[UserActivity]:
return UserActivity.objects.filter(user_profile=user_profile,
query='update_message_flags').order_by("last_visit").last()
# NOTE: If this function name is changed, add the new name to the
# query in get_latest_update_message_flag_activity
@has_request_variables
def update_message_flags(request: HttpRequest, user_profile: UserProfile,
messages: List[int]=REQ(validator=check_list(check_int)),
operation: str=REQ('op'), flag: str=REQ()) -> HttpResponse:
count = do_update_message_flags(user_profile, request.client, operation, flag, messages)
target_count_str = str(len(messages))
log_data_str = f"[{operation} {flag}/{target_count_str}] actually {count}"
request._log_data["extra"] = log_data_str
return json_success({'result': 'success',
'messages': messages,
'msg': ''})
@has_request_variables
def mark_all_as_read(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
count = do_mark_all_as_read(user_profile, request.client)
log_data_str = f"[{count} updated]"
request._log_data["extra"] = log_data_str
return json_success({'result': 'success',
'msg': ''})
@has_request_variables
def mark_stream_as_read(request: HttpRequest,
user_profile: UserProfile,
stream_id: int=REQ(validator=check_int)) -> HttpResponse:
stream, recipient, sub = access_stream_by_id(user_profile, stream_id)
count = do_mark_stream_messages_as_read(user_profile, request.client, stream)
log_data_str = f"[{count} updated]"
request._log_data["extra"] = log_data_str
return json_success({'result': 'success',
'msg': ''})
@has_request_variables
def mark_topic_as_read(request: HttpRequest,
user_profile: UserProfile,
stream_id: int=REQ(validator=check_int),
topic_name: str=REQ()) -> HttpResponse:
stream, recipient, sub = access_stream_by_id(user_profile, stream_id)
if topic_name:
topic_exists = user_message_exists_for_topic(
user_profile=user_profile,
recipient=recipient,
topic_name=topic_name,
)
if not topic_exists:
raise JsonableError(_('No such topic \'{}\'').format(topic_name))
count = do_mark_stream_messages_as_read(user_profile, request.client, stream, topic_name)
log_data_str = f"[{count} updated]"
request._log_data["extra"] = log_data_str
return json_success({'result': 'success',
'msg': ''})

View File

@@ -36,9 +36,6 @@ from zerver.lib.actions import (
compute_irc_user_fullname,
compute_jabber_user_fullname,
create_mirror_user_if_needed,
do_mark_all_as_read,
do_mark_stream_messages_as_read,
do_update_message_flags,
extract_private_recipients,
extract_stream_indicator,
recipient_for_user_profiles,
@@ -49,7 +46,6 @@ from zerver.lib.message import get_first_visible_message_id, messages_for_ids, r
from zerver.lib.response import json_error, json_success
from zerver.lib.sqlalchemy_utils import get_sqlalchemy_connection
from zerver.lib.streams import (
access_stream_by_id,
can_access_stream_history_by_id,
can_access_stream_history_by_name,
get_public_streams_queryset,
@@ -57,14 +53,7 @@ from zerver.lib.streams import (
)
from zerver.lib.timestamp import convert_to_UTC
from zerver.lib.timezone import get_timezone
from zerver.lib.topic import (
DB_TOPIC_NAME,
MATCH_TOPIC,
REQ_topic,
topic_column_sa,
topic_match_sa,
user_message_exists_for_topic,
)
from zerver.lib.topic import DB_TOPIC_NAME, MATCH_TOPIC, REQ_topic, topic_column_sa, topic_match_sa
from zerver.lib.topic_mutes import exclude_topic_mutes
from zerver.lib.utils import statsd
from zerver.lib.validator import (
@@ -88,7 +77,6 @@ from zerver.models import (
Recipient,
Stream,
Subscription,
UserActivity,
UserMessage,
UserProfile,
email_to_domain,
@@ -1144,75 +1132,6 @@ def post_process_limited_query(rows: List[Any],
history_limited=history_limited,
)
def get_latest_update_message_flag_activity(user_profile: UserProfile) -> Optional[UserActivity]:
return UserActivity.objects.filter(user_profile=user_profile,
query='update_message_flags').order_by("last_visit").last()
# NOTE: If this function name is changed, add the new name to the
# query in get_latest_update_message_flag_activity
@has_request_variables
def update_message_flags(request: HttpRequest, user_profile: UserProfile,
messages: List[int]=REQ(validator=check_list(check_int)),
operation: str=REQ('op'), flag: str=REQ()) -> HttpResponse:
count = do_update_message_flags(user_profile, request.client, operation, flag, messages)
target_count_str = str(len(messages))
log_data_str = f"[{operation} {flag}/{target_count_str}] actually {count}"
request._log_data["extra"] = log_data_str
return json_success({'result': 'success',
'messages': messages,
'msg': ''})
@has_request_variables
def mark_all_as_read(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
count = do_mark_all_as_read(user_profile, request.client)
log_data_str = f"[{count} updated]"
request._log_data["extra"] = log_data_str
return json_success({'result': 'success',
'msg': ''})
@has_request_variables
def mark_stream_as_read(request: HttpRequest,
user_profile: UserProfile,
stream_id: int=REQ(validator=check_int)) -> HttpResponse:
stream, recipient, sub = access_stream_by_id(user_profile, stream_id)
count = do_mark_stream_messages_as_read(user_profile, request.client, stream)
log_data_str = f"[{count} updated]"
request._log_data["extra"] = log_data_str
return json_success({'result': 'success',
'msg': ''})
@has_request_variables
def mark_topic_as_read(request: HttpRequest,
user_profile: UserProfile,
stream_id: int=REQ(validator=check_int),
topic_name: str=REQ()) -> HttpResponse:
stream, recipient, sub = access_stream_by_id(user_profile, stream_id)
if topic_name:
topic_exists = user_message_exists_for_topic(
user_profile=user_profile,
recipient=recipient,
topic_name=topic_name,
)
if not topic_exists:
raise JsonableError(_('No such topic \'{}\'').format(topic_name))
count = do_mark_stream_messages_as_read(user_profile, request.client, stream, topic_name)
log_data_str = f"[{count} updated]"
request._log_data["extra"] = log_data_str
return json_success({'result': 'success',
'msg': ''})
class InvalidMirrorInput(Exception):
pass

View File

@@ -24,6 +24,7 @@ import zerver.views.documentation
import zerver.views.email_mirror
import zerver.views.home
import zerver.views.message_edit
import zerver.views.message_flags
import zerver.views.messages
import zerver.views.muting
import zerver.views.portico
@@ -181,11 +182,11 @@ v1_api_and_json_patterns = [
# mark messages as read (in bulk)
url(r'^mark_all_as_read$', rest_dispatch,
{'POST': 'zerver.views.messages.mark_all_as_read'}),
{'POST': 'zerver.views.message_flags.mark_all_as_read'}),
url(r'^mark_stream_as_read$', rest_dispatch,
{'POST': 'zerver.views.messages.mark_stream_as_read'}),
{'POST': 'zerver.views.message_flags.mark_stream_as_read'}),
url(r'^mark_topic_as_read$', rest_dispatch,
{'POST': 'zerver.views.messages.mark_topic_as_read'}),
{'POST': 'zerver.views.message_flags.mark_topic_as_read'}),
url(r'^zcommand$', rest_dispatch,
{'POST': 'zerver.views.messages.zcommand_backend'}),
@@ -203,7 +204,7 @@ v1_api_and_json_patterns = [
url(r'^messages/render$', rest_dispatch,
{'POST': 'zerver.views.messages.render_message_backend'}),
url(r'^messages/flags$', rest_dispatch,
{'POST': 'zerver.views.messages.update_message_flags'}),
{'POST': 'zerver.views.message_flags.update_message_flags'}),
url(r'^messages/(?P<message_id>\d+)/history$', rest_dispatch,
{'GET': 'zerver.views.message_edit.get_message_edit_history'}),
url(r'^messages/matches_narrow$', rest_dispatch,