Merge pull request #29573 from edx/jawayria/fix-url-cms

fix: replace 'django.conf.url()' with 'django.urls.re_path()'
This commit is contained in:
Jawayria
2021-12-15 13:55:13 +05:00
committed by GitHub
5 changed files with 174 additions and 178 deletions

View File

@@ -3,10 +3,11 @@ URLs for the Studio API app
""" """
from django.conf.urls import include, url from django.conf.urls import include
from django.urls import path
app_name = 'cms.djangoapps.api' app_name = 'cms.djangoapps.api'
urlpatterns = [ urlpatterns = [
url(r'^v1/', include('cms.djangoapps.api.v1.urls', namespace='v1')), path('v1/', include('cms.djangoapps.api.v1.urls', namespace='v1')),
] ]

View File

@@ -2,17 +2,17 @@
from django.conf import settings from django.conf import settings
from django.conf.urls import url
from cms.djangoapps.contentstore.api.views import course_import, course_quality, course_validation from cms.djangoapps.contentstore.api.views import course_import, course_quality, course_validation
from django.urls import re_path
app_name = 'contentstore' app_name = 'contentstore'
urlpatterns = [ urlpatterns = [
url(fr'^v0/import/{settings.COURSE_ID_PATTERN}/$', re_path(fr'^v0/import/{settings.COURSE_ID_PATTERN}/$',
course_import.CourseImportView.as_view(), name='course_import'), course_import.CourseImportView.as_view(), name='course_import'),
url(fr'^v1/validation/{settings.COURSE_ID_PATTERN}/$', re_path(fr'^v1/validation/{settings.COURSE_ID_PATTERN}/$',
course_validation.CourseValidationView.as_view(), name='course_validation'), course_validation.CourseValidationView.as_view(), name='course_validation'),
url(fr'^v1/quality/{settings.COURSE_ID_PATTERN}/$', re_path(fr'^v1/quality/{settings.COURSE_ID_PATTERN}/$',
course_quality.CourseQualityView.as_view(), name='course_quality'), course_quality.CourseQualityView.as_view(), name='course_quality'),
] ]

View File

@@ -2,9 +2,6 @@
URLs for the maintenance app. URLs for the maintenance app.
""" """
from django.conf.urls import url
from .views import ( from .views import (
AnnouncementCreateView, AnnouncementCreateView,
AnnouncementDeleteView, AnnouncementDeleteView,
@@ -13,14 +10,15 @@ from .views import (
ForcePublishCourseView, ForcePublishCourseView,
MaintenanceIndexView MaintenanceIndexView
) )
from django.urls import path, re_path
app_name = 'cms.djangoapps.maintenance' app_name = 'cms.djangoapps.maintenance'
urlpatterns = [ urlpatterns = [
url(r'^$', MaintenanceIndexView.as_view(), name='maintenance_index'), path('', MaintenanceIndexView.as_view(), name='maintenance_index'),
url(r'^force_publish_course/?$', ForcePublishCourseView.as_view(), name='force_publish_course'), re_path(r'^force_publish_course/?$', ForcePublishCourseView.as_view(), name='force_publish_course'),
url(r'^announcements/(?P<page>\d+)?$', AnnouncementIndexView.as_view(), name='announcement_index'), re_path(r'^announcements/(?P<page>\d+)?$', AnnouncementIndexView.as_view(), name='announcement_index'),
url(r'^announcements/create$', AnnouncementCreateView.as_view(), name='announcement_create'), path('announcements/create', AnnouncementCreateView.as_view(), name='announcement_create'),
url(r'^announcements/edit/(?P<pk>\d+)?$', AnnouncementEditView.as_view(), name='announcement_edit'), re_path(r'^announcements/edit/(?P<pk>\d+)?$', AnnouncementEditView.as_view(), name='announcement_edit'),
url(r'^announcements/delete/(?P<pk>\d+)$', AnnouncementDeleteView.as_view(), name='announcement_delete'), path('announcements/delete/<int:pk>', AnnouncementDeleteView.as_view(), name='announcement_delete'),
] ]

View File

@@ -3,9 +3,10 @@ Urls of Studio.
""" """
from django.conf import settings from django.conf import settings
from django.conf.urls import include, url from django.conf.urls import include
from django.conf.urls.static import static from django.conf.urls.static import static
from django.contrib.admin import autodiscover as django_autodiscover from django.contrib.admin import autodiscover as django_autodiscover
from django.urls import path, re_path
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from auth_backends.urls import oauth2_urlpatterns from auth_backends.urls import oauth2_urlpatterns
from edx_api_doc_tools import make_docs_urls from edx_api_doc_tools import make_docs_urls
@@ -47,155 +48,153 @@ LIBRARY_KEY_PATTERN = r'(?P<library_key_string>library-v1:[^/+]+\+[^/+]+)'
# oauth2_urlpatterns needs to be first to override any other login and # oauth2_urlpatterns needs to be first to override any other login and
# logout related views. # logout related views.
urlpatterns = oauth2_urlpatterns + [ urlpatterns = oauth2_urlpatterns + [
url(r'', include('openedx.core.djangoapps.user_authn.urls_common')), path('', include('openedx.core.djangoapps.user_authn.urls_common')),
url(r'', include('common.djangoapps.student.urls')), path('', include('common.djangoapps.student.urls')),
url(r'^transcripts/upload$', contentstore_views.upload_transcripts, name='upload_transcripts'), path('transcripts/upload', contentstore_views.upload_transcripts, name='upload_transcripts'),
url(r'^transcripts/download$', contentstore_views.download_transcripts, name='download_transcripts'), path('transcripts/download', contentstore_views.download_transcripts, name='download_transcripts'),
url(r'^transcripts/check$', contentstore_views.check_transcripts, name='check_transcripts'), path('transcripts/check', contentstore_views.check_transcripts, name='check_transcripts'),
url(r'^transcripts/choose$', contentstore_views.choose_transcripts, name='choose_transcripts'), path('transcripts/choose', contentstore_views.choose_transcripts, name='choose_transcripts'),
url(r'^transcripts/replace$', contentstore_views.replace_transcripts, name='replace_transcripts'), path('transcripts/replace', contentstore_views.replace_transcripts, name='replace_transcripts'),
url(r'^transcripts/rename$', contentstore_views.rename_transcripts, name='rename_transcripts'), path('transcripts/rename', contentstore_views.rename_transcripts, name='rename_transcripts'),
url(r'^preview/xblock/(?P<usage_key_string>.*?)/handler/(?P<handler>[^/]*)(?:/(?P<suffix>.*))?$', re_path(r'^preview/xblock/(?P<usage_key_string>.*?)/handler/(?P<handler>[^/]*)(?:/(?P<suffix>.*))?$',
contentstore_views.preview_handler, name='preview_handler'), contentstore_views.preview_handler, name='preview_handler'),
url(r'^xblock/(?P<usage_key_string>.*?)/handler/(?P<handler>[^/]*)(?:/(?P<suffix>.*))?$', re_path(r'^xblock/(?P<usage_key_string>.*?)/handler/(?P<handler>[^/]*)(?:/(?P<suffix>.*))?$',
contentstore_views.component_handler, name='component_handler'), contentstore_views.component_handler, name='component_handler'),
url(r'^xblock/resource/(?P<block_type>[^/]*)/(?P<uri>.*)$', re_path(r'^xblock/resource/(?P<block_type>[^/]*)/(?P<uri>.*)$',
openedx.core.djangoapps.common_views.xblock.xblock_resource, name='xblock_resource_url'), openedx.core.djangoapps.common_views.xblock.xblock_resource, name='xblock_resource_url'),
url(r'', include('openedx.core.djangoapps.xblock.rest_api.urls', namespace='xblock_api')), path('', include('openedx.core.djangoapps.xblock.rest_api.urls', namespace='xblock_api')),
url(r'^not_found$', contentstore_views.not_found, name='not_found'), path('not_found', contentstore_views.not_found, name='not_found'),
url(r'^server_error$', contentstore_views.server_error, name='server_error'), path('server_error', contentstore_views.server_error, name='server_error'),
url(r'^organizations$', OrganizationListView.as_view(), name='organizations'), path('organizations', OrganizationListView.as_view(), name='organizations'),
# noop to squelch ajax errors # noop to squelch ajax errors
url(r'^event$', contentstore_views.event, name='event'), path('event', contentstore_views.event, name='event'),
url(r'^heartbeat', include('openedx.core.djangoapps.heartbeat.urls')), path('heartbeat', include('openedx.core.djangoapps.heartbeat.urls')),
url(r'^i18n/', include('django.conf.urls.i18n')), path('i18n/', include('django.conf.urls.i18n')),
# User API endpoints # User API endpoints
url(r'^api/user/', include('openedx.core.djangoapps.user_api.urls')), path('api/user/', include('openedx.core.djangoapps.user_api.urls')),
# Update session view # Update session view
url(r'^lang_pref/session_language', path('lang_pref/session_language', openedx.core.djangoapps.lang_pref.views.update_session_language,
openedx.core.djangoapps.lang_pref.views.update_session_language, name='session_language'
name='session_language' ),
),
# Darklang View to change the preview language (or dark language) # Darklang View to change the preview language (or dark language)
url(r'^update_lang/', include('openedx.core.djangoapps.dark_lang.urls', namespace='dark_lang')), path('update_lang/', include('openedx.core.djangoapps.dark_lang.urls', namespace='dark_lang')),
# For redirecting to help pages. # For redirecting to help pages.
url(r'^help_token/', include('help_tokens.urls')), path('help_token/', include('help_tokens.urls')),
url(r'^api/', include('cms.djangoapps.api.urls', namespace='api')), path('api/', include('cms.djangoapps.api.urls', namespace='api')),
# restful api # restful api
url(r'^$', contentstore_views.howitworks, name='homepage'), path('', contentstore_views.howitworks, name='homepage'),
url(r'^howitworks$', contentstore_views.howitworks, name='howitworks'), path('howitworks', contentstore_views.howitworks, name='howitworks'),
url(r'^signin_redirect_to_lms$', contentstore_views.login_redirect_to_lms, name='login_redirect_to_lms'), path('signin_redirect_to_lms', contentstore_views.login_redirect_to_lms, name='login_redirect_to_lms'),
url(r'^request_course_creator$', contentstore_views.request_course_creator, name='request_course_creator'), path('request_course_creator', contentstore_views.request_course_creator, name='request_course_creator'),
url(fr'^course_team/{COURSELIKE_KEY_PATTERN}(?:/(?P<email>.+))?$', re_path(fr'^course_team/{COURSELIKE_KEY_PATTERN}(?:/(?P<email>.+))?$',
contentstore_views.course_team_handler, name='course_team_handler'), contentstore_views.course_team_handler, name='course_team_handler'),
url(fr'^course_info/{settings.COURSE_KEY_PATTERN}$', contentstore_views.course_info_handler, re_path(fr'^course_info/{settings.COURSE_KEY_PATTERN}$', contentstore_views.course_info_handler,
name='course_info_handler'), name='course_info_handler'),
url(fr'^course_info_update/{settings.COURSE_KEY_PATTERN}/(?P<provided_id>\d+)?$', re_path(fr'^course_info_update/{settings.COURSE_KEY_PATTERN}/(?P<provided_id>\d+)?$',
contentstore_views.course_info_update_handler, name='course_info_update_handler' contentstore_views.course_info_update_handler, name='course_info_update_handler'
), ),
url(r'^home/?$', contentstore_views.course_listing, name='home'), re_path(r'^home/?$', contentstore_views.course_listing, name='home'),
url(r'^home_library/?$', contentstore_views.library_listing, name='home_library'), re_path(r'^home_library/?$', contentstore_views.library_listing, name='home_library'),
url(fr'^course/{settings.COURSE_KEY_PATTERN}/search_reindex?$', re_path(fr'^course/{settings.COURSE_KEY_PATTERN}/search_reindex?$',
contentstore_views.course_search_index_handler, contentstore_views.course_search_index_handler,
name='course_search_index_handler' name='course_search_index_handler'
), ),
url(fr'^course/{settings.COURSE_KEY_PATTERN}?$', contentstore_views.course_handler, name='course_handler'), re_path(fr'^course/{settings.COURSE_KEY_PATTERN}?$', contentstore_views.course_handler, name='course_handler'),
url(fr'^checklists/{settings.COURSE_KEY_PATTERN}?$', re_path(fr'^checklists/{settings.COURSE_KEY_PATTERN}?$',
contentstore_views.checklists_handler, contentstore_views.checklists_handler,
name='checklists_handler'), name='checklists_handler'),
url(fr'^course_notifications/{settings.COURSE_KEY_PATTERN}/(?P<action_state_id>\d+)?$', re_path(fr'^course_notifications/{settings.COURSE_KEY_PATTERN}/(?P<action_state_id>\d+)?$',
contentstore_views.course_notifications_handler, contentstore_views.course_notifications_handler,
name='course_notifications_handler'), name='course_notifications_handler'),
url(fr'^course_rerun/{settings.COURSE_KEY_PATTERN}$', contentstore_views.course_rerun_handler, re_path(fr'^course_rerun/{settings.COURSE_KEY_PATTERN}$', contentstore_views.course_rerun_handler,
name='course_rerun_handler'), name='course_rerun_handler'),
url(fr'^container/{settings.USAGE_KEY_PATTERN}$', contentstore_views.container_handler, re_path(fr'^container/{settings.USAGE_KEY_PATTERN}$', contentstore_views.container_handler,
name='container_handler'), name='container_handler'),
url(fr'^orphan/{settings.COURSE_KEY_PATTERN}$', contentstore_views.orphan_handler, re_path(fr'^orphan/{settings.COURSE_KEY_PATTERN}$', contentstore_views.orphan_handler,
name='orphan_handler'), name='orphan_handler'),
url(fr'^assets/{settings.COURSE_KEY_PATTERN}/{settings.ASSET_KEY_PATTERN}?$', re_path(fr'^assets/{settings.COURSE_KEY_PATTERN}/{settings.ASSET_KEY_PATTERN}?$',
contentstore_views.assets_handler, contentstore_views.assets_handler,
name='assets_handler'), name='assets_handler'),
url(fr'^import/{COURSELIKE_KEY_PATTERN}$', contentstore_views.import_handler, re_path(fr'^import/{COURSELIKE_KEY_PATTERN}$', contentstore_views.import_handler,
name='import_handler'), name='import_handler'),
url(fr'^import_status/{COURSELIKE_KEY_PATTERN}/(?P<filename>.+)$', re_path(fr'^import_status/{COURSELIKE_KEY_PATTERN}/(?P<filename>.+)$',
contentstore_views.import_status_handler, name='import_status_handler'), contentstore_views.import_status_handler, name='import_status_handler'),
# rest api for course import/export # rest api for course import/export
url(r'^api/courses/', path('api/courses/', include('cms.djangoapps.contentstore.api.urls', namespace='courses_api')
include('cms.djangoapps.contentstore.api.urls', namespace='courses_api') ),
), re_path(fr'^export/{COURSELIKE_KEY_PATTERN}$', contentstore_views.export_handler,
url(fr'^export/{COURSELIKE_KEY_PATTERN}$', contentstore_views.export_handler, name='export_handler'),
name='export_handler'), re_path(fr'^export_output/{COURSELIKE_KEY_PATTERN}$', contentstore_views.export_output_handler,
url(fr'^export_output/{COURSELIKE_KEY_PATTERN}$', contentstore_views.export_output_handler, name='export_output_handler'),
name='export_output_handler'), re_path(fr'^export_status/{COURSELIKE_KEY_PATTERN}$', contentstore_views.export_status_handler,
url(fr'^export_status/{COURSELIKE_KEY_PATTERN}$', contentstore_views.export_status_handler, name='export_status_handler'),
name='export_status_handler'), re_path(fr'^xblock/outline/{settings.USAGE_KEY_PATTERN}$', contentstore_views.xblock_outline_handler,
url(fr'^xblock/outline/{settings.USAGE_KEY_PATTERN}$', contentstore_views.xblock_outline_handler, name='xblock_outline_handler'),
name='xblock_outline_handler'), re_path(fr'^xblock/container/{settings.USAGE_KEY_PATTERN}$', contentstore_views.xblock_container_handler,
url(fr'^xblock/container/{settings.USAGE_KEY_PATTERN}$', contentstore_views.xblock_container_handler, name='xblock_container_handler'),
name='xblock_container_handler'), re_path(fr'^xblock/{settings.USAGE_KEY_PATTERN}/(?P<view_name>[^/]+)$', contentstore_views.xblock_view_handler,
url(fr'^xblock/{settings.USAGE_KEY_PATTERN}/(?P<view_name>[^/]+)$', contentstore_views.xblock_view_handler, name='xblock_view_handler'),
name='xblock_view_handler'), re_path(fr'^xblock/{settings.USAGE_KEY_PATTERN}?$', contentstore_views.xblock_handler,
url(fr'^xblock/{settings.USAGE_KEY_PATTERN}?$', contentstore_views.xblock_handler, name='xblock_handler'),
name='xblock_handler'), re_path(fr'^tabs/{settings.COURSE_KEY_PATTERN}$', contentstore_views.tabs_handler,
url(fr'^tabs/{settings.COURSE_KEY_PATTERN}$', contentstore_views.tabs_handler, name='tabs_handler'),
name='tabs_handler'), re_path(fr'^settings/details/{settings.COURSE_KEY_PATTERN}$', contentstore_views.settings_handler,
url(fr'^settings/details/{settings.COURSE_KEY_PATTERN}$', contentstore_views.settings_handler, name='settings_handler'),
name='settings_handler'), re_path(fr'^settings/grading/{settings.COURSE_KEY_PATTERN}(/)?(?P<grader_index>\d+)?$',
url(fr'^settings/grading/{settings.COURSE_KEY_PATTERN}(/)?(?P<grader_index>\d+)?$', contentstore_views.grading_handler, name='grading_handler'),
contentstore_views.grading_handler, name='grading_handler'), re_path(fr'^settings/advanced/{settings.COURSE_KEY_PATTERN}$', contentstore_views.advanced_settings_handler,
url(fr'^settings/advanced/{settings.COURSE_KEY_PATTERN}$', contentstore_views.advanced_settings_handler, name='advanced_settings_handler'),
name='advanced_settings_handler'), re_path(fr'^textbooks/{settings.COURSE_KEY_PATTERN}$', contentstore_views.textbooks_list_handler,
url(fr'^textbooks/{settings.COURSE_KEY_PATTERN}$', contentstore_views.textbooks_list_handler, name='textbooks_list_handler'),
name='textbooks_list_handler'), re_path(fr'^textbooks/{settings.COURSE_KEY_PATTERN}/(?P<textbook_id>\d[^/]*)$',
url(fr'^textbooks/{settings.COURSE_KEY_PATTERN}/(?P<textbook_id>\d[^/]*)$', contentstore_views.textbooks_detail_handler, name='textbooks_detail_handler'),
contentstore_views.textbooks_detail_handler, name='textbooks_detail_handler'), re_path(fr'^videos/{settings.COURSE_KEY_PATTERN}(?:/(?P<edx_video_id>[-\w]+))?$',
url(fr'^videos/{settings.COURSE_KEY_PATTERN}(?:/(?P<edx_video_id>[-\w]+))?$', contentstore_views.videos_handler, name='videos_handler'),
contentstore_views.videos_handler, name='videos_handler'), re_path(fr'^generate_video_upload_link/{settings.COURSE_KEY_PATTERN}',
url(fr'^generate_video_upload_link/{settings.COURSE_KEY_PATTERN}', contentstore_views.generate_video_upload_link_handler, name='generate_video_upload_link'),
contentstore_views.generate_video_upload_link_handler, name='generate_video_upload_link'), re_path(fr'^video_images/{settings.COURSE_KEY_PATTERN}(?:/(?P<edx_video_id>[-\w]+))?$',
url(fr'^video_images/{settings.COURSE_KEY_PATTERN}(?:/(?P<edx_video_id>[-\w]+))?$', contentstore_views.video_images_handler, name='video_images_handler'),
contentstore_views.video_images_handler, name='video_images_handler'), re_path(fr'^transcript_preferences/{settings.COURSE_KEY_PATTERN}$',
url(fr'^transcript_preferences/{settings.COURSE_KEY_PATTERN}$', contentstore_views.transcript_preferences_handler, name='transcript_preferences_handler'),
contentstore_views.transcript_preferences_handler, name='transcript_preferences_handler'), re_path(fr'^transcript_credentials/{settings.COURSE_KEY_PATTERN}$',
url(fr'^transcript_credentials/{settings.COURSE_KEY_PATTERN}$', contentstore_views.transcript_credentials_handler, name='transcript_credentials_handler'),
contentstore_views.transcript_credentials_handler, name='transcript_credentials_handler'), path('transcript_download/', contentstore_views.transcript_download_handler, name='transcript_download_handler'),
url(r'^transcript_download/$', contentstore_views.transcript_download_handler, name='transcript_download_handler'), path('transcript_upload/', contentstore_views.transcript_upload_handler, name='transcript_upload_handler'),
url(r'^transcript_upload/$', contentstore_views.transcript_upload_handler, name='transcript_upload_handler'), re_path(r'^transcript_delete/{}(?:/(?P<edx_video_id>[-\w]+))?(?:/(?P<language_code>[^/]*))?$'.format(
url(r'^transcript_delete/{}(?:/(?P<edx_video_id>[-\w]+))?(?:/(?P<language_code>[^/]*))?$'.format(
settings.COURSE_KEY_PATTERN settings.COURSE_KEY_PATTERN
), contentstore_views.transcript_delete_handler, name='transcript_delete_handler'), ), contentstore_views.transcript_delete_handler, name='transcript_delete_handler'),
url(r'^transcript_upload_api/$', contentstore_views.transcript_upload_api, name='transcript_upload_api'), path('transcript_upload_api/', contentstore_views.transcript_upload_api, name='transcript_upload_api'),
url(fr'^video_encodings_download/{settings.COURSE_KEY_PATTERN}$', re_path(fr'^video_encodings_download/{settings.COURSE_KEY_PATTERN}$',
contentstore_views.video_encodings_download, name='video_encodings_download'), contentstore_views.video_encodings_download, name='video_encodings_download'),
url(fr'^group_configurations/{settings.COURSE_KEY_PATTERN}$', re_path(fr'^group_configurations/{settings.COURSE_KEY_PATTERN}$',
contentstore_views.group_configurations_list_handler, contentstore_views.group_configurations_list_handler,
name='group_configurations_list_handler'), name='group_configurations_list_handler'),
url(r'^group_configurations/{}/(?P<group_configuration_id>\d+)(/)?(?P<group_id>\d+)?$'.format( re_path(r'^group_configurations/{}/(?P<group_configuration_id>\d+)(/)?(?P<group_id>\d+)?$'.format(
settings.COURSE_KEY_PATTERN), contentstore_views.group_configurations_detail_handler, settings.COURSE_KEY_PATTERN), contentstore_views.group_configurations_detail_handler,
name='group_configurations_detail_handler'), name='group_configurations_detail_handler'),
url(r'^api/val/v0/', include('edxval.urls')), path('api/val/v0/', include('edxval.urls')),
url(r'^api/tasks/v0/', include('user_tasks.urls')), path('api/tasks/v0/', include('user_tasks.urls')),
url(r'^accessibility$', contentstore_views.accessibility, name='accessibility'), path('accessibility', contentstore_views.accessibility, name='accessibility'),
] ]
if not settings.DISABLE_DEPRECATED_SIGNIN_URL: if not settings.DISABLE_DEPRECATED_SIGNIN_URL:
# TODO: Remove deprecated signin url when traffic proves it is no longer in use # TODO: Remove deprecated signin url when traffic proves it is no longer in use
urlpatterns += [ urlpatterns += [
url(r'^signin$', contentstore_views.login_redirect_to_lms), path('signin', contentstore_views.login_redirect_to_lms),
] ]
if not settings.DISABLE_DEPRECATED_SIGNUP_URL: if not settings.DISABLE_DEPRECATED_SIGNUP_URL:
# TODO: Remove deprecated signup url when traffic proves it is no longer in use # TODO: Remove deprecated signup url when traffic proves it is no longer in use
urlpatterns += [ urlpatterns += [
url(r'^signup$', contentstore_views.register_redirect_to_lms, name='register_redirect_to_lms'), path('signup', contentstore_views.register_redirect_to_lms, name='register_redirect_to_lms'),
] ]
JS_INFO_DICT = { JS_INFO_DICT = {
@@ -205,37 +204,37 @@ JS_INFO_DICT = {
} }
urlpatterns += [ urlpatterns += [
url(r'^openassessment/fileupload/', include('openassessment.fileupload.urls')), path('openassessment/fileupload/', include('openassessment.fileupload.urls')),
] ]
if settings.FEATURES.get('ENABLE_CONTENT_LIBRARIES'): if settings.FEATURES.get('ENABLE_CONTENT_LIBRARIES'):
urlpatterns += [ urlpatterns += [
url(fr'^library/{LIBRARY_KEY_PATTERN}?$', re_path(fr'^library/{LIBRARY_KEY_PATTERN}?$',
contentstore_views.library_handler, name='library_handler'), contentstore_views.library_handler, name='library_handler'),
url(fr'^library/{LIBRARY_KEY_PATTERN}/team/$', re_path(fr'^library/{LIBRARY_KEY_PATTERN}/team/$',
contentstore_views.manage_library_users, name='manage_library_users'), contentstore_views.manage_library_users, name='manage_library_users'),
] ]
if toggles.EXPORT_GIT.is_enabled(): if toggles.EXPORT_GIT.is_enabled():
urlpatterns += [ urlpatterns += [
url(fr'^export_git/{settings.COURSE_KEY_PATTERN}$', re_path(fr'^export_git/{settings.COURSE_KEY_PATTERN}$',
contentstore_views.export_git, contentstore_views.export_git,
name='export_git') name='export_git')
] ]
if settings.FEATURES.get('ENABLE_SERVICE_STATUS'): if settings.FEATURES.get('ENABLE_SERVICE_STATUS'):
urlpatterns.append(url(r'^status/', include('openedx.core.djangoapps.service_status.urls'))) urlpatterns.append(path('status/', include('openedx.core.djangoapps.service_status.urls')))
# The password pages in the admin tool are disabled so that all password # The password pages in the admin tool are disabled so that all password
# changes go through our user portal and follow complexity requirements. # changes go through our user portal and follow complexity requirements.
if not settings.FEATURES.get('ENABLE_CHANGE_USER_PASSWORD_ADMIN'): if not settings.FEATURES.get('ENABLE_CHANGE_USER_PASSWORD_ADMIN'):
urlpatterns.append(url(r'^admin/auth/user/\d+/password/$', handler404)) urlpatterns.append(re_path(r'^admin/auth/user/\d+/password/$', handler404))
urlpatterns.append(url(r'^admin/password_change/$', handler404)) urlpatterns.append(path('admin/password_change/', handler404))
urlpatterns.append(url(r'^admin/', admin.site.urls)) urlpatterns.append(path('admin/', admin.site.urls))
# enable entrance exams # enable entrance exams
if core_toggles.ENTRANCE_EXAMS.is_enabled(): if core_toggles.ENTRANCE_EXAMS.is_enabled():
urlpatterns.append(url(fr'^course/{settings.COURSE_KEY_PATTERN}/entrance_exam/?$', urlpatterns.append(re_path(fr'^course/{settings.COURSE_KEY_PATTERN}/entrance_exam/?$',
contentstore_views.entrance_exam)) contentstore_views.entrance_exam))
# Enable Web/HTML Certificates # Enable Web/HTML Certificates
@@ -248,19 +247,19 @@ if settings.FEATURES.get('CERTIFICATES_HTML_VIEW'):
) )
urlpatterns += [ urlpatterns += [
url(fr'^certificates/activation/{settings.COURSE_KEY_PATTERN}/', re_path(fr'^certificates/activation/{settings.COURSE_KEY_PATTERN}/',
certificate_activation_handler, certificate_activation_handler,
name='certificate_activation_handler'), name='certificate_activation_handler'),
url(r'^certificates/{}/(?P<certificate_id>\d+)/signatories/(?P<signatory_id>\d+)?$'.format( re_path(r'^certificates/{}/(?P<certificate_id>\d+)/signatories/(?P<signatory_id>\d+)?$'.format(
settings.COURSE_KEY_PATTERN), signatory_detail_handler, name='signatory_detail_handler'), settings.COURSE_KEY_PATTERN), signatory_detail_handler, name='signatory_detail_handler'),
url(fr'^certificates/{settings.COURSE_KEY_PATTERN}/(?P<certificate_id>\d+)?$', re_path(fr'^certificates/{settings.COURSE_KEY_PATTERN}/(?P<certificate_id>\d+)?$',
certificates_detail_handler, name='certificates_detail_handler'), certificates_detail_handler, name='certificates_detail_handler'),
url(fr'^certificates/{settings.COURSE_KEY_PATTERN}$', re_path(fr'^certificates/{settings.COURSE_KEY_PATTERN}$',
certificates_list_handler, name='certificates_list_handler') certificates_list_handler, name='certificates_list_handler')
] ]
# Maintenance Dashboard # Maintenance Dashboard
urlpatterns.append(url(r'^maintenance/', include('cms.djangoapps.maintenance.urls', namespace='maintenance'))) urlpatterns.append(path('maintenance/', include('cms.djangoapps.maintenance.urls', namespace='maintenance')))
if settings.DEBUG: if settings.DEBUG:
try: try:
@@ -281,26 +280,24 @@ if settings.DEBUG:
if 'debug_toolbar' in settings.INSTALLED_APPS: if 'debug_toolbar' in settings.INSTALLED_APPS:
import debug_toolbar import debug_toolbar
urlpatterns.append(url(r'^__debug__/', include(debug_toolbar.urls))) urlpatterns.append(path('__debug__/', include(debug_toolbar.urls)))
# UX reference templates # UX reference templates
urlpatterns.append(url(r'^template/(?P<template>.+)$', openedx.core.djangoapps.debug.views.show_reference_template, urlpatterns.append(path('template/<path:template>', openedx.core.djangoapps.debug.views.show_reference_template,
name='openedx.core.djangoapps.debug.views.show_reference_template')) name='openedx.core.djangoapps.debug.views.show_reference_template'))
urlpatterns.append( urlpatterns.append(
url( path('api/learning_sequences/', include(
r'^api/learning_sequences/', ('openedx.core.djangoapps.content.learning_sequences.urls', 'learning_sequences'),
include( namespace='learning_sequences'
('openedx.core.djangoapps.content.learning_sequences.urls', 'learning_sequences'), ),
namespace='learning_sequences'
),
), ),
) )
# display error page templates, for testing purposes # display error page templates, for testing purposes
urlpatterns += [ urlpatterns += [
url(r'^404$', handler404), path('404', handler404),
url(r'^500$', handler500), path('500', handler500),
] ]
# API docs. # API docs.
@@ -308,21 +305,22 @@ urlpatterns += make_docs_urls(api_info)
# edx-drf-extensions csrf app # edx-drf-extensions csrf app
urlpatterns += [ urlpatterns += [
url(r'', include('csrf.urls')), path('', include('csrf.urls')),
] ]
if 'openedx.testing.coverage_context_listener' in settings.INSTALLED_APPS: if 'openedx.testing.coverage_context_listener' in settings.INSTALLED_APPS:
urlpatterns += [ urlpatterns += [
url(r'coverage_context', include('openedx.testing.coverage_context_listener.urls')) path('coverage_context', include('openedx.testing.coverage_context_listener.urls'))
] ]
# pylint: disable=wrong-import-position, wrong-import-order # pylint: disable=wrong-import-position, wrong-import-order
from edx_django_utils.plugins import get_plugin_url_patterns # isort:skip from edx_django_utils.plugins import get_plugin_url_patterns # isort:skip
# pylint: disable=wrong-import-position # pylint: disable=wrong-import-position
from openedx.core.djangoapps.plugins.constants import ProjectType # isort:skip from openedx.core.djangoapps.plugins.constants import ProjectType # isort:skip
urlpatterns.extend(get_plugin_url_patterns(ProjectType.CMS)) urlpatterns.extend(get_plugin_url_patterns(ProjectType.CMS))
# Contentstore # Contentstore
urlpatterns += [ urlpatterns += [
url(r'^api/contentstore/', include('cms.djangoapps.contentstore.rest_api.urls')) path('api/contentstore/', include('cms.djangoapps.contentstore.rest_api.urls'))
] ]

View File

@@ -5,10 +5,9 @@ development mode; otherwise, it is ignored.
""" """
from django.conf.urls import url
from cms.djangoapps.contentstore.views.dev import dev_mode from cms.djangoapps.contentstore.views.dev import dev_mode
from django.urls import path
urlpatterns = [ urlpatterns = [
url(r'^dev_mode$', dev_mode, name='dev_mode'), path('dev_mode', dev_mode, name='dev_mode'),
] ]