diff --git a/cms/envs/common.py b/cms/envs/common.py index 24e8226286..55b241fa1a 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -884,7 +884,10 @@ VIDEO_UPLOAD_PIPELINE = { ############################ APPS ##################################### -INSTALLED_APPS = ( +# The order of INSTALLED_APPS is important, when adding new apps here +# remember to check that you are not creating new +# RemovedInDjango19Warnings in the test logs. +INSTALLED_APPS = [ # Standard apps 'django.contrib.auth', 'django.contrib.contenttypes', @@ -912,6 +915,12 @@ INSTALLED_APPS = ( # Testing 'django_nose', + # Bookmarks + 'openedx.core.djangoapps.bookmarks', + + # Video module configs (This will be moved to Video once it becomes an XBlock) + 'openedx.core.djangoapps.video_config', + # For CMS 'contentstore.apps.ContentstoreConfig', @@ -987,6 +996,12 @@ INSTALLED_APPS = ( 'openedx.core.djangoapps.content.course_structures.apps.CourseStructuresConfig', 'openedx.core.djangoapps.content.block_structure.apps.BlockStructureConfig', + # edx-milestones service + 'milestones', + + # Self-paced course configuration + 'openedx.core.djangoapps.self_paced', + # Coursegraph 'openedx.core.djangoapps.coursegraph.apps.CoursegraphConfig', @@ -998,18 +1013,9 @@ INSTALLED_APPS = ( # edX Proctoring 'edx_proctoring', - # Bookmarks - 'openedx.core.djangoapps.bookmarks', - # Catalog integration 'openedx.core.djangoapps.catalog', - # Self-paced course configuration - 'openedx.core.djangoapps.self_paced', - - # Video module configs (This will be moved to Video once it becomes an XBlock) - 'openedx.core.djangoapps.video_config', - # django-oauth2-provider (deprecated) 'provider', 'provider.oauth2', @@ -1026,9 +1032,6 @@ INSTALLED_APPS = ( # Microsite configuration application 'microsite_configuration', - # edx-milestones service - 'milestones', - # Static i18n support 'statici18n', @@ -1062,7 +1065,7 @@ INSTALLED_APPS = ( # DRF filters 'django_filters', -) +] ################# EDX MARKETING SITE ################################## @@ -1151,32 +1154,33 @@ MAX_FAILED_LOGIN_ATTEMPTS_LOCKOUT_PERIOD_SECS = 15 * 60 ### Apps only installed in some instances - +# The order of INSTALLED_APPS matters, so this tuple is the app name and the item in INSTALLED_APPS +# that this app should be inserted *before*. A None here means it should be appended to the list. OPTIONAL_APPS = ( - 'mentoring', - 'problem_builder', - 'edx_sga', + ('mentoring', None), + ('problem_builder', 'openedx.core.djangoapps.content.course_overviews'), + ('edx_sga', None), # edx-ora2 - 'submissions', - 'openassessment', - 'openassessment.assessment', - 'openassessment.fileupload', - 'openassessment.workflow', - 'openassessment.xblock', + ('submissions', 'openedx.core.djangoapps.content.course_overviews'), + ('openassessment', 'openedx.core.djangoapps.content.course_overviews'), + ('openassessment.assessment', 'openedx.core.djangoapps.content.course_overviews'), + ('openassessment.fileupload', 'openedx.core.djangoapps.content.course_overviews'), + ('openassessment.workflow', 'openedx.core.djangoapps.content.course_overviews'), + ('openassessment.xblock', 'openedx.core.djangoapps.content.course_overviews'), # edxval - 'edxval', + ('edxval', 'openedx.core.djangoapps.content.course_overviews'), # Organizations App (http://github.com/edx/edx-organizations) - 'organizations', + ('organizations', None), # Enterprise App (http://github.com/edx/edx-enterprise) - 'enterprise', + ('enterprise', None), ) -for app_name in OPTIONAL_APPS: +for app_name, insert_before in OPTIONAL_APPS: # First attempt to only find the module rather than actually importing it, # to avoid circular references - only try to import if it can't be found # by find_module, which doesn't work with import hooks @@ -1187,7 +1191,12 @@ for app_name in OPTIONAL_APPS: __import__(app_name) except ImportError: continue - INSTALLED_APPS += (app_name,) + + try: + INSTALLED_APPS.insert(INSTALLED_APPS.index(insert_before), app_name) + except (IndexError, ValueError): + INSTALLED_APPS += (app_name,) + ### ADVANCED_SECURITY_CONFIG # Empty by default diff --git a/lms/envs/common.py b/lms/envs/common.py index ed92ba16ca..b149d01292 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -1965,7 +1965,10 @@ YOUTUBE_API_KEY = None ################################### APPS ###################################### -INSTALLED_APPS = ( +# The order of INSTALLED_APPS is important, when adding new apps here +# remember to check that you are not creating new +# RemovedInDjango19Warnings in the test logs. +INSTALLED_APPS = [ # Standard ones that are always installed... 'django.contrib.auth', 'django.contrib.contenttypes', @@ -2012,6 +2015,12 @@ INSTALLED_APPS = ( # Site configuration for theming and behavioral modification 'openedx.core.djangoapps.site_configuration', + # Video module configs (This will be moved to Video once it becomes an XBlock) + 'openedx.core.djangoapps.video_config', + + # Bookmarks + 'openedx.core.djangoapps.bookmarks', + # Our courseware 'courseware', 'student', @@ -2158,6 +2167,7 @@ INSTALLED_APPS = ( 'openedx.core.djangoapps.content.block_structure.apps.BlockStructureConfig', 'lms.djangoapps.course_blocks', + # Coursegraph 'openedx.core.djangoapps.coursegraph.apps.CoursegraphConfig', @@ -2181,9 +2191,6 @@ INSTALLED_APPS = ( 'xblock_django', - # Bookmarks - 'openedx.core.djangoapps.bookmarks', - # programs support 'openedx.core.djangoapps.programs', @@ -2213,9 +2220,6 @@ INSTALLED_APPS = ( # Verified Track Content Cohorting (Beta feature that will hopefully be removed) 'openedx.core.djangoapps.verified_track_content', - # Video module configs (This will be moved to Video once it becomes an XBlock) - 'openedx.core.djangoapps.video_config', - # Learner's dashboard 'learner_dashboard', @@ -2255,7 +2259,7 @@ INSTALLED_APPS = ( # DRF filters 'django_filters', -) +] ######################### CSRF ######################################### @@ -2792,37 +2796,40 @@ ALL_LANGUAGES = ( ### Apps only installed in some instances +# The order of INSTALLED_APPS matters, so this tuple is the app name and the item in INSTALLED_APPS +# that this app should be inserted *before*. A None here means it should be appended to the list. OPTIONAL_APPS = ( - 'mentoring', - 'problem_builder', - 'edx_sga', + ('mentoring', None), + ('problem_builder', 'openedx.core.djangoapps.content.course_overviews'), + ('edx_sga', None), # edx-ora2 - 'submissions', - 'openassessment', - 'openassessment.assessment', - 'openassessment.fileupload', - 'openassessment.workflow', - 'openassessment.xblock', + ('submissions', 'openedx.core.djangoapps.content.course_overviews'), + ('openassessment', 'openedx.core.djangoapps.content.course_overviews'), + ('openassessment.assessment', 'openedx.core.djangoapps.content.course_overviews'), + ('openassessment.fileupload', 'openedx.core.djangoapps.content.course_overviews'), + ('openassessment.workflow', 'openedx.core.djangoapps.content.course_overviews'), + ('openassessment.xblock', 'openedx.core.djangoapps.content.course_overviews'), # edxval - 'edxval', + ('edxval', 'openedx.core.djangoapps.content.course_overviews'), # edX Proctoring - 'edx_proctoring', + ('edx_proctoring', None), # Organizations App (http://github.com/edx/edx-organizations) - 'organizations', + ('organizations', None), # Enterprise Apps (http://github.com/edx/edx-enterprise) - 'enterprise', - 'integrated_channels.integrated_channel', - 'integrated_channels.sap_success_factors', + ('enterprise', None), + ('integrated_channels.integrated_channel', None), + ('integrated_channels.sap_success_factors', None), + # Required by the Enterprise App - 'django_object_actions', # https://github.com/crccheck/django-object-actions + ('django_object_actions', None), # https://github.com/crccheck/django-object-actions ) -for app_name in OPTIONAL_APPS: +for app_name, insert_before in OPTIONAL_APPS: # First attempt to only find the module rather than actually importing it, # to avoid circular references - only try to import if it can't be found # by find_module, which doesn't work with import hooks @@ -2833,7 +2840,11 @@ for app_name in OPTIONAL_APPS: __import__(app_name) except ImportError: continue - INSTALLED_APPS += (app_name,) + + try: + INSTALLED_APPS.insert(INSTALLED_APPS.index(insert_before), app_name) + except (IndexError, ValueError): + INSTALLED_APPS += (app_name,) ### ADVANCED_SECURITY_CONFIG # Empty by default