Merge pull request #4542 from FinnStutzenstein/removeChatMessage
Remove ChatMessage
This commit is contained in:
commit
8983f6aef3
@ -23,14 +23,6 @@ class TagAccessPermissions(BaseAccessPermissions):
|
||||
"""
|
||||
|
||||
|
||||
class ChatMessageAccessPermissions(BaseAccessPermissions):
|
||||
"""
|
||||
Access permissions container for ChatMessage and ChatMessageViewSet.
|
||||
"""
|
||||
|
||||
base_permission = "core.can_use_chat"
|
||||
|
||||
|
||||
class ProjectorMessageAccessPermissions(BaseAccessPermissions):
|
||||
"""
|
||||
Access permissions for ProjectorMessage.
|
||||
|
@ -2,7 +2,7 @@ import os
|
||||
import sys
|
||||
from collections import OrderedDict
|
||||
from operator import attrgetter
|
||||
from typing import Any, Dict, List, Set
|
||||
from typing import Any, Dict, List
|
||||
|
||||
from django.apps import AppConfig
|
||||
from django.conf import settings
|
||||
@ -28,7 +28,6 @@ class CoreAppConfig(AppConfig):
|
||||
post_permission_creation,
|
||||
)
|
||||
from .views import (
|
||||
ChatMessageViewSet,
|
||||
ConfigViewSet,
|
||||
CountdownViewSet,
|
||||
HistoryViewSet,
|
||||
@ -45,7 +44,6 @@ class CoreAppConfig(AppConfig):
|
||||
ListenToProjectors,
|
||||
PingPong,
|
||||
)
|
||||
from ..utils.access_permissions import required_user
|
||||
from ..utils.rest_api import router
|
||||
from ..utils.websocket import register_client_message
|
||||
|
||||
@ -81,9 +79,6 @@ class CoreAppConfig(AppConfig):
|
||||
self.get_model("Projectiondefault").get_collection_string(),
|
||||
ProjectionDefaultViewSet,
|
||||
)
|
||||
router.register(
|
||||
self.get_model("ChatMessage").get_collection_string(), ChatMessageViewSet
|
||||
)
|
||||
router.register(self.get_model("Tag").get_collection_string(), TagViewSet)
|
||||
router.register(
|
||||
self.get_model("ConfigStore").get_collection_string(),
|
||||
@ -112,11 +107,6 @@ class CoreAppConfig(AppConfig):
|
||||
register_client_message(ListenToProjectors())
|
||||
register_client_message(PingPong())
|
||||
|
||||
# register required_users
|
||||
required_user.add_collection_string(
|
||||
self.get_model("ChatMessage").get_collection_string(), required_users
|
||||
)
|
||||
|
||||
def get_config_variables(self):
|
||||
from .config_variables import get_config_variables
|
||||
|
||||
@ -130,7 +120,6 @@ class CoreAppConfig(AppConfig):
|
||||
for model_name in (
|
||||
"Projector",
|
||||
"ProjectionDefault",
|
||||
"ChatMessage",
|
||||
"Tag",
|
||||
"ProjectorMessage",
|
||||
"Countdown",
|
||||
@ -205,13 +194,6 @@ def call_save_default_values(**kwargs):
|
||||
config.save_default_values()
|
||||
|
||||
|
||||
def required_users(element: Dict[str, Any]) -> Set[int]:
|
||||
"""
|
||||
Returns all user ids that are displayed as chatters.
|
||||
"""
|
||||
return set((element["user_id"],))
|
||||
|
||||
|
||||
def startup():
|
||||
"""
|
||||
Runs commands that are needed at startup.
|
||||
|
21
openslides/core/migrations/0022_remove_chatmessage.py
Normal file
21
openslides/core/migrations/0022_remove_chatmessage.py
Normal file
@ -0,0 +1,21 @@
|
||||
# Generated by Django 2.1.7 on 2019-03-29 06:45
|
||||
|
||||
from django.contrib.auth.models import Permission
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
def remove_chatmessage_permissions(apps, schema_editor):
|
||||
content_type = ContentType.objects.filter(model="chatmessage", app_label="core")
|
||||
Permission.objects.filter(content_type__in=content_type).delete()
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [("core", "0021_auto_20190415_0942")]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(remove_chatmessage_permissions),
|
||||
migrations.RemoveField(model_name="chatmessage", name="user"),
|
||||
migrations.DeleteModel(name="ChatMessage"),
|
||||
]
|
@ -6,13 +6,8 @@ from jsonfield import JSONField
|
||||
|
||||
from ..utils.autoupdate import Element
|
||||
from ..utils.cache import element_cache, get_element_id
|
||||
from ..utils.models import (
|
||||
CASCADE_AND_AUTOUODATE,
|
||||
SET_NULL_AND_AUTOUPDATE,
|
||||
RESTModelMixin,
|
||||
)
|
||||
from ..utils.models import SET_NULL_AND_AUTOUPDATE, RESTModelMixin
|
||||
from .access_permissions import (
|
||||
ChatMessageAccessPermissions,
|
||||
ConfigAccessPermissions,
|
||||
CountdownAccessPermissions,
|
||||
HistoryAccessPermissions,
|
||||
@ -185,33 +180,6 @@ class ConfigStore(RESTModelMixin, models.Model):
|
||||
return "core/config"
|
||||
|
||||
|
||||
class ChatMessage(RESTModelMixin, models.Model):
|
||||
"""
|
||||
Model for chat messages.
|
||||
|
||||
At the moment we only have one global chat room for managers.
|
||||
"""
|
||||
|
||||
access_permissions = ChatMessageAccessPermissions()
|
||||
can_see_permission = "core.can_use_chat"
|
||||
|
||||
message = models.TextField()
|
||||
|
||||
timestamp = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=CASCADE_AND_AUTOUODATE)
|
||||
|
||||
class Meta:
|
||||
default_permissions = ()
|
||||
permissions = (
|
||||
("can_use_chat", "Can use the chat"),
|
||||
("can_manage_chat", "Can manage the chat"),
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"Message {self.timestamp}"
|
||||
|
||||
|
||||
class ProjectorMessage(RESTModelMixin, models.Model):
|
||||
"""
|
||||
Model for ProjectorMessages.
|
||||
|
@ -10,7 +10,6 @@ from ..utils.rest_api import (
|
||||
)
|
||||
from ..utils.validate import validate_html
|
||||
from .models import (
|
||||
ChatMessage,
|
||||
ConfigStore,
|
||||
Countdown,
|
||||
History,
|
||||
@ -141,17 +140,6 @@ class ConfigSerializer(ModelSerializer):
|
||||
fields = ("id", "key", "value")
|
||||
|
||||
|
||||
class ChatMessageSerializer(ModelSerializer):
|
||||
"""
|
||||
Serializer for core.models.ChatMessage objects.
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
model = ChatMessage
|
||||
fields = ("id", "message", "timestamp", "user")
|
||||
read_only_fields = ("user",)
|
||||
|
||||
|
||||
class ProjectorMessageSerializer(ModelSerializer):
|
||||
"""
|
||||
Serializer for core.models.ProjectorMessage objects.
|
||||
|
@ -42,8 +42,6 @@ def get_permission_change_data(sender, permissions, **kwargs):
|
||||
elif permission.codename == "can_manage_projector":
|
||||
yield core_app.get_model("ProjectorMessage")
|
||||
yield core_app.get_model("Countdown")
|
||||
elif permission.codename == "can_use_chat":
|
||||
yield core_app.get_model("ChatMessage")
|
||||
|
||||
|
||||
def autoupdate_for_many_to_many_relations(sender, instance, **kwargs):
|
||||
|
@ -35,7 +35,6 @@ from ..utils.rest_api import (
|
||||
list_route,
|
||||
)
|
||||
from .access_permissions import (
|
||||
ChatMessageAccessPermissions,
|
||||
ConfigAccessPermissions,
|
||||
CountdownAccessPermissions,
|
||||
HistoryAccessPermissions,
|
||||
@ -47,7 +46,6 @@ from .access_permissions import (
|
||||
from .config import config
|
||||
from .exceptions import ConfigError, ConfigNotFound
|
||||
from .models import (
|
||||
ChatMessage,
|
||||
ConfigStore,
|
||||
Countdown,
|
||||
History,
|
||||
@ -396,64 +394,6 @@ class ConfigViewSet(ModelViewSet):
|
||||
return Response({"key": key, "value": value})
|
||||
|
||||
|
||||
class ChatMessageViewSet(ModelViewSet):
|
||||
"""
|
||||
API endpoint for chat messages.
|
||||
|
||||
There are the following views: metadata, list, retrieve and create.
|
||||
The views partial_update, update and destroy are disabled.
|
||||
"""
|
||||
|
||||
access_permissions = ChatMessageAccessPermissions()
|
||||
queryset = ChatMessage.objects.all()
|
||||
|
||||
def check_view_permissions(self):
|
||||
"""
|
||||
Returns True if the user has required permissions.
|
||||
"""
|
||||
if self.action in ("list", "retrieve"):
|
||||
result = self.get_access_permissions().check_permissions(self.request.user)
|
||||
elif self.action in ("metadata", "create"):
|
||||
# We do not want anonymous users to use the chat even the anonymous
|
||||
# group has the permission core.can_use_chat.
|
||||
result = self.request.user.is_authenticated and has_perm(
|
||||
self.request.user, "core.can_use_chat"
|
||||
)
|
||||
elif self.action == "clear":
|
||||
result = has_perm(self.request.user, "core.can_use_chat") and has_perm(
|
||||
self.request.user, "core.can_manage_chat"
|
||||
)
|
||||
else:
|
||||
result = False
|
||||
return result
|
||||
|
||||
def perform_create(self, serializer):
|
||||
"""
|
||||
Customized method to inject the request.user into serializer's save
|
||||
method so that the request.user can be saved into the model field.
|
||||
"""
|
||||
serializer.save(user=self.request.user)
|
||||
# Send chatter via autoupdate because users without permission
|
||||
# to see users may not have it but can get it now.
|
||||
inform_changed_data([self.request.user])
|
||||
|
||||
@list_route(methods=["post"])
|
||||
def clear(self, request):
|
||||
"""
|
||||
Deletes all chat messages.
|
||||
"""
|
||||
# Collect all chat messages with their collection_string and id
|
||||
chatmessages = ChatMessage.objects.all()
|
||||
args = []
|
||||
for chatmessage in chatmessages:
|
||||
args.append((chatmessage.get_collection_string(), chatmessage.pk))
|
||||
chatmessages.delete()
|
||||
# Trigger autoupdate and setup response.
|
||||
if args:
|
||||
inform_deleted_data(args)
|
||||
return Response({"detail": "All chat messages deleted successfully."})
|
||||
|
||||
|
||||
class ProjectorMessageViewSet(ModelViewSet):
|
||||
"""
|
||||
API endpoint for messages.
|
||||
|
@ -46,11 +46,9 @@ def create_builtin_groups_and_admin(**kwargs):
|
||||
"core.can_manage_logos_and_fonts",
|
||||
"core.can_manage_projector",
|
||||
"core.can_manage_tags",
|
||||
"core.can_manage_chat",
|
||||
"core.can_see_frontpage",
|
||||
"core.can_see_history",
|
||||
"core.can_see_projector",
|
||||
"core.can_use_chat",
|
||||
"mediafiles.can_manage",
|
||||
"mediafiles.can_see",
|
||||
"mediafiles.can_see_hidden",
|
||||
@ -141,7 +139,6 @@ def create_builtin_groups_and_admin(**kwargs):
|
||||
permission_dict["core.can_see_projector"],
|
||||
permission_dict["core.can_manage_projector"],
|
||||
permission_dict["core.can_manage_tags"],
|
||||
permission_dict["core.can_use_chat"],
|
||||
permission_dict["mediafiles.can_see"],
|
||||
permission_dict["mediafiles.can_manage"],
|
||||
permission_dict["mediafiles.can_upload"],
|
||||
|
@ -4,7 +4,7 @@ from rest_framework import status
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from openslides.core.config import config
|
||||
from openslides.core.models import ChatMessage, Projector, Tag
|
||||
from openslides.core.models import Projector, Tag
|
||||
from openslides.users.models import User
|
||||
from openslides.utils.autoupdate import inform_changed_data
|
||||
from openslides.utils.test import TestCase
|
||||
@ -26,19 +26,6 @@ def test_projector_db_queries():
|
||||
assert count_queries(Projector.get_elements) == 2
|
||||
|
||||
|
||||
@pytest.mark.django_db(transaction=False)
|
||||
def test_chat_message_db_queries():
|
||||
"""
|
||||
Tests that only the following db queries are done:
|
||||
* 1 requests to get the list of all chatmessages.
|
||||
"""
|
||||
user = User.objects.get(username="admin")
|
||||
for index in range(10):
|
||||
ChatMessage.objects.create(user=user)
|
||||
|
||||
assert count_queries(ChatMessage.get_elements) == 1
|
||||
|
||||
|
||||
@pytest.mark.django_db(transaction=False)
|
||||
def test_tag_db_queries():
|
||||
"""
|
||||
@ -200,21 +187,3 @@ class Projection(TestCase):
|
||||
self.assertEqual(self.projector.elements, [])
|
||||
self.assertEqual(self.projector.elements_preview, elements)
|
||||
self.assertEqual(self.projector.elements_history, [])
|
||||
|
||||
|
||||
class ChatMessageViewSet(TestCase):
|
||||
"""
|
||||
Tests requests to deal with chat messages.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
admin = User.objects.get(username="admin")
|
||||
self.client.force_login(admin)
|
||||
ChatMessage.objects.create(
|
||||
message="test_message_peechiel8IeZoohaem9e", user=admin
|
||||
)
|
||||
|
||||
def test_clear_chat(self):
|
||||
response = self.client.post(reverse("chatmessage-clear"))
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(ChatMessage.objects.all().count(), 0)
|
||||
|
@ -514,10 +514,8 @@ class GroupUpdate(TestCase):
|
||||
"core.can_manage_config",
|
||||
"core.can_manage_projector",
|
||||
"core.can_manage_tags",
|
||||
"core.can_manage_chat",
|
||||
"core.can_see_frontpage",
|
||||
"core.can_see_projector",
|
||||
"core.can_use_chat",
|
||||
"mediafiles.can_manage",
|
||||
"mediafiles.can_see",
|
||||
"mediafiles.can_see_hidden",
|
||||
|
Loading…
Reference in New Issue
Block a user