From 912601726012598bbec3e5bb6a523e5c63be3432 Mon Sep 17 00:00:00 2001 From: Muhammad Faraz Maqsood Date: Mon, 16 Sep 2024 16:44:34 +0500 Subject: [PATCH] feat: call python methods from forum v2 - directly call python native APIs from forum v2 for pin, unpin thread, commentables count_stats and get user's data by user_id - add forum to the edx-platform requirements --- .../comment_client/course.py | 14 ++------- .../comment_client/thread.py | 31 +++---------------- .../comment_client/user.py | 25 ++------------- requirements/edx/base.txt | 11 ++++++- requirements/edx/development.txt | 10 ++++++ requirements/edx/doc.txt | 11 ++++++- requirements/edx/github.in | 2 ++ requirements/edx/testing.txt | 11 ++++++- 8 files changed, 51 insertions(+), 64 deletions(-) diff --git a/openedx/core/djangoapps/django_comment_common/comment_client/course.py b/openedx/core/djangoapps/django_comment_common/comment_client/course.py index 67d7efd22838..0f1c93647012 100644 --- a/openedx/core/djangoapps/django_comment_common/comment_client/course.py +++ b/openedx/core/djangoapps/django_comment_common/comment_client/course.py @@ -7,6 +7,7 @@ from edx_django_utils.monitoring import function_trace from opaque_keys.edx.keys import CourseKey +from forum import api as forum_api from openedx.core.djangoapps.django_comment_common.comment_client import settings from openedx.core.djangoapps.django_comment_common.comment_client.utils import perform_request @@ -29,17 +30,8 @@ def get_course_commentable_counts(course_key: CourseKey) -> Dict[str, Dict[str, } """ - url = f"{settings.PREFIX}/commentables/{course_key}/counts" - response = perform_request( - 'get', - url, - metric_tags=[ - f"course_key:{course_key}", - "function:get_course_commentable_counts", - ], - metric_action='commentable_stats.retrieve', - ) - return response + commentable_stats = forum_api.retrieve_commentables_stats(str(course_key)) + return commentable_stats @function_trace("get_course_user_stats") diff --git a/openedx/core/djangoapps/django_comment_common/comment_client/thread.py b/openedx/core/djangoapps/django_comment_common/comment_client/thread.py index ef5accbad25d..0471ed767031 100644 --- a/openedx/core/djangoapps/django_comment_common/comment_client/thread.py +++ b/openedx/core/djangoapps/django_comment_common/comment_client/thread.py @@ -6,6 +6,7 @@ from eventtracking import tracker from . import models, settings, utils +from forum import api as forum_api log = logging.getLogger(__name__) @@ -193,27 +194,11 @@ def unFlagAbuse(self, user, voteable, removeAll): voteable._update_from_response(response) def pin(self, user, thread_id): - url = _url_for_pin_thread(thread_id) - params = {'user_id': user.id} - response = utils.perform_request( - 'put', - url, - params, - metric_tags=self._metric_tags, - metric_action='thread.pin' - ) - self._update_from_response(response) + thread_data = forum_api.pin_thread(user.id, thread_id) + self._update_from_response(thread_data) def un_pin(self, user, thread_id): - url = _url_for_un_pin_thread(thread_id) - params = {'user_id': user.id} - response = utils.perform_request( - 'put', - url, - params, - metric_tags=self._metric_tags, - metric_action='thread.unpin' - ) + response = forum_api.unpin_thread(user.id, thread_id) self._update_from_response(response) @@ -223,11 +208,3 @@ def _url_for_flag_abuse_thread(thread_id): def _url_for_unflag_abuse_thread(thread_id): return f"{settings.PREFIX}/threads/{thread_id}/abuse_unflag" - - -def _url_for_pin_thread(thread_id): - return f"{settings.PREFIX}/threads/{thread_id}/pin" - - -def _url_for_un_pin_thread(thread_id): - return f"{settings.PREFIX}/threads/{thread_id}/unpin" diff --git a/openedx/core/djangoapps/django_comment_common/comment_client/user.py b/openedx/core/djangoapps/django_comment_common/comment_client/user.py index 684469c9e787..c47bdfe7d62a 100644 --- a/openedx/core/djangoapps/django_comment_common/comment_client/user.py +++ b/openedx/core/djangoapps/django_comment_common/comment_client/user.py @@ -3,6 +3,7 @@ from . import models, settings, utils +from forum import api as forum_api class User(models.Model): @@ -141,35 +142,13 @@ def subscribed_threads(self, query_params=None): ) def _retrieve(self, *args, **kwargs): - url = self.url(action='get', params=self.attributes) retrieve_params = self.default_retrieve_params.copy() retrieve_params.update(kwargs) if self.attributes.get('course_id'): retrieve_params['course_id'] = str(self.course_id) if self.attributes.get('group_id'): retrieve_params['group_id'] = self.group_id - try: - response = utils.perform_request( - 'get', - url, - retrieve_params, - metric_action='model.retrieve', - metric_tags=self._metric_tags, - ) - except utils.CommentClientRequestError as e: - if e.status_code == 404: - # attempt to gracefully recover from a previous failure - # to sync this user to the comments service. - self.save() - response = utils.perform_request( - 'get', - url, - retrieve_params, - metric_action='model.retrieve', - metric_tags=self._metric_tags, - ) - else: - raise + response = forum_api.retrieve_user(self.attributes["id"], retrieve_params) self._update_from_response(response) def retire(self, retired_username): diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index 7f9f822de94d..07c26e0844ea 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -227,6 +227,7 @@ django==4.2.15 # enmerkar # enmerkar-underscore # event-tracking + # forum # help-tokens # jsonfield # lti-consumer-xblock @@ -382,6 +383,7 @@ djangorestframework==3.14.0 # edx-organizations # edx-proctoring # edx-submissions + # forum # openedx-learning # ora2 # super-csv @@ -549,6 +551,7 @@ elasticsearch==7.13.4 # via # -c requirements/edx/../common_constraints.txt # edx-search + # forum enmerkar==0.7.1 # via enmerkar-underscore enmerkar-underscore==2.3.1 @@ -566,6 +569,8 @@ filelock==3.15.4 # via snowflake-connector-python firebase-admin==6.5.0 # via edx-ace +forum @ git+https://github.com/edly-io/forum.git@feat/migrate_from_http_to_python_call + # via -r requirements/edx/github.in frozenlist==1.4.1 # via # aiohttp @@ -802,7 +807,9 @@ openai==0.28.1 # -c requirements/edx/../constraints.txt # edx-enterprise openedx-atlas==0.6.1 - # via -r requirements/edx/kernel.in + # via + # -r requirements/edx/kernel.in + # forum openedx-calc==3.1.0 # via -r requirements/edx/kernel.in openedx-django-pyfs==3.6.0 @@ -956,6 +963,7 @@ pymongo==4.4.0 # -r requirements/edx/paver.txt # edx-opaque-keys # event-tracking + # forum # mongoengine # openedx-mongodbproxy pynacl==1.5.0 @@ -1062,6 +1070,7 @@ requests==2.32.3 # edx-drf-extensions # edx-enterprise # edx-rest-api-client + # forum # geoip2 # google-api-core # google-cloud-storage diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 0979f70d509c..1fb2de8c3669 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -396,6 +396,7 @@ django==4.2.15 # enmerkar # enmerkar-underscore # event-tracking + # forum # help-tokens # jsonfield # lti-consumer-xblock @@ -615,6 +616,7 @@ djangorestframework==3.14.0 # edx-organizations # edx-proctoring # edx-submissions + # forum # openedx-learning # ora2 # super-csv @@ -857,6 +859,7 @@ elasticsearch==7.13.4 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-search + # forum enmerkar==0.7.1 # via # -r requirements/edx/doc.txt @@ -905,6 +908,10 @@ firebase-admin==6.5.0 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-ace +forum @ git+https://github.com/edly-io/forum.git@feat/migrate_from_http_to_python_call + # via + # -r requirements/edx/doc.txt + # -r requirements/edx/testing.txt freezegun==1.5.1 # via -r requirements/edx/testing.txt frozenlist==1.4.1 @@ -1341,6 +1348,7 @@ openedx-atlas==0.6.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt + # forum openedx-calc==3.1.0 # via # -r requirements/edx/doc.txt @@ -1637,6 +1645,7 @@ pymongo==4.4.0 # -r requirements/edx/testing.txt # edx-opaque-keys # event-tracking + # forum # mongoengine # openedx-mongodbproxy pynacl==1.5.0 @@ -1829,6 +1838,7 @@ requests==2.32.3 # edx-drf-extensions # edx-enterprise # edx-rest-api-client + # forum # geoip2 # google-api-core # google-cloud-storage diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index 8b2302ebe319..466394da4360 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -281,6 +281,7 @@ django==4.2.15 # enmerkar # enmerkar-underscore # event-tracking + # forum # help-tokens # jsonfield # lti-consumer-xblock @@ -452,6 +453,7 @@ djangorestframework==3.14.0 # edx-organizations # edx-proctoring # edx-submissions + # forum # openedx-learning # ora2 # super-csv @@ -633,6 +635,7 @@ elasticsearch==7.13.4 # -c requirements/edx/../common_constraints.txt # -r requirements/edx/base.txt # edx-search + # forum enmerkar==0.7.1 # via # -r requirements/edx/base.txt @@ -658,6 +661,8 @@ firebase-admin==6.5.0 # via # -r requirements/edx/base.txt # edx-ace +forum @ git+https://github.com/edly-io/forum.git@feat/migrate_from_http_to_python_call + # via -r requirements/edx/base.txt frozenlist==1.4.1 # via # -r requirements/edx/base.txt @@ -960,7 +965,9 @@ openai==0.28.1 # -r requirements/edx/base.txt # edx-enterprise openedx-atlas==0.6.1 - # via -r requirements/edx/base.txt + # via + # -r requirements/edx/base.txt + # forum openedx-calc==3.1.0 # via -r requirements/edx/base.txt openedx-django-pyfs==3.6.0 @@ -1150,6 +1157,7 @@ pymongo==4.4.0 # -r requirements/edx/base.txt # edx-opaque-keys # event-tracking + # forum # mongoengine # openedx-mongodbproxy pynacl==1.5.0 @@ -1271,6 +1279,7 @@ requests==2.32.3 # edx-drf-extensions # edx-enterprise # edx-rest-api-client + # forum # geoip2 # google-api-core # google-cloud-storage diff --git a/requirements/edx/github.in b/requirements/edx/github.in index 6ec36d3a0681..fb64f018b7fd 100644 --- a/requirements/edx/github.in +++ b/requirements/edx/github.in @@ -90,3 +90,5 @@ # django42 support PR merged but new release is pending. # https://github.com/openedx/edx-platform/issues/33431 -e git+https://github.com/anupdhabarde/edx-proctoring-proctortrack.git@31c6c9923a51c903ae83760ecbbac191363aa2a2#egg=edx_proctoring_proctortrack + +git+https://github.com/edly-io/forum.git@feat/migrate_from_http_to_python_call#egg=forum diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 231fe7618867..8d3a2baf68d8 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -310,6 +310,7 @@ django==4.2.15 # enmerkar # enmerkar-underscore # event-tracking + # forum # help-tokens # jsonfield # lti-consumer-xblock @@ -481,6 +482,7 @@ djangorestframework==3.14.0 # edx-organizations # edx-proctoring # edx-submissions + # forum # openedx-learning # ora2 # super-csv @@ -659,6 +661,7 @@ elasticsearch==7.13.4 # -c requirements/edx/../common_constraints.txt # -r requirements/edx/base.txt # edx-search + # forum enmerkar==0.7.1 # via # -r requirements/edx/base.txt @@ -694,6 +697,8 @@ firebase-admin==6.5.0 # via # -r requirements/edx/base.txt # edx-ace +forum @ git+https://github.com/edly-io/forum.git@feat/migrate_from_http_to_python_call + # via -r requirements/edx/base.txt freezegun==1.5.1 # via -r requirements/edx/testing.in frozenlist==1.4.1 @@ -1011,7 +1016,9 @@ openai==0.28.1 # -r requirements/edx/base.txt # edx-enterprise openedx-atlas==0.6.1 - # via -r requirements/edx/base.txt + # via + # -r requirements/edx/base.txt + # forum openedx-calc==3.1.0 # via -r requirements/edx/base.txt openedx-django-pyfs==3.6.0 @@ -1235,6 +1242,7 @@ pymongo==4.4.0 # -r requirements/edx/base.txt # edx-opaque-keys # event-tracking + # forum # mongoengine # openedx-mongodbproxy pynacl==1.5.0 @@ -1388,6 +1396,7 @@ requests==2.32.3 # edx-drf-extensions # edx-enterprise # edx-rest-api-client + # forum # geoip2 # google-api-core # google-cloud-storage