From 3d1bb23809d420244dc10dfcbf4450bf37ab67aa Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Mon, 29 Apr 2019 00:50:23 -0400 Subject: [PATCH] Move discussion_api to discussion/rest_api --- .github/CODEOWNERS | 1 - lms/djangoapps/discussion/README.rst | 1 - lms/djangoapps/discussion/apps.py | 2 +- .../rest_api}/__init__.py | 0 .../rest_api}/api.py | 26 +++++++++---------- .../rest_api}/exceptions.py | 0 .../rest_api}/forms.py | 0 .../rest_api}/pagination.py | 0 .../rest_api}/permissions.py | 0 .../rest_api}/render.py | 0 .../rest_api}/serializers.py | 4 +-- .../rest_api}/tests/__init__.py | 0 .../rest_api}/tests/test_api.py | 8 +++--- .../rest_api}/tests/test_forms.py | 2 +- .../rest_api}/tests/test_pagination.py | 4 +-- .../rest_api}/tests/test_permissions.py | 2 +- .../rest_api}/tests/test_render.py | 2 +- .../rest_api}/tests/test_serializers.py | 4 +-- .../rest_api}/tests/test_views.py | 4 +-- .../rest_api}/tests/utils.py | 0 .../rest_api}/urls.py | 2 +- .../rest_api}/views.py | 6 ++--- lms/djangoapps/discussion_api/README.rst | 1 - lms/djangoapps/teams/models.py | 2 +- lms/envs/common.py | 1 - lms/urls.py | 2 +- 26 files changed, 35 insertions(+), 39 deletions(-) rename lms/djangoapps/{discussion_api => discussion/rest_api}/__init__.py (100%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/api.py (97%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/exceptions.py (100%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/forms.py (100%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/pagination.py (100%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/permissions.py (100%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/render.py (100%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/serializers.py (99%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/tests/__init__.py (100%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/tests/test_api.py (99%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/tests/test_forms.py (98%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/tests/test_pagination.py (91%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/tests/test_permissions.py (98%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/tests/test_render.py (97%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/tests/test_serializers.py (99%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/tests/test_views.py (99%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/tests/utils.py (100%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/urls.py (96%) rename lms/djangoapps/{discussion_api => discussion/rest_api}/views.py (99%) delete mode 100644 lms/djangoapps/discussion_api/README.rst diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b102efcfe1..f6854e4c52 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -22,7 +22,6 @@ common/lib/xmodule/xmodule/capa_module.py @edx/platform-core-extensions common/lib/xmodule/xmodule/html_module.py @edx/platform-core-extensions common/lib/xmodule/xmodule/video_module @edx/platform-core-extensions lms/djangoapps/discussion/ @edx/platform-core-extensions -lms/djangoapps/discussion_api/ @edx/platform-core-extensions lms/djangoapps/edxnotes @edx/platform-core-extensions lms/djangoapps/notifier_api/ @edx/platform-core-extensions diff --git a/lms/djangoapps/discussion/README.rst b/lms/djangoapps/discussion/README.rst index 249c2d92fd..917b8e763b 100644 --- a/lms/djangoapps/discussion/README.rst +++ b/lms/djangoapps/discussion/README.rst @@ -10,7 +10,6 @@ Discussions related functionality is scattered across a number of places and sho * ``common/djangoapps/django_comment_common`` * ``lms/djangoapps/discussion`` -* ``lms/djangoapps/discussion_api`` * ``lms/djangoapps/django_comment_client`` * ``lms/djangoapps/notification_prefs`` * ``lms/djangoapps/notifier_api`` diff --git a/lms/djangoapps/discussion/apps.py b/lms/djangoapps/discussion/apps.py index 43f7d9d1f6..2a0c2a2db6 100644 --- a/lms/djangoapps/discussion/apps.py +++ b/lms/djangoapps/discussion/apps.py @@ -12,7 +12,7 @@ from openedx.core.djangoapps.plugins.constants import ProjectType, SettingsType, class DiscussionConfig(AppConfig): """ - Application Configuration for Grades. + Application Configuration for Discussion. """ name = u'lms.djangoapps.discussion' diff --git a/lms/djangoapps/discussion_api/__init__.py b/lms/djangoapps/discussion/rest_api/__init__.py similarity index 100% rename from lms/djangoapps/discussion_api/__init__.py rename to lms/djangoapps/discussion/rest_api/__init__.py diff --git a/lms/djangoapps/discussion_api/api.py b/lms/djangoapps/discussion/rest_api/api.py similarity index 97% rename from lms/djangoapps/discussion_api/api.py rename to lms/djangoapps/discussion/rest_api/api.py index c55f0716cf..78d60617dc 100644 --- a/lms/djangoapps/discussion_api/api.py +++ b/lms/djangoapps/discussion/rest_api/api.py @@ -15,15 +15,15 @@ from opaque_keys.edx.locator import CourseKey from rest_framework.exceptions import PermissionDenied from courseware.courses import get_course_with_access -from discussion_api.exceptions import CommentNotFoundError, DiscussionDisabledError, ThreadNotFoundError -from discussion_api.forms import CommentActionsForm, ThreadActionsForm -from discussion_api.permissions import ( +from lms.djangoapps.discussion.rest_api.exceptions import CommentNotFoundError, DiscussionDisabledError, ThreadNotFoundError +from lms.djangoapps.discussion.rest_api.forms import CommentActionsForm, ThreadActionsForm +from lms.djangoapps.discussion.rest_api.permissions import ( can_delete, get_editable_fields, get_initializable_comment_fields, get_initializable_thread_fields ) -from discussion_api.serializers import CommentSerializer, DiscussionTopicSerializer, ThreadSerializer, get_context +from lms.djangoapps.discussion.rest_api.serializers import CommentSerializer, DiscussionTopicSerializer, ThreadSerializer, get_context from django_comment_client.base.views import track_comment_created_event, track_thread_created_event, track_voted_event from django_comment_client.utils import get_accessible_discussion_xblocks, get_group_id_for_user, is_commentable_divided from django_comment_common.comment_client.comment import Comment @@ -41,7 +41,7 @@ from django_comment_common.signals import ( ) from django_comment_common.utils import get_course_discussion_settings from lms.djangoapps.courseware.exceptions import CourseAccessRedirect -from lms.djangoapps.discussion_api.pagination import DiscussionAPIPagination +from lms.djangoapps.discussion.rest_api.pagination import DiscussionAPIPagination from openedx.core.djangoapps.user_api.accounts.views import AccountViewSet from openedx.core.lib.exceptions import CourseNotFoundError, DiscussionNotFoundError, PageNotFoundError @@ -175,7 +175,7 @@ def get_course(request, course_key): Returns: - The course information; see discussion_api.views.CourseView for more + The course information; see discussion.rest_api.views.CourseView for more detail. Raises: @@ -305,7 +305,7 @@ def get_course_topics(request, course_key, topic_ids=None): Returns: - A course topic listing dictionary; see discussion_api.views.CourseTopicViews + A course topic listing dictionary; see discussion.rest_api.views.CourseTopicViews for more detail. Raises: @@ -510,7 +510,7 @@ def get_thread_list( Returns: A paginated result containing a list of threads; see - discussion_api.views.ThreadViewSet for more detail. + discussion.rest_api.views.ThreadViewSet for more detail. Raises: @@ -612,7 +612,7 @@ def get_comment_list(request, thread_id, endorsed, page, page_size, requested_fi Returns: A paginated result containing a list of comments; see - discussion_api.views.CommentViewSet for more detail. + discussion.rest_api.views.CommentViewSet for more detail. """ response_skip = page_size * (page - 1) cc_thread, context = _get_thread_and_context( @@ -809,7 +809,7 @@ def create_thread(request, thread_data): Returns: - The created thread; see discussion_api.views.ThreadViewSet for more + The created thread; see discussion.rest_api.views.ThreadViewSet for more detail. """ course_id = thread_data.get("course_id") @@ -859,7 +859,7 @@ def create_comment(request, comment_data): Returns: - The created comment; see discussion_api.views.CommentViewSet for more + The created comment; see discussion.rest_api.views.CommentViewSet for more detail. """ thread_id = comment_data.get("thread_id") @@ -902,7 +902,7 @@ def update_thread(request, thread_id, update_data): Returns: - The updated thread; see discussion_api.views.ThreadViewSet for more + The updated thread; see discussion.rest_api.views.ThreadViewSet for more detail. """ cc_thread, context = _get_thread_and_context(request, thread_id, retrieve_kwargs={"with_responses": True}) @@ -941,7 +941,7 @@ def update_comment(request, comment_id, update_data): Returns: - The updated comment; see discussion_api.views.CommentViewSet for more + The updated comment; see discussion.rest_api.views.CommentViewSet for more detail. Raises: diff --git a/lms/djangoapps/discussion_api/exceptions.py b/lms/djangoapps/discussion/rest_api/exceptions.py similarity index 100% rename from lms/djangoapps/discussion_api/exceptions.py rename to lms/djangoapps/discussion/rest_api/exceptions.py diff --git a/lms/djangoapps/discussion_api/forms.py b/lms/djangoapps/discussion/rest_api/forms.py similarity index 100% rename from lms/djangoapps/discussion_api/forms.py rename to lms/djangoapps/discussion/rest_api/forms.py diff --git a/lms/djangoapps/discussion_api/pagination.py b/lms/djangoapps/discussion/rest_api/pagination.py similarity index 100% rename from lms/djangoapps/discussion_api/pagination.py rename to lms/djangoapps/discussion/rest_api/pagination.py diff --git a/lms/djangoapps/discussion_api/permissions.py b/lms/djangoapps/discussion/rest_api/permissions.py similarity index 100% rename from lms/djangoapps/discussion_api/permissions.py rename to lms/djangoapps/discussion/rest_api/permissions.py diff --git a/lms/djangoapps/discussion_api/render.py b/lms/djangoapps/discussion/rest_api/render.py similarity index 100% rename from lms/djangoapps/discussion_api/render.py rename to lms/djangoapps/discussion/rest_api/render.py diff --git a/lms/djangoapps/discussion_api/serializers.py b/lms/djangoapps/discussion/rest_api/serializers.py similarity index 99% rename from lms/djangoapps/discussion_api/serializers.py rename to lms/djangoapps/discussion/rest_api/serializers.py index 3c3165a594..abb939f34a 100644 --- a/lms/djangoapps/discussion_api/serializers.py +++ b/lms/djangoapps/discussion/rest_api/serializers.py @@ -10,8 +10,8 @@ from django.urls import reverse from rest_framework import serializers from discussion.views import get_divided_discussions -from discussion_api.permissions import NON_UPDATABLE_COMMENT_FIELDS, NON_UPDATABLE_THREAD_FIELDS, get_editable_fields -from discussion_api.render import render_body +from lms.djangoapps.discussion.rest_api.permissions import NON_UPDATABLE_COMMENT_FIELDS, NON_UPDATABLE_THREAD_FIELDS, get_editable_fields +from lms.djangoapps.discussion.rest_api.render import render_body from django_comment_client.utils import is_comment_too_deep, get_group_id_for_user, get_group_name from django_comment_common.models import ( FORUM_ROLE_ADMINISTRATOR, diff --git a/lms/djangoapps/discussion_api/tests/__init__.py b/lms/djangoapps/discussion/rest_api/tests/__init__.py similarity index 100% rename from lms/djangoapps/discussion_api/tests/__init__.py rename to lms/djangoapps/discussion/rest_api/tests/__init__.py diff --git a/lms/djangoapps/discussion_api/tests/test_api.py b/lms/djangoapps/discussion/rest_api/tests/test_api.py similarity index 99% rename from lms/djangoapps/discussion_api/tests/test_api.py rename to lms/djangoapps/discussion/rest_api/tests/test_api.py index ef3dbbe351..24f9e5a5bf 100644 --- a/lms/djangoapps/discussion_api/tests/test_api.py +++ b/lms/djangoapps/discussion/rest_api/tests/test_api.py @@ -17,8 +17,8 @@ from rest_framework.exceptions import PermissionDenied from common.test.utils import MockSignalHandlerMixin, disable_signal from courseware.tests.factories import BetaTesterFactory, StaffFactory -from discussion_api import api -from discussion_api.api import ( +from lms.djangoapps.discussion.rest_api import api +from lms.djangoapps.discussion.rest_api.api import ( create_comment, create_thread, delete_comment, @@ -31,8 +31,8 @@ from discussion_api.api import ( update_comment, update_thread ) -from discussion_api.exceptions import CommentNotFoundError, DiscussionDisabledError, ThreadNotFoundError -from discussion_api.tests.utils import ( +from lms.djangoapps.discussion.rest_api.exceptions import CommentNotFoundError, DiscussionDisabledError, ThreadNotFoundError +from lms.djangoapps.discussion.rest_api.tests.utils import ( CommentsServiceMockMixin, make_minimal_cs_comment, make_minimal_cs_thread, diff --git a/lms/djangoapps/discussion_api/tests/test_forms.py b/lms/djangoapps/discussion/rest_api/tests/test_forms.py similarity index 98% rename from lms/djangoapps/discussion_api/tests/test_forms.py rename to lms/djangoapps/discussion/rest_api/tests/test_forms.py index 8bc87d4e59..1e79d93c7e 100644 --- a/lms/djangoapps/discussion_api/tests/test_forms.py +++ b/lms/djangoapps/discussion/rest_api/tests/test_forms.py @@ -9,7 +9,7 @@ import ddt from django.http import QueryDict from opaque_keys.edx.locator import CourseLocator -from discussion_api.forms import CommentListGetForm, ThreadListGetForm +from lms.djangoapps.discussion.rest_api.forms import CommentListGetForm, ThreadListGetForm from openedx.core.djangoapps.util.test_forms import FormTestMixin diff --git a/lms/djangoapps/discussion_api/tests/test_pagination.py b/lms/djangoapps/discussion/rest_api/tests/test_pagination.py similarity index 91% rename from lms/djangoapps/discussion_api/tests/test_pagination.py rename to lms/djangoapps/discussion/rest_api/tests/test_pagination.py index 7d904274f5..a76d10e7a5 100644 --- a/lms/djangoapps/discussion_api/tests/test_pagination.py +++ b/lms/djangoapps/discussion/rest_api/tests/test_pagination.py @@ -5,8 +5,8 @@ from unittest import TestCase from django.test import RequestFactory -from discussion_api.pagination import DiscussionAPIPagination -from discussion_api.tests.utils import make_paginated_api_response +from lms.djangoapps.discussion.rest_api.pagination import DiscussionAPIPagination +from lms.djangoapps.discussion.rest_api.tests.utils import make_paginated_api_response class PaginationSerializerTest(TestCase): diff --git a/lms/djangoapps/discussion_api/tests/test_permissions.py b/lms/djangoapps/discussion/rest_api/tests/test_permissions.py similarity index 98% rename from lms/djangoapps/discussion_api/tests/test_permissions.py rename to lms/djangoapps/discussion/rest_api/tests/test_permissions.py index 97a0c71edb..6e7ce7ebdb 100644 --- a/lms/djangoapps/discussion_api/tests/test_permissions.py +++ b/lms/djangoapps/discussion/rest_api/tests/test_permissions.py @@ -5,7 +5,7 @@ import itertools import ddt -from discussion_api.permissions import ( +from lms.djangoapps.discussion.rest_api.permissions import ( can_delete, get_editable_fields, get_initializable_comment_fields, diff --git a/lms/djangoapps/discussion_api/tests/test_render.py b/lms/djangoapps/discussion/rest_api/tests/test_render.py similarity index 97% rename from lms/djangoapps/discussion_api/tests/test_render.py rename to lms/djangoapps/discussion/rest_api/tests/test_render.py index 3aefe6dcb2..55b10e690b 100644 --- a/lms/djangoapps/discussion_api/tests/test_render.py +++ b/lms/djangoapps/discussion/rest_api/tests/test_render.py @@ -5,7 +5,7 @@ from unittest import TestCase import ddt -from discussion_api.render import render_body +from lms.djangoapps.discussion.rest_api.render import render_body def _add_p_tags(raw_body): diff --git a/lms/djangoapps/discussion_api/tests/test_serializers.py b/lms/djangoapps/discussion/rest_api/tests/test_serializers.py similarity index 99% rename from lms/djangoapps/discussion_api/tests/test_serializers.py rename to lms/djangoapps/discussion/rest_api/tests/test_serializers.py index 77088e01f8..6776d72129 100644 --- a/lms/djangoapps/discussion_api/tests/test_serializers.py +++ b/lms/djangoapps/discussion/rest_api/tests/test_serializers.py @@ -9,8 +9,8 @@ import httpretty import mock from django.test.client import RequestFactory -from discussion_api.serializers import CommentSerializer, ThreadSerializer, get_context -from discussion_api.tests.utils import CommentsServiceMockMixin, make_minimal_cs_comment, make_minimal_cs_thread +from lms.djangoapps.discussion.rest_api.serializers import CommentSerializer, ThreadSerializer, get_context +from lms.djangoapps.discussion.rest_api.tests.utils import CommentsServiceMockMixin, make_minimal_cs_comment, make_minimal_cs_thread from django_comment_client.tests.utils import ForumsEnableMixin from django_comment_common.comment_client.comment import Comment from django_comment_common.comment_client.thread import Thread diff --git a/lms/djangoapps/discussion_api/tests/test_views.py b/lms/djangoapps/discussion/rest_api/tests/test_views.py similarity index 99% rename from lms/djangoapps/discussion_api/tests/test_views.py rename to lms/djangoapps/discussion/rest_api/tests/test_views.py index 6c0335c2b9..95bddf86f7 100644 --- a/lms/djangoapps/discussion_api/tests/test_views.py +++ b/lms/djangoapps/discussion/rest_api/tests/test_views.py @@ -21,8 +21,8 @@ from six import text_type from common.test.utils import disable_signal from course_modes.models import CourseMode from course_modes.tests.factories import CourseModeFactory -from discussion_api import api -from discussion_api.tests.utils import ( +from lms.djangoapps.discussion.rest_api import api +from lms.djangoapps.discussion.rest_api.tests.utils import ( CommentsServiceMockMixin, ProfileImageTestMixin, make_minimal_cs_comment, diff --git a/lms/djangoapps/discussion_api/tests/utils.py b/lms/djangoapps/discussion/rest_api/tests/utils.py similarity index 100% rename from lms/djangoapps/discussion_api/tests/utils.py rename to lms/djangoapps/discussion/rest_api/tests/utils.py diff --git a/lms/djangoapps/discussion_api/urls.py b/lms/djangoapps/discussion/rest_api/urls.py similarity index 96% rename from lms/djangoapps/discussion_api/urls.py rename to lms/djangoapps/discussion/rest_api/urls.py index 76a6f156e3..8b7d632639 100644 --- a/lms/djangoapps/discussion_api/urls.py +++ b/lms/djangoapps/discussion/rest_api/urls.py @@ -5,7 +5,7 @@ from django.conf import settings from django.conf.urls import include, url from rest_framework.routers import SimpleRouter -from discussion_api.views import ( +from lms.djangoapps.discussion.rest_api.views import ( CommentViewSet, CourseDiscussionSettingsAPIView, CourseDiscussionRolesAPIView, diff --git a/lms/djangoapps/discussion_api/views.py b/lms/djangoapps/discussion/rest_api/views.py similarity index 99% rename from lms/djangoapps/discussion_api/views.py rename to lms/djangoapps/discussion/rest_api/views.py index 01de167028..2425ffb226 100644 --- a/lms/djangoapps/discussion_api/views.py +++ b/lms/djangoapps/discussion/rest_api/views.py @@ -24,7 +24,7 @@ from django_comment_common.utils import get_course_discussion_settings, set_cour from instructor.access import update_forum_role from discussion.views import get_divided_discussions -from discussion_api.api import ( +from lms.djangoapps.discussion.rest_api.api import ( create_comment, create_thread, delete_comment, @@ -38,13 +38,13 @@ from discussion_api.api import ( update_comment, update_thread ) -from discussion_api.forms import ( +from lms.djangoapps.discussion.rest_api.forms import ( CommentGetForm, CommentListGetForm, CourseDiscussionSettingsForm, ThreadListGetForm, CourseDiscussionRolesForm) -from discussion_api.serializers import ( +from lms.djangoapps.discussion.rest_api.serializers import ( DiscussionRolesSerializer, DiscussionRolesListSerializer, DiscussionSettingsSerializer, diff --git a/lms/djangoapps/discussion_api/README.rst b/lms/djangoapps/discussion_api/README.rst deleted file mode 100644 index 80e9568232..0000000000 --- a/lms/djangoapps/discussion_api/README.rst +++ /dev/null @@ -1 +0,0 @@ -See ``lms/djangoapps/discussion/README.rst`` diff --git a/lms/djangoapps/teams/models.py b/lms/djangoapps/teams/models.py index cb9e31379a..3af021b6be 100644 --- a/lms/djangoapps/teams/models.py +++ b/lms/djangoapps/teams/models.py @@ -82,7 +82,7 @@ def comment_endorsed_handler(sender, **kwargs): # pylint: disable=unused-argume def handle_activity(user, post, original_author_id=None): """ - Handle user activity from django_comment_client and discussion_api + Handle user activity from django_comment_client and discussion.rest_api and update the user's last activity date. Checks if the user who performed the action is the original author, and that the discussion has the team context. diff --git a/lms/envs/common.py b/lms/envs/common.py index 555999d284..ef6a523938 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -2125,7 +2125,6 @@ INSTALLED_APPS = [ # Discussion forums 'django_comment_client', 'django_comment_common', - 'discussion_api', # Notes 'notes', diff --git a/lms/urls.py b/lms/urls.py index 5f5febae7e..991b0df787 100644 --- a/lms/urls.py +++ b/lms/urls.py @@ -704,7 +704,7 @@ if settings.FEATURES.get('ENABLE_DISCUSSION_SERVICE'): urlpatterns += [ url( r'^api/discussion/', - include('discussion_api.urls') + include('discussion.rest_api.urls') ), url( r'^courses/{}/discussion/'.format(