LMS Endpoints Rendered By Django

In an attempt to deprecate as many LMS frontends as we can, I ran a script to find all the URLs/endpoints in LMS and find the remaining MFEs that need to be created to handle them all.

I have done an initial pass of removing as many API endpoints (aka, does not have frontends) and admin endpoints (auto-generated by Django) as possible.

This was run on my local devstack, so the configurations do not match up with what is running on edx.org in production with the MFEs set up.

 

/ lms.djangoapps.branding.views.index root /403 lms.djangoapps.static_template_view.views.render_403 /404 lms.djangoapps.static_template_view.views.render 404 /404 lms.djangoapps.static_template_view.views.render_404 /404 lms.djangoapps.static_template_view.views.render_404 static_template_view.views.render_404 /429 lms.djangoapps.static_template_view.views.render_429 /500 lms.djangoapps.static_template_view.views.render_500 /500 lms.djangoapps.static_template_view.views.render_500 static_template_view.views.render_500 /about lms.djangoapps.static_template_view.views.render about /account/settings openedx.core.djangoapps.user_api.accounts.settings_views.account_settings account_settings /accounts/manage_user_standing common.djangoapps.student.views.management.manage_user_standing manage_user_standing /blog lms.djangoapps.static_template_view.views.render blog /blog lms.djangoapps.static_template_view.views.render blog /calculate common.djangoapps.util.views.calculate /catalog/management/cache_programs/ openedx.core.djangoapps.catalog.views.cache_programs catalog:cache_programs /certificates/<certificate_uuid> lms.djangoapps.certificates.views.webview.render_cert_by_uuid certificates:render_cert_by_uuid /certificates/course/<course_id> lms.djangoapps.certificates.views.webview.render_preview_certificate certificates:preview_cert /certificates/user/<user_id>/course/<course_id> lms.djangoapps.certificates.views.webview.unsupported_url certificates:unsupported_url /config/catalog config_models.views._create_atomic_wrapper /config/forums config_models.views._create_atomic_wrapper /config/programs config_models.views._create_atomic_wrapper /consent/api/v1/data_sharing_consent consent.api.v1.views.DataSharingConsentView data_sharing_consent /contact lms.djangoapps.static_template_view.views.render contact /copyright lms.djangoapps.static_template_view.views.render copyright /cornerstone/course-list integrated_channels.cornerstone.views.CornerstoneCoursesListView cornerstone-course-list /course_modes/choose/<course_id>/ common.djangoapps.course_modes.views.ChooseModeView course_modes_choose /course_run/<course_id>/refund_status common.djangoapps.student.views.management.course_run_refund_status course_run_refund_status /courses/ lms.djangoapps.branding.views.courses courses /courses/<course_id>/ lms.djangoapps.courseware.views.views.course_about course_root /courses/<course_id>/<tab_slug>/ lms.djangoapps.courseware.views.views.StaticCourseTabView static_tab /courses/<course_id>/about lms.djangoapps.courseware.views.views.course_about about_course /courses/<course_id>/book/<book_index>/ lms.djangoapps.staticbook.views.index book /courses/<course_id>/book/<book_index>/<page> lms.djangoapps.staticbook.views.index book /courses/<course_id>/bookmarks/ openedx.features.course_bookmarks.views.course_bookmarks.CourseBookmarksView openedx.course_bookmarks.home /courses/<course_id>/bookmarks/bookmarks_fragment openedx.features.course_bookmarks.views.course_bookmarks.CourseBookmarksFragmentView openedx.course_bookmarks.course_bookmarks_fragment_view /courses/<course_id>/calendar_sync openedx.features.calendar_sync.views.calendar_sync.CalendarSyncView openedx.calendar_sync /courses/<course_id>/course/ openedx.features.course_experience.views.course_home.outline_tab /courses/<course_id>/course/updates openedx.features.course_experience.views.course_updates.CourseUpdatesView openedx.course_experience.course_updates /courses/<course_id>/course_wiki/ lms.djangoapps.course_wiki.views.course_wiki_redirect course_wiki /courses/<course_id>/courseware/ lms.djangoapps.courseware.views.index.CoursewareIndex courseware /courses/<course_id>/courseware/<chapter>/ lms.djangoapps.courseware.views.index.CoursewareIndex courseware_chapter /courses/<course_id>/courseware/<chapter>/<section>/ lms.djangoapps.courseware.views.index.CoursewareIndex courseware_section /courses/<course_id>/courseware/<chapter>/<section>/<position>/ lms.djangoapps.courseware.views.index.CoursewareIndex courseware_position /courses/<course_id>/dates lms.djangoapps.courseware.views.views.dates dates /courses/<course_id>/discussion/<commentable_id>/follow lms.djangoapps.discussion.django_comment_client.base.views.follow_commentable follow_commentable /courses/<course_id>/discussion/<commentable_id>/threads/create lms.djangoapps.discussion.django_comment_client.base.views.create_thread create_thread /courses/<course_id>/discussion/<commentable_id>/unfollow lms.djangoapps.discussion.django_comment_client.base.views.unfollow_commentable unfollow_commentable /courses/<course_id>/discussion/comments/<comment_id>/delete lms.djangoapps.discussion.django_comment_client.base.views.delete_comment delete_comment /courses/<course_id>/discussion/comments/<comment_id>/downvote lms.djangoapps.discussion.django_comment_client.base.views.vote_for_comment downvote_comment /courses/<course_id>/discussion/comments/<comment_id>/endorse lms.djangoapps.discussion.django_comment_client.base.views.endorse_comment endorse_comment /courses/<course_id>/discussion/comments/<comment_id>/flagAbuse lms.djangoapps.discussion.django_comment_client.base.views.flag_abuse_for_comment flag_abuse_for_comment /courses/<course_id>/discussion/comments/<comment_id>/reply lms.djangoapps.discussion.django_comment_client.base.views.create_sub_comment create_sub_comment /courses/<course_id>/discussion/comments/<comment_id>/unFlagAbuse lms.djangoapps.discussion.django_comment_client.base.views.un_flag_abuse_for_comment un_flag_abuse_for_comment /courses/<course_id>/discussion/comments/<comment_id>/unvote lms.djangoapps.discussion.django_comment_client.base.views.undo_vote_for_comment undo_vote_for_comment /courses/<course_id>/discussion/comments/<comment_id>/update lms.djangoapps.discussion.django_comment_client.base.views.update_comment update_comment /courses/<course_id>/discussion/comments/<comment_id>/upvote lms.djangoapps.discussion.django_comment_client.base.views.vote_for_comment upvote_comment /courses/<course_id>/discussion/forum/ lms.djangoapps.discussion.views.forum_form_discussion forum_form_discussion /courses/<course_id>/discussion/forum/<discussion_id>/inline lms.djangoapps.discussion.views.inline_discussion inline_discussion /courses/<course_id>/discussion/forum/<discussion_id>/threads/<thread_id> lms.djangoapps.discussion.views.single_thread single_thread /courses/<course_id>/discussion/forum/discussion_board_fragment_view lms.djangoapps.discussion.views.DiscussionBoardFragmentView discussion_board_fragment_view /courses/<course_id>/discussion/forum/users/<user_id> lms.djangoapps.discussion.views.user_profile user_profile /courses/<course_id>/discussion/forum/users/<user_id>/followed lms.djangoapps.discussion.views.followed_threads followed_threads /courses/<course_id>/discussion/threads/<thread_id>/close lms.djangoapps.discussion.django_comment_client.base.views.openclose_thread openclose_thread /courses/<course_id>/discussion/threads/<thread_id>/delete lms.djangoapps.discussion.django_comment_client.base.views.delete_thread delete_thread /courses/<course_id>/discussion/threads/<thread_id>/downvote lms.djangoapps.discussion.django_comment_client.base.views.vote_for_thread downvote_thread /courses/<course_id>/discussion/threads/<thread_id>/flagAbuse lms.djangoapps.discussion.django_comment_client.base.views.flag_abuse_for_thread flag_abuse_for_thread /courses/<course_id>/discussion/threads/<thread_id>/follow lms.djangoapps.discussion.django_comment_client.base.views.follow_thread follow_thread /courses/<course_id>/discussion/threads/<thread_id>/pin lms.djangoapps.discussion.django_comment_client.base.views.pin_thread pin_thread /courses/<course_id>/discussion/threads/<thread_id>/reply lms.djangoapps.discussion.django_comment_client.base.views.create_comment create_comment /courses/<course_id>/discussion/threads/<thread_id>/unFlagAbuse lms.djangoapps.discussion.django_comment_client.base.views.un_flag_abuse_for_thread un_flag_abuse_for_thread /courses/<course_id>/discussion/threads/<thread_id>/unfollow lms.djangoapps.discussion.django_comment_client.base.views.unfollow_thread unfollow_thread /courses/<course_id>/discussion/threads/<thread_id>/unpin lms.djangoapps.discussion.django_comment_client.base.views.un_pin_thread un_pin_thread /courses/<course_id>/discussion/threads/<thread_id>/unvote lms.djangoapps.discussion.django_comment_client.base.views.undo_vote_for_thread undo_vote_for_thread /courses/<course_id>/discussion/threads/<thread_id>/update lms.djangoapps.discussion.django_comment_client.base.views.update_thread update_thread /courses/<course_id>/discussion/threads/<thread_id>/upvote lms.djangoapps.discussion.django_comment_client.base.views.vote_for_thread upvote_thread /courses/<course_id>/discussion/upload lms.djangoapps.discussion.django_comment_client.base.views.upload upload /courses/<course_id>/discussion/users lms.djangoapps.discussion.django_comment_client.base.views.users users /courses/<course_id>/edxnotes/ lms.djangoapps.edxnotes.views.edxnotes edxnotes /courses/<course_id>/edxnotes/notes/ lms.djangoapps.edxnotes.views.notes notes /courses/<course_id>/edxnotes/token/ lms.djangoapps.edxnotes.views.get_token get_token /courses/<course_id>/edxnotes/visibility/ lms.djangoapps.edxnotes.views.edxnotes_visibility edxnotes_visibility /courses/<course_id>/enroll_staff lms.djangoapps.courseware.views.views.EnrollStaffView enroll_staff /courses/<course_id>/generate_user_cert lms.djangoapps.courseware.views.views.generate_user_cert generate_user_cert /courses/<course_id>/htmlbook/<book_index>/ lms.djangoapps.staticbook.views.html_index html_book /courses/<course_id>/htmlbook/<book_index>/chapter/<chapter>/ lms.djangoapps.staticbook.views.html_index html_book /courses/<course_id>/instructor lms.djangoapps.instructor.views.instructor_dashboard.instructor_dashboard_2 instructor_dashboard /courses/<course_id>/jump_to/<location> lms.djangoapps.courseware.views.views.jump_to jump_to /courses/<course_id>/jump_to_id/<module_id> lms.djangoapps.courseware.views.views.jump_to_id jump_to_id /courses/<course_id>/lti_rest_endpoints/ lms.djangoapps.courseware.views.views.get_course_lti_endpoints lti_rest_endpoints /courses/<course_id>/lti_tab/<provider_uuid>/ lms.djangoapps.courseware.views.views.CourseTabView lti_course_tab /courses/<course_id>/pdfbook/<book_index>/ lms.djangoapps.staticbook.views.pdf_index pdf_book /courses/<course_id>/pdfbook/<book_index>/<page> lms.djangoapps.staticbook.views.pdf_index pdf_book /courses/<course_id>/pdfbook/<book_index>/chapter/<chapter>/ lms.djangoapps.staticbook.views.pdf_index pdf_book /courses/<course_id>/pdfbook/<book_index>/chapter/<chapter>/<page> lms.djangoapps.staticbook.views.pdf_index pdf_book /courses/<course_id>/progress lms.djangoapps.courseware.views.views.progress progress /courses/<course_id>/progress/<student_id>/ lms.djangoapps.courseware.views.views.progress student_progress /courses/<course_id>/set_course_mode_price lms.djangoapps.instructor.views.instructor_dashboard.set_course_mode_price set_course_mode_price /courses/<course_id>/submission_history/<learner_identifier>/<location> lms.djangoapps.courseware.views.views.submission_history submission_history /courses/<course_id>/survey lms.djangoapps.courseware.views.views.course_survey course_survey /courses/<course_id>/syllabus lms.djangoapps.courseware.views.views.syllabus syllabus /courses/<course_id>/tab/<tab_type>/ lms.djangoapps.courseware.views.views.CourseTabView course_tab_view /courses/<course_id>/teams/ lms.djangoapps.teams.views.TeamsDashboardView teams_dashboard /courses/<course_id>/xblock/<usage_id>/handler/<handler><var> lms.djangoapps.courseware.block_render.handle_xblock_callback xblock_handler /courses/<course_id>/xblock/<usage_id>/handler_noauth/<handler><var> lms.djangoapps.courseware.block_render.handle_xblock_callback_noauth xblock_handler_noauth /courses/<course_id>/xblock/<usage_id>/view/<view_name> lms.djangoapps.courseware.block_render.xblock_view xblock_view /courses/<course_id>/xqueue/<userid>/<mod_id>/<dispatch> lms.djangoapps.courseware.block_render.xqueue_callback xqueue_callback /courses/<course_key_string>/cohorts/<cohort_id> openedx.core.djangoapps.course_groups.views.cohort_handler cohorts /courses/<course_key_string>/cohorts/<cohort_id> openedx.core.djangoapps.course_groups.views.users_in_cohort list_cohort /courses/<course_key_string>/cohorts/<cohort_id>/add openedx.core.djangoapps.course_groups.views.add_users_to_cohort add_to_cohort /courses/<course_key_string>/cohorts/<cohort_id>/delete openedx.core.djangoapps.course_groups.views.remove_user_from_cohort remove_from_cohort /courses/<course_key_string>/cohorts/debug openedx.core.djangoapps.course_groups.views.debug_cohort_mgmt debug_cohort_mgmt /courses/<course_key_string>/cohorts/settings openedx.core.djangoapps.course_groups.views.course_cohort_settings_handler course_cohort_settings /courses/<course_key_string>/discussion/topics lms.djangoapps.discussion.views.discussion_topics discussion_topics /courses/<course_key_string>/discussions/settings lms.djangoapps.discussion.views.course_discussions_settings_handler course_discussions_settings /courses/<course_key_string>/masquerade lms.djangoapps.courseware.masquerade.MasqueradeView masquerade_update /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/ wiki.views.article.ArticleView course_wiki_do_not_reverse:root /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<article_id>/plugin/<slug>/ wiki.views.article.Plugin course_wiki_do_not_reverse:plugin /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<article_id>/plugin/links/json/query-urlpath/ wiki.plugins.links.views.QueryUrlPath course_wiki_do_not_reverse:links_query_urlpath /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<int:article_id>/ wiki.views.article.ArticleView course_wiki_do_not_reverse:get /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<int:article_id>/delete/ wiki.views.article.Delete course_wiki_do_not_reverse:delete /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<int:article_id>/deleted/ wiki.views.article.Deleted course_wiki_do_not_reverse:deleted /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<int:article_id>/edit/ wiki.views.article.Edit course_wiki_do_not_reverse:edit /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<int:article_id>/history/ wiki.views.article.History course_wiki_do_not_reverse:history /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<int:article_id>/preview/ wiki.views.article.Preview course_wiki_do_not_reverse:preview /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<int:article_id>/revision/change/<int:revision_id>/ wiki.decorators.wrapper course_wiki_do_not_reverse:change_revision /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<int:article_id>/revision/merge/<int:revision_id>/ wiki.decorators.wrapper course_wiki_do_not_reverse:merge_revision /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<int:article_id>/settings/ wiki.views.article.Settings course_wiki_do_not_reverse:settings /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<int:article_id>/source/ wiki.views.article.Source course_wiki_do_not_reverse:source /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<path> wiki.views.article.ArticleView course_wiki_do_not_reverse:get /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<path>_create/ wiki.views.article.Create course_wiki_do_not_reverse:create /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<path>_delete/ wiki.views.article.Delete course_wiki_do_not_reverse:delete /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<path>_deleted/ wiki.views.article.Deleted course_wiki_do_not_reverse:deleted /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<path>_dir/ wiki.views.article.Dir course_wiki_do_not_reverse:dir /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<path>_edit/ wiki.views.article.Edit course_wiki_do_not_reverse:edit /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<path>_history/ wiki.views.article.History course_wiki_do_not_reverse:history /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<path>_plugin/<slug>/ wiki.views.article.Plugin course_wiki_do_not_reverse:plugin /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<path>_plugin/links/json/query-urlpath/ wiki.plugins.links.views.QueryUrlPath course_wiki_do_not_reverse:links_query_urlpath /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<path>_preview/ wiki.views.article.Preview course_wiki_do_not_reverse:preview /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<path>_revision/change/<revision_id>/ wiki.decorators.wrapper course_wiki_do_not_reverse:change_revision /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<path>_revision/merge/<revision_id>/ wiki.decorators.wrapper course_wiki_do_not_reverse:merge_revision /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<path>_settings/ wiki.views.article.Settings course_wiki_do_not_reverse:settings /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/<path>_source/ wiki.views.article.Source course_wiki_do_not_reverse:source /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/_revision/change/<int:article_id>/<int:revision_id>/ wiki.decorators.wrapper course_wiki_do_not_reverse:change_revision /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/_revision/diff/<int:revision_id>/ wiki.decorators.wrap course_wiki_do_not_reverse:diff /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/_revision/merge/<int:article_id>/<int:revision_id>/preview/ wiki.decorators.wrapper course_wiki_do_not_reverse:merge_revision_preview /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/_revision/preview/<int:article_id>/ wiki.views.article.Preview course_wiki_do_not_reverse:preview_revision /courses/<var>courses/(:[/+]+(/|\+)[/+]+<var>[/]+)/wiki/create-root/ wiki.views.article.CreateRootView course_wiki_do_not_reverse:root_create /courses/yt_video_metadata lms.djangoapps.courseware.views.views.yt_video_metadata yt_video_metadata /create_account openedx.core.djangoapps.user_authn.views.register.RegistrationView create_account /dashboard/ common.djangoapps.student.views.dashboard.student_dashboard dashboard /dashboard/programs/ lms.djangoapps.learner_dashboard.program_views.program_listing program_listing_view /dashboard/programs/<program_uuid>/ lms.djangoapps.learner_dashboard.program_views.program_details program_details_view /dashboard/programs/<program_uuid>/details_fragment/ lms.djangoapps.learner_dashboard.programs.ProgramDetailsFragmentView program_details_fragment_view /dashboard/programs/<program_uuid>/discussion/ lms.djangoapps.learner_dashboard.program_views.ProgramDiscussionIframeView program_discussion /dashboard/programs/<program_uuid>/live/ lms.djangoapps.learner_dashboard.program_views.ProgramLiveIframeView program_live /dashboard/programs_fragment/ lms.djangoapps.learner_dashboard.programs.ProgramsFragmentView program_listing_fragment_view /donate lms.djangoapps.static_template_view.views.render donate /donate lms.djangoapps.static_template_view.views.render donate /email_confirm/<key> common.djangoapps.student.views.management.confirm_email_change confirm_email_change /enterprise/<enterprise_uuid>/course/<course_id>/enroll/ enterprise.views.RouterView enterprise_course_run_enrollment_page /enterprise/<enterprise_uuid>/course/<course_key>/enroll/ enterprise.views.RouterView enterprise_course_enrollment_page /enterprise/<enterprise_uuid>/program/<program_uuid>/enroll/ enterprise.views.RouterView enterprise_program_enrollment_page /enterprise/grant_data_sharing_permissions enterprise.views.GrantDataSharingPermissions grant_data_sharing_permissions /enterprise/handle_consent_enrollment/<enterprise_uuid>/course/<course_id>/ enterprise.views.RouterView enterprise_handle_consent_enrollment /enterprise/login enterprise.views.EnterpriseLoginView enterprise_slug_login /enterprise/proxy-login enterprise.views.EnterpriseProxyLoginView enterprise_proxy_login /enterprise/select/active enterprise.views.EnterpriseSelectionView enterprise_select_active /enterprise_learner_portal/api/v1/enterprise_course_enrollments/ enterprise_learner_portal.api.v1.views.EnterpriseCourseEnrollmentView enterprise-learner-portal-course-enrollment-list /event common.djangoapps.track.views.user_track /faq lms.djangoapps.static_template_view.views.render faq /faq lms.djangoapps.static_template_view.views.render help /favicon\.ico django.views.generic.base.RedirectView /heartbeat openedx.core.djangoapps.heartbeat.views.heartbeat heartbeat /help lms.djangoapps.static_template_view.views.render help_edx /help_token/<token> help_tokens.views.help_token_redirect /honor lms.djangoapps.static_template_view.views.render honor /instructor_task_status/ lms.djangoapps.instructor_task.views.instructor_task_status instructor_task_status /jobs lms.djangoapps.static_template_view.views.render jobs /lang_pref/session_language openedx.core.djangoapps.lang_pref.views.update_session_language session_language /login openedx.core.djangoapps.user_authn.views.login_form.login_and_registration_form signin_user /login_ajax openedx.core.djangoapps.user_authn.views.login.login_user login_api /login_refresh openedx.core.djangoapps.user_authn.views.login.login_refresh login_refresh /logout openedx.core.djangoapps.user_authn.views.logout.LogoutView logout /media-kit lms.djangoapps.static_template_view.views.render media-kit /media/<path> django.views.static.serve /media/profile\-images/<path> django.views.static.serve /news lms.djangoapps.static_template_view.views.render news /openassessment/fileupload/<key>/ openassessment.fileupload.views_filesystem.filesystem_storage openassessment-filesystem-storage /openassessment/fileupload/django/<key>/ openassessment.fileupload.views_django_storage.django_storage openassessment-django-storage /password/reset/<uidb36>-<token>/ openedx.core.djangoapps.user_authn.views.password_reset.LogistrationPasswordResetView logistration_password_reset /password_assistance openedx.core.djangoapps.user_authn.views.login_form.login_and_registration_form password_assistance /password_reset/ openedx.core.djangoapps.user_authn.views.password_reset.password_reset password_reset /password_reset_complete/ django.contrib.auth.views.PasswordResetCompleteView password_reset_complete /password_reset_confirm/<uidb36>-<token>/ openedx.core.djangoapps.user_authn.views.password_reset.PasswordResetConfirmWrapper password_reset_confirm /press lms.djangoapps.static_template_view.views.render press /press lms.djangoapps.static_template_view.views.render press /press/<var> lms.djangoapps.static_template_view.views.render_press_release press_release /privacy lms.djangoapps.static_template_view.views.render privacy /programs/<program_uuid>/about lms.djangoapps.courseware.views.views.program_marketing program_marketing_view /register openedx.core.djangoapps.user_authn.views.login_form.login_and_registration_form register_user /reset_deadlines common.djangoapps.util.views.reset_course_deadlines reset_course_deadlines /rss_proxy/ lms.djangoapps.rss_proxy.views.proxy rss_proxy:proxy /search/ search.views.do_search do_search /search/<course_id> search.views.do_search do_search /search/course_discovery/ search.views.course_discovery course_discovery /sitemap.xml lms.djangoapps.static_template_view.views.render sitemap_xml /static/<path> django.views.static.serve /support/ lms.djangoapps.support.views.index.index support:index /support/certificates/ lms.djangoapps.support.views.certificate.CertificatesSupportView support:certificates /support/contact_us/ lms.djangoapps.support.views.contact_us.ContactUsView support:contact_us /support/course_entitlement/ lms.djangoapps.support.views.course_entitlements.EntitlementSupportView support:course_entitlement /support/enrollment/ lms.djangoapps.support.views.enrollments.EnrollmentSupportView support:enrollment /support/enrollment/<username_or_email> lms.djangoapps.support.views.enrollments.EnrollmentSupportListView support:enrollment_list /support/feature_based_enrollment_details/<course_id> lms.djangoapps.support.views.feature_based_enrollments.FeatureBasedEnrollmentSupportAPIView support:feature_based_enrollment_details /support/feature_based_enrollments/ lms.djangoapps.support.views.feature_based_enrollments.FeatureBasedEnrollmentsSupportView support:feature_based_enrollments /support/get_saml_providers/ lms.djangoapps.support.views.program_enrollments.SAMLProvidersWithOrg support:get_saml_providers /support/link_program_enrollments/ lms.djangoapps.support.views.program_enrollments.LinkProgramEnrollmentSupportView support:link_program_enrollments /support/link_program_enrollments_details/ lms.djangoapps.support.views.program_enrollments.LinkProgramEnrollmentSupportAPIView support:link_program_enrollments_details /support/manage_user/ lms.djangoapps.support.views.manage_user.ManageUserSupportView support:manage_user /support/manage_user/<username_or_email> lms.djangoapps.support.views.manage_user.ManageUserDetailView support:manage_user_detail /support/onboarding_status/<username_or_email> lms.djangoapps.support.views.onboarding_status.OnboardingView support:onboarding_status /support/program_enrollments_inspector/ lms.djangoapps.support.views.program_enrollments.ProgramEnrollmentsInspectorView support:program_enrollments_inspector /support/program_enrollments_inspector_details/ lms.djangoapps.support.views.program_enrollments.ProgramEnrollmentsInspectorAPIView support:program_enrollments_inspector_details /support/sso_records/<username_or_email> lms.djangoapps.support.views.sso_records.SsoView support:sso_records /survey/<survey_name>/ lms.djangoapps.survey.views.view_survey view_survey /survey/<survey_name>/answers/ lms.djangoapps.survey.views.submit_answers submit_answers /survey_report/generate_report openedx.features.survey_report.views.SurveyReportView openedx.generate_survey_report /template/<path:template> openedx.core.djangoapps.debug.views.show_reference_template /theming/asset/<path:path> openedx.core.djangoapps.theming.views.themed_asset theming:openedx.theming.asset /tos lms.djangoapps.static_template_view.views.render tos /tos_and_honor lms.djangoapps.static_template_view.views.render edx-terms-service /u/<username> openedx.features.learner_profile.views.learner_profile.learner_profile learner_profile /u/achievements openedx.features.learner_profile.views.learner_achievements.LearnerAchievementsFragmentView openedx.learner_profile.learner_achievements_fragment_view /update_lang/ openedx.core.djangoapps.dark_lang.views.PreviewLanguageFragmentView dark_lang:preview_lang /verify_student/begin-flow/<course_id>/ lms.djangoapps.verify_student.views.PayAndVerifyView verify_student_begin_flow /verify_student/create_order lms.djangoapps.verify_student.views.create_order verify_student_create_order /verify_student/decrypt-idv-images/face/<receipt_id> lms.djangoapps.verify_student.views.DecryptFaceImageView verification_decrypt_face_image /verify_student/decrypt-idv-images/photo-id/<receipt_id> lms.djangoapps.verify_student.views.DecryptPhotoIDImageView verification_decrypt_photo_id_image /verify_student/photo-urls/<receipt_id> lms.djangoapps.verify_student.views.PhotoUrlsView verification_photo_urls /verify_student/results_callback lms.djangoapps.verify_student.views.results_callback verify_student_results_callback /verify_student/reverify lms.djangoapps.verify_student.views.ReverifyView verify_student_reverify /verify_student/software-secure-fake-response lms.djangoapps.verify_student.tests.fake_software_secure.SoftwareSecureFakeView /verify_student/start-flow/<course_id>/ lms.djangoapps.verify_student.views.PayAndVerifyView verify_student_start_flow /verify_student/status/ lms.djangoapps.verify_student.views.VerificationStatusAPIView verification_status_api /verify_student/submit-photos/ lms.djangoapps.verify_student.views.SubmitPhotosView verify_student_submit_photos /verify_student/upgrade/<course_id>/ lms.djangoapps.verify_student.views.PayAndVerifyView verify_student_upgrade_and_verify /verify_student/verify-now/<course_id>/ lms.djangoapps.verify_student.views.PayAndVerifyView verify_student_verify_now /videos/<usage_key_string> lms.djangoapps.courseware.views.views.PublicVideoXBlockView render_public_video_xblock /videos/<usage_key_string>/embed lms.djangoapps.courseware.views.views.PublicVideoXBlockEmbedView render_public_video_xblock_embed /what_is_verified_cert lms.djangoapps.static_template_view.views.render verified-certificate /wiki/ wiki.views.article.ArticleView wiki:root /wiki/<article_id>/plugin/<slug>/ wiki.views.article.Plugin wiki:plugin /wiki/<article_id>/plugin/links/json/query-urlpath/ wiki.plugins.links.views.QueryUrlPath wiki:links_query_urlpath /wiki/<int:article_id>/ wiki.views.article.ArticleView wiki:get /wiki/<int:article_id>/delete/ wiki.views.article.Delete wiki:delete /wiki/<int:article_id>/deleted/ wiki.views.article.Deleted wiki:deleted /wiki/<int:article_id>/edit/ wiki.views.article.Edit wiki:edit /wiki/<int:article_id>/history/ wiki.views.article.History wiki:history /wiki/<int:article_id>/preview/ wiki.views.article.Preview wiki:preview /wiki/<int:article_id>/revision/change/<int:revision_id>/ wiki.decorators.wrapper wiki:change_revision /wiki/<int:article_id>/revision/merge/<int:revision_id>/ wiki.decorators.wrapper wiki:merge_revision /wiki/<int:article_id>/settings/ wiki.views.article.Settings wiki:settings /wiki/<int:article_id>/source/ wiki.views.article.Source wiki:source /wiki/<path> wiki.views.article.ArticleView wiki:get /wiki/<path>_create/ wiki.views.article.Create wiki:create /wiki/<path>_delete/ wiki.views.article.Delete wiki:delete /wiki/<path>_deleted/ wiki.views.article.Deleted wiki:deleted /wiki/<path>_dir/ wiki.views.article.Dir wiki:dir /wiki/<path>_edit/ wiki.views.article.Edit wiki:edit /wiki/<path>_history/ wiki.views.article.History wiki:history /wiki/<path>_plugin/<slug>/ wiki.views.article.Plugin wiki:plugin /wiki/<path>_plugin/links/json/query-urlpath/ wiki.plugins.links.views.QueryUrlPath wiki:links_query_urlpath /wiki/<path>_preview/ wiki.views.article.Preview wiki:preview /wiki/<path>_revision/change/<revision_id>/ wiki.decorators.wrapper wiki:change_revision /wiki/<path>_revision/merge/<revision_id>/ wiki.decorators.wrapper wiki:merge_revision /wiki/<path>_settings/ wiki.views.article.Settings wiki:settings /wiki/<path>_source/ wiki.views.article.Source wiki:source /wiki/_revision/change/<int:article_id>/<int:revision_id>/ wiki.decorators.wrapper wiki:change_revision /wiki/_revision/diff/<int:revision_id>/ wiki.decorators.wrap wiki:diff /wiki/_revision/merge/<int:article_id>/<int:revision_id>/preview/ wiki.decorators.wrapper wiki:merge_revision_preview /wiki/_revision/preview/<int:article_id>/ wiki.views.article.Preview wiki:preview_revision /wiki/create-root/ lms.djangoapps.course_wiki.views.root_create root_create /wiki/create-root/ wiki.views.article.CreateRootView wiki:root_create /xblock/<usage_key_string> lms.djangoapps.courseware.views.views.render_xblock render_xblock /xblock/resource/<block_type>/<uri> openedx.core.djangoapps.common_views.xblock.xblock_resource xblock_resource_url /xdomain_proxy.html openedx.core.djangoapps.cors_csrf.views.xdomain_proxy xdomain_proxy /zendesk_proxy/v0 openedx.core.djangoapps.zendesk_proxy.v0.views.ZendeskPassthroughView zendesk_proxy_v0 /zendesk_proxy/v1 openedx.core.djangoapps.zendesk_proxy.v1.views.ZendeskPassthroughView zendesk_proxy_v1

 

Trying not to dupe too much of https://openedx.atlassian.net/wiki/spaces/FEDX/pages/1920270629 , https://docs.google.com/document/d/1R7usm33eqj8-U3g_Kb7EHyMdP1jWe3q_0CZlg1uRuxY/edit , or https://github.com/openedx/wg-frontend/issues/156

Notables

Instructor Dashboard

  • this is a single page app that’s also kind of a mess that will probably want and need refactoring.

Wiki/Survey

  • We want to deprecate these, but nothing has been kicked off here yet.

Support/Contact Us

  • This is hidden in the support section, which is mostly covered by , but this is hugely important page for 2U/edx.org and is how learners contact support. Not sure about how other operators handle this.

Student Dashboard

  • This rewrite is always just 6 months away.

    • This is live on edx.org.

Enterprise Course/Program Enrollment

  • Definitely owned by 2U

  • Maybe this exists already in some of the present MFEs.

Programs Dashboard

  • Have an MFE repo but no code in it

Endpoints without MFE replacements

Static Pages

  • These are mostly not used on edx.org, but they do exist in LMS:

    • about

    • faq

    • privacy

    • tos

    • press

Course Browse/Discovery

  • Not to be confused with the microservice course-discovery.

  • This is the home page people see when running devstack/visiting LMS without their own custom discovery experience.

  • 2U/edx.org uses their own MFE to replace this. Probably can’t be replaced until there’s a publicly available version

EdxNotes

  • I’m not sure how this is being handled along with the learning MFE, but we’re still seeing traffic on edx.org to these endpoints.

Open Questions

Certificates

  • This is mostly in its own microservice. Why are we rendering anything here? Maybe this is part of the effort to remove all frontend code from the credentials microservice.

    • The frontend code in the credentials microservice is being replaced by:

Theming

  • I know we’re mostly trying to move off this, but there is an endpoint here.

Cohorts

  • Do we handle these in the learning MFE? I suspect not. Might be part of the Instructor Dashboard rewrite work.

Update Lang

  • This was used for testing out language/i18n switching functionality. Should we replace this?

 

Process/Next Steps Suggestions

  • Working agreements - who’s responsible for what

  • Synchronous & asynchronous ceremonies

  • Existing venues - DEPR working group, Product WG, Frontend WG, FedX

  • Bottleneck is on the PR reviews - how do we fix this?

  • New MFEs should be in the maintainership pilot - @Feanil Patel

  • Venue for discussions?

  • When is next conversation on this topic?

  • Nominate DEPR WG meetings - next session Thursday, 4/6

  • Do we wait for modular MFE work?

    • Maybe only for writing new MFEs

  • Things that are almost removed – eg: 5% of features haven’t been ported, or they old version is only running in one environment – can be pushed over the line. <Insert link here>

  • Code analysis for dead/unused code. Things that have already moved to MFEs but have tendrils in edx-platform, like we did in the past with shoppingcart.

    • Sonarqube?

  • Identify “quick wins” that don’t require new MFEs, assign implementers

  • After the maintenance board is finalized and moved to openedx org, let’s move sub-tasks onto it for prioritization, assignment, and tracking

  • Who should write docs?

  • Who else should be involved?

  • How do we go through the list of endpoints above and map them to removal status/project?