Move dark_lang and lang_pref apps to openedx/core
This commit is contained in:
@@ -226,6 +226,7 @@ SOCIAL_SHARING_SETTINGS = {
|
||||
PROJECT_ROOT = path(__file__).abspath().dirname().dirname() # /edx-platform/cms
|
||||
REPO_ROOT = PROJECT_ROOT.dirname()
|
||||
COMMON_ROOT = REPO_ROOT / "common"
|
||||
OPENEDX_ROOT = REPO_ROOT / "openedx"
|
||||
CMS_ROOT = REPO_ROOT / "cms"
|
||||
LMS_ROOT = REPO_ROOT / "lms"
|
||||
ENV_ROOT = REPO_ROOT.dirname() # virtualenv dir /edx-platform is in
|
||||
@@ -251,6 +252,7 @@ MAKO_TEMPLATES['main'] = [
|
||||
COMMON_ROOT / 'templates',
|
||||
COMMON_ROOT / 'djangoapps' / 'pipeline_mako' / 'templates',
|
||||
COMMON_ROOT / 'static', # required to statically include common Underscore templates
|
||||
OPENEDX_ROOT / 'core' / 'djangoapps' / 'dark_lang' / 'templates',
|
||||
CMS_ROOT / 'djangoapps' / 'pipeline_js' / 'templates',
|
||||
]
|
||||
|
||||
@@ -360,10 +362,10 @@ MIDDLEWARE_CLASSES = (
|
||||
'track.middleware.TrackMiddleware',
|
||||
|
||||
# This is used to set or update the user language preferences.
|
||||
'lang_pref.middleware.LanguagePreferenceMiddleware',
|
||||
'openedx.core.djangoapps.lang_pref.middleware.LanguagePreferenceMiddleware',
|
||||
|
||||
# Allows us to dark-launch particular languages
|
||||
'dark_lang.middleware.DarkLangMiddleware',
|
||||
'openedx.core.djangoapps.dark_lang.middleware.DarkLangMiddleware',
|
||||
|
||||
'embargo.middleware.EmbargoMiddleware',
|
||||
|
||||
@@ -856,7 +858,7 @@ INSTALLED_APPS = (
|
||||
'course_modes',
|
||||
|
||||
# Dark-launching languages
|
||||
'dark_lang',
|
||||
'openedx.core.djangoapps.dark_lang',
|
||||
|
||||
# User preferences
|
||||
'openedx.core.djangoapps.user_api',
|
||||
|
||||
@@ -10,6 +10,6 @@ from django.utils.translation import ugettext as _
|
||||
<%block name="bodyclass">is-signedin pattern-library</%block>
|
||||
|
||||
<%block name="content">
|
||||
<%include file="/darklang/preview_lang_include.html" />
|
||||
<%include file="/dark_lang/preview_lang_include.html" />
|
||||
</%block>
|
||||
|
||||
|
||||
@@ -55,10 +55,14 @@ urlpatterns = patterns(
|
||||
url(r'^api/user/', include('openedx.core.djangoapps.user_api.urls')),
|
||||
|
||||
# Update session view
|
||||
url(r'^lang_pref/session_language', 'lang_pref.views.update_session_language', name='session_language'),
|
||||
url(
|
||||
r'^lang_pref/session_language',
|
||||
'openedx.core.djangoapps.lang_pref.views.update_session_language',
|
||||
name='session_language'
|
||||
),
|
||||
|
||||
# Darklang View to change the preview language (or dark language)
|
||||
url(r'^update_lang/', include('dark_lang.urls', namespace='darklang')),
|
||||
url(r'^update_lang/', include('openedx.core.djangoapps.dark_lang.urls', namespace='dark_lang')),
|
||||
)
|
||||
|
||||
# restful api
|
||||
|
||||
@@ -17,7 +17,7 @@ from openedx.core.djangoapps.theming.helpers import (
|
||||
is_request_in_themed_site,
|
||||
)
|
||||
from certificates.api import get_asset_url_by_slug
|
||||
from lang_pref.api import released_languages
|
||||
from openedx.core.djangoapps.lang_pref.api import released_languages
|
||||
%>
|
||||
|
||||
<%def name="marketing_link(name)"><%
|
||||
|
||||
@@ -15,7 +15,7 @@ import mock
|
||||
import pytz
|
||||
|
||||
from openedx.core.djangoapps.user_api.preferences.api import get_user_preference
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
from notification_prefs import NOTIFICATION_PREF_KEY
|
||||
from openedx.core.djangoapps.external_auth.models import ExternalAuthMap
|
||||
import student
|
||||
|
||||
@@ -85,8 +85,6 @@ from openedx.core.djangoapps.external_auth.login_and_register import (
|
||||
register as external_auth_register
|
||||
)
|
||||
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
|
||||
import track.views
|
||||
|
||||
import dogstats_wrapper as dog_stats_api
|
||||
@@ -120,11 +118,12 @@ from eventtracking import tracker
|
||||
from notification_prefs.views import enable_notifications
|
||||
|
||||
from openedx.core.djangoapps.credit.email_utils import get_credit_provider_display_names, make_providers_strings
|
||||
from openedx.core.djangoapps.user_api.preferences import api as preferences_api
|
||||
from openedx.core.djangoapps.programs.models import ProgramsApiConfig
|
||||
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.programs import utils as programs_utils
|
||||
from openedx.core.djangoapps.programs.models import ProgramsApiConfig
|
||||
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
|
||||
from openedx.core.djangoapps.theming import helpers as theming_helpers
|
||||
from openedx.core.djangoapps.user_api.preferences import api as preferences_api
|
||||
|
||||
|
||||
log = logging.getLogger("edx.student")
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
"""
|
||||
Tests i18n in courseware
|
||||
"""
|
||||
|
||||
import re
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.urlresolvers import reverse
|
||||
@@ -9,10 +11,10 @@ from django.test import TestCase
|
||||
from django.test.client import Client
|
||||
from django.utils import translation
|
||||
from nose.plugins.attrib import attr
|
||||
from openedx.core.djangoapps.user_api.preferences.api import set_user_preference
|
||||
|
||||
from dark_lang.models import DarkLangConfig
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.dark_lang.models import DarkLangConfig
|
||||
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.user_api.preferences.api import set_user_preference
|
||||
from student.tests.factories import UserFactory
|
||||
|
||||
|
||||
|
||||
@@ -22,10 +22,10 @@ import logging
|
||||
import newrelic.agent
|
||||
import urllib
|
||||
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
from xblock.fragment import Fragment
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from openedx.core.lib.time_zone_utils import get_user_time_zone
|
||||
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.user_api.preferences.api import get_user_preference
|
||||
from shoppingcart.models import CourseRegistrationCode
|
||||
from student.models import CourseEnrollment
|
||||
|
||||
@@ -14,21 +14,19 @@ from django.core.mail import send_mail
|
||||
from django.utils.translation import override as override_language
|
||||
|
||||
from course_modes.models import CourseMode
|
||||
from courseware.models import StudentModule
|
||||
from courseware.model_data import FieldDataCache
|
||||
from courseware.module_render import get_module_for_descriptor
|
||||
from courseware.models import StudentModule
|
||||
from edxmako.shortcuts import render_to_string
|
||||
from lms.djangoapps.grades.scores import weighted_score
|
||||
from lms.djangoapps.grades.signals.signals import SCORE_CHANGED
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
from student.models import CourseEnrollment, CourseEnrollmentAllowed
|
||||
from submissions import api as sub_api # installed from the edx-submissions repository
|
||||
from student.models import anonymous_id_for_user
|
||||
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
|
||||
from openedx.core.djangoapps.user_api.models import UserPreference
|
||||
|
||||
from submissions import api as sub_api # installed from the edx-submissions repository
|
||||
from student.models import CourseEnrollment, CourseEnrollmentAllowed, anonymous_id_for_user
|
||||
from xmodule.modulestore.django import modulestore
|
||||
from xmodule.modulestore.exceptions import ItemNotFoundError
|
||||
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
@@ -9,10 +9,10 @@ from django.test.utils import override_settings
|
||||
from nose.plugins.attrib import attr
|
||||
|
||||
from courseware.tests.factories import InstructorFactory
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.user_api.preferences.api import set_user_preference, delete_user_preference
|
||||
from student.models import CourseEnrollment
|
||||
from student.tests.factories import UserFactory
|
||||
from openedx.core.djangoapps.user_api.preferences.api import set_user_preference, delete_user_preference
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
|
||||
|
||||
|
||||
@@ -3,8 +3,9 @@ from django.http import Http404
|
||||
from rest_framework import serializers
|
||||
|
||||
from openedx.core.djangoapps.course_groups.cohorts import is_course_cohorted
|
||||
from notification_prefs import NOTIFICATION_PREF_KEY
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
|
||||
from lms.djangoapps.notification_prefs import NOTIFICATION_PREF_KEY
|
||||
|
||||
|
||||
class NotifierUserSerializer(serializers.ModelSerializer):
|
||||
|
||||
@@ -5,14 +5,14 @@ from django.conf import settings
|
||||
from django.test.client import RequestFactory
|
||||
from django.test.utils import override_settings
|
||||
|
||||
from openedx.core.djangoapps.course_groups.tests.helpers import CohortFactory
|
||||
from django_comment_common.models import Role, Permission
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
from notification_prefs import NOTIFICATION_PREF_KEY
|
||||
from notifier_api.views import NotifierUsersViewSet
|
||||
from opaque_keys.edx.locator import CourseLocator
|
||||
from student.models import CourseEnrollment
|
||||
from student.tests.factories import UserFactory, CourseEnrollmentFactory
|
||||
from openedx.core.djangoapps.course_groups.tests.helpers import CohortFactory
|
||||
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.user_api.models import UserPreference
|
||||
from openedx.core.djangoapps.user_api.tests.factories import UserPreferenceFactory
|
||||
from util.testing import UrlResetMixin
|
||||
|
||||
@@ -5,10 +5,10 @@ from django.core.cache import cache
|
||||
|
||||
from courseware.access import has_access
|
||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.user_api.models import UserPreference
|
||||
from student.models import anonymous_id_for_user
|
||||
from student.models import UserProfile
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
from student.roles import GlobalStaff, CourseStaffRole, CourseInstructorRole
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# pylint: disable=missing-docstring
|
||||
from django.core.cache import cache
|
||||
from django.test.utils import override_settings
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
|
||||
from xmodule.modulestore.tests.factories import (check_mongo_calls, CourseFactory)
|
||||
from student.models import anonymous_id_for_user
|
||||
@@ -9,6 +8,7 @@ from student.models import UserProfile
|
||||
from student.roles import (CourseInstructorRole, CourseStaffRole, GlobalStaff,
|
||||
OrgInstructorRole, OrgStaffRole)
|
||||
from student.tests.factories import UserFactory, UserProfileFactory
|
||||
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.user_api.preferences.api import set_user_preference
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
|
||||
|
||||
@@ -26,11 +26,11 @@ from openedx.core.djangoapps.external_auth.login_and_register import (
|
||||
login as external_auth_login,
|
||||
register as external_auth_register
|
||||
)
|
||||
from lang_pref.api import released_languages, all_languages
|
||||
from openedx.core.djangoapps.commerce.utils import ecommerce_api_client
|
||||
from openedx.core.djangoapps.lang_pref.api import released_languages, all_languages
|
||||
from openedx.core.djangoapps.programs.models import ProgramsApiConfig
|
||||
from openedx.core.djangoapps.theming.helpers import is_request_in_themed_site
|
||||
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
|
||||
from openedx.core.djangoapps.theming.helpers import is_request_in_themed_site
|
||||
from openedx.core.djangoapps.user_api.accounts.api import request_password_change
|
||||
from openedx.core.djangoapps.user_api.errors import UserNotFound
|
||||
from openedx.core.lib.time_zone_utils import TIME_ZONE_CHOICES
|
||||
|
||||
@@ -380,6 +380,7 @@ XQUEUE_WAITTIME_BETWEEN_REQUESTS = 5 # seconds
|
||||
PROJECT_ROOT = path(__file__).abspath().dirname().dirname() # /edx-platform/lms
|
||||
REPO_ROOT = PROJECT_ROOT.dirname()
|
||||
COMMON_ROOT = REPO_ROOT / "common"
|
||||
OPENEDX_ROOT = REPO_ROOT / "openedx"
|
||||
ENV_ROOT = REPO_ROOT.dirname() # virtualenv dir /edx-platform is in
|
||||
COURSES_ROOT = ENV_ROOT / "data"
|
||||
|
||||
@@ -460,10 +461,13 @@ OAUTH2_PROVIDER = {
|
||||
import tempfile
|
||||
MAKO_MODULE_DIR = os.path.join(tempfile.gettempdir(), 'mako_lms')
|
||||
MAKO_TEMPLATES = {}
|
||||
MAKO_TEMPLATES['main'] = [PROJECT_ROOT / 'templates',
|
||||
COMMON_ROOT / 'templates',
|
||||
COMMON_ROOT / 'lib' / 'capa' / 'capa' / 'templates',
|
||||
COMMON_ROOT / 'djangoapps' / 'pipeline_mako' / 'templates']
|
||||
MAKO_TEMPLATES['main'] = [
|
||||
PROJECT_ROOT / 'templates',
|
||||
COMMON_ROOT / 'templates',
|
||||
COMMON_ROOT / 'lib' / 'capa' / 'capa' / 'templates',
|
||||
COMMON_ROOT / 'djangoapps' / 'pipeline_mako' / 'templates',
|
||||
OPENEDX_ROOT / 'core' / 'djangoapps' / 'dark_lang' / 'templates',
|
||||
]
|
||||
|
||||
# Django templating
|
||||
TEMPLATES = [
|
||||
@@ -1131,12 +1135,12 @@ MIDDLEWARE_CLASSES = (
|
||||
'embargo.middleware.EmbargoMiddleware',
|
||||
|
||||
# Allows us to set user preferences
|
||||
'lang_pref.middleware.LanguagePreferenceMiddleware',
|
||||
'openedx.core.djangoapps.lang_pref.middleware.LanguagePreferenceMiddleware',
|
||||
|
||||
# Allows us to dark-launch particular languages.
|
||||
# Must be after LangPrefMiddleware, so ?preview-lang query params can override
|
||||
# user's language preference. ?clear-lang resets to user's language preference.
|
||||
'dark_lang.middleware.DarkLangMiddleware',
|
||||
'openedx.core.djangoapps.dark_lang.middleware.DarkLangMiddleware',
|
||||
|
||||
# Detects user-requested locale from 'accept-language' header in http request.
|
||||
# Must be after DarkLangMiddleware.
|
||||
@@ -2014,7 +2018,7 @@ INSTALLED_APPS = (
|
||||
'lms.djangoapps.verify_student',
|
||||
|
||||
# Dark-launching languages
|
||||
'dark_lang',
|
||||
'openedx.core.djangoapps.dark_lang',
|
||||
|
||||
# Microsite configuration
|
||||
'microsite_configuration',
|
||||
|
||||
@@ -11,5 +11,5 @@ from django.utils.translation import ugettext as _
|
||||
<%block name="bodyclass">pattern-library</%block>
|
||||
|
||||
<%block name="content">
|
||||
<%include file="/darklang/preview_lang_include.html" />
|
||||
<%include file="/dark_lang/preview_lang_include.html" />
|
||||
</%block>
|
||||
|
||||
10
lms/urls.py
10
lms/urls.py
@@ -85,14 +85,20 @@ urlpatterns = (
|
||||
url(r'^api/organizations/', include('organizations.urls', namespace='organizations')),
|
||||
|
||||
# Update session view
|
||||
url(r'^lang_pref/session_language', 'lang_pref.views.update_session_language', name='session_language'),
|
||||
url(
|
||||
r'^lang_pref/session_language',
|
||||
'openedx.core.djangoapps.lang_pref.views.update_session_language',
|
||||
name='session_language'
|
||||
),
|
||||
|
||||
# Multiple course modes and identity verification
|
||||
# TODO Namespace these!
|
||||
url(r'^course_modes/', include('course_modes.urls')),
|
||||
url(r'^verify_student/', include('verify_student.urls')),
|
||||
|
||||
url(r'^update_lang/', include('dark_lang.urls', namespace='darklang')),
|
||||
# URLs for managing dark launches of languages
|
||||
url(r'^update_lang/', include('openedx.core.djangoapps.dark_lang.urls', namespace='dark_lang')),
|
||||
|
||||
# URLs for API access management
|
||||
url(r'^api-admin/', include('openedx.core.djangoapps.api_admin.urls', namespace='api_admin')),
|
||||
)
|
||||
|
||||
@@ -5,6 +5,6 @@ Admin site bindings for dark_lang
|
||||
from django.contrib import admin
|
||||
|
||||
from config_models.admin import ConfigurationModelAdmin
|
||||
from dark_lang.models import DarkLangConfig
|
||||
from openedx.core.djangoapps.dark_lang.models import DarkLangConfig
|
||||
|
||||
admin.site.register(DarkLangConfig, ConfigurationModelAdmin)
|
||||
@@ -8,14 +8,14 @@ This middleware must be placed before the LocaleMiddleware, but after
|
||||
the SessionMiddleware.
|
||||
"""
|
||||
from django.conf import settings
|
||||
from django.utils.translation.trans_real import parse_accept_lang_header
|
||||
from django.utils.translation import LANGUAGE_SESSION_KEY
|
||||
|
||||
from dark_lang import DARK_LANGUAGE_KEY
|
||||
from dark_lang.models import DarkLangConfig
|
||||
from openedx.core.djangoapps.dark_lang import DARK_LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.dark_lang.models import DarkLangConfig
|
||||
from openedx.core.djangoapps.user_api.preferences.api import (
|
||||
get_user_preference
|
||||
)
|
||||
from django.utils.translation.trans_real import parse_accept_lang_header
|
||||
from django.utils.translation import LANGUAGE_SESSION_KEY
|
||||
|
||||
# If django 1.7 or higher is used, the right-side can be updated with new-style codes.
|
||||
CHINESE_LANGUAGE_CODE_MAP = {
|
||||
@@ -8,13 +8,16 @@ from config_models.models import ConfigurationModel
|
||||
|
||||
class DarkLangConfig(ConfigurationModel):
|
||||
"""
|
||||
Configuration for the dark_lang django app
|
||||
Configuration for the dark_lang django app.
|
||||
"""
|
||||
released_languages = models.TextField(
|
||||
blank=True,
|
||||
help_text="A comma-separated list of language codes to release to the public."
|
||||
)
|
||||
|
||||
def __unicode__(self):
|
||||
return u"DarkLangConfig()"
|
||||
|
||||
@property
|
||||
def released_languages_list(self):
|
||||
"""
|
||||
@@ -4,15 +4,17 @@ Tests of DarkLangMiddleware
|
||||
import unittest
|
||||
|
||||
import ddt
|
||||
from mock import Mock
|
||||
|
||||
from django.http import HttpRequest
|
||||
from django.test import TestCase
|
||||
from django.test.client import Client
|
||||
from django.utils.translation import LANGUAGE_SESSION_KEY
|
||||
from mock import Mock
|
||||
|
||||
from dark_lang.middleware import DarkLangMiddleware
|
||||
from dark_lang.models import DarkLangConfig
|
||||
from openedx.core.djangoapps.dark_lang.middleware import DarkLangMiddleware
|
||||
from openedx.core.djangoapps.dark_lang.models import DarkLangConfig
|
||||
from student.tests.factories import UserFactory
|
||||
|
||||
UNSET = object()
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ Contains all the URLs for the Dark Language Support App
|
||||
|
||||
from django.conf.urls import patterns, url
|
||||
|
||||
from dark_lang import views
|
||||
from openedx.core.djangoapps.dark_lang import views
|
||||
|
||||
urlpatterns = patterns(
|
||||
'',
|
||||
@@ -6,16 +6,15 @@ from django.utils.decorators import method_decorator
|
||||
from django.utils.translation import LANGUAGE_SESSION_KEY
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.views.generic.base import View
|
||||
from edxmako.shortcuts import render_to_response
|
||||
from openedx.core.djangoapps.dark_lang import DARK_LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.dark_lang.models import DarkLangConfig
|
||||
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.user_api.preferences.api import (
|
||||
delete_user_preference, get_user_preference, set_user_preference
|
||||
)
|
||||
from openedx.core.lib.api.view_utils import view_auth_classes
|
||||
|
||||
from dark_lang import DARK_LANGUAGE_KEY
|
||||
from dark_lang.models import DarkLangConfig
|
||||
from edxmako.shortcuts import render_to_response
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
|
||||
LANGUAGE_INPUT_FIELD = 'preview_lang'
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ from collections import namedtuple
|
||||
|
||||
from django.conf import settings
|
||||
from django.utils.translation import ugettext as _
|
||||
from dark_lang.models import DarkLangConfig
|
||||
from openedx.core.djangoapps.dark_lang.models import DarkLangConfig
|
||||
|
||||
|
||||
# Named tuples can be referenced using object-like variable
|
||||
@@ -38,15 +38,13 @@ def released_languages():
|
||||
released_language_codes.sort()
|
||||
|
||||
# Intersect the list of valid language tuples with the list
|
||||
# of release language codes
|
||||
released_languages = [
|
||||
Language(tuple[0], tuple[1])
|
||||
for tuple in settings.LANGUAGES
|
||||
if tuple[0] in released_language_codes
|
||||
# of released language codes
|
||||
return [
|
||||
Language(language_info[0], language_info[1])
|
||||
for language_info in settings.LANGUAGES
|
||||
if language_info[0] in released_language_codes
|
||||
]
|
||||
|
||||
return released_languages
|
||||
|
||||
|
||||
def all_languages():
|
||||
"""Retrieve the list of all languages, translated and sorted.
|
||||
@@ -2,11 +2,12 @@
|
||||
Middleware for Language Preferences
|
||||
"""
|
||||
|
||||
from openedx.core.djangoapps.user_api.preferences.api import get_user_preference, delete_user_preference
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
from django.utils.translation import LANGUAGE_SESSION_KEY
|
||||
from django.utils.translation.trans_real import parse_accept_lang_header
|
||||
from lang_pref.api import released_languages
|
||||
|
||||
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.lang_pref.api import released_languages
|
||||
from openedx.core.djangoapps.user_api.preferences.api import get_user_preference, delete_user_preference
|
||||
|
||||
|
||||
class LanguagePreferenceMiddleware(object):
|
||||
@@ -4,17 +4,26 @@
|
||||
from django.test import TestCase
|
||||
from django.test.utils import override_settings
|
||||
from django.utils import translation
|
||||
from lang_pref import api as language_api
|
||||
|
||||
from openedx.core.djangoapps.lang_pref import api as language_api
|
||||
|
||||
|
||||
class LanguageApiTest(TestCase):
|
||||
|
||||
"""
|
||||
Tests of the language APIs.
|
||||
"""
|
||||
def test_released_languages(self):
|
||||
"""
|
||||
Tests for the released languages.
|
||||
"""
|
||||
released_languages = language_api.released_languages()
|
||||
self.assertGreaterEqual(len(released_languages), 1)
|
||||
|
||||
@override_settings(ALL_LANGUAGES=[[u"cs", u"Czech"], [u"nl", u"Dutch"]])
|
||||
def test_all_languages(self):
|
||||
"""
|
||||
Tests for the list of all languages.
|
||||
"""
|
||||
with translation.override('fr'):
|
||||
all_languages = language_api.all_languages()
|
||||
|
||||
@@ -1,19 +1,24 @@
|
||||
"""
|
||||
Tests for lang_pref middleware.
|
||||
"""
|
||||
|
||||
import mock
|
||||
|
||||
from django.test import TestCase
|
||||
from django.test.client import RequestFactory
|
||||
from django.contrib.sessions.middleware import SessionMiddleware
|
||||
from django.utils.translation import LANGUAGE_SESSION_KEY
|
||||
|
||||
from lang_pref.middleware import LanguagePreferenceMiddleware
|
||||
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.lang_pref.middleware import LanguagePreferenceMiddleware
|
||||
from openedx.core.djangoapps.user_api.preferences.api import set_user_preference, get_user_preference
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
from student.tests.factories import UserFactory
|
||||
from student.tests.factories import AnonymousUserFactory
|
||||
import mock
|
||||
|
||||
|
||||
class TestUserPreferenceMiddleware(TestCase):
|
||||
"""
|
||||
Tests to make sure user preferences are getting properly set in the middleware
|
||||
Tests to make sure user preferences are getting properly set in the middleware.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
@@ -30,18 +35,22 @@ class TestUserPreferenceMiddleware(TestCase):
|
||||
def test_no_language_set_in_session_or_prefs(self):
|
||||
# nothing set in the session or the prefs
|
||||
self.middleware.process_request(self.request)
|
||||
self.assertNotIn(LANGUAGE_SESSION_KEY, self.request.session)
|
||||
self.assertNotIn(LANGUAGE_SESSION_KEY, self.request.session) # pylint: disable=no-member
|
||||
|
||||
@mock.patch('lang_pref.middleware.released_languages', mock.Mock(return_value=[('eo', 'esperanto')]))
|
||||
@mock.patch(
|
||||
'openedx.core.djangoapps.lang_pref.middleware.released_languages',
|
||||
mock.Mock(return_value=[('eo', 'esperanto')])
|
||||
)
|
||||
def test_language_in_user_prefs(self):
|
||||
# language set in the user preferences and not the session
|
||||
set_user_preference(self.user, LANGUAGE_KEY, 'eo')
|
||||
self.middleware.process_request(self.request)
|
||||
self.assertEquals(self.request.session[LANGUAGE_SESSION_KEY], 'eo')
|
||||
self.assertEquals(self.request.session[LANGUAGE_SESSION_KEY], 'eo') # pylint: disable=no-member
|
||||
|
||||
@mock.patch('lang_pref.middleware.released_languages', mock.Mock(
|
||||
return_value=[('en', 'english'), ('eo', 'esperanto')]
|
||||
))
|
||||
@mock.patch(
|
||||
'openedx.core.djangoapps.lang_pref.middleware.released_languages',
|
||||
mock.Mock(return_value=[('en', 'english'), ('eo', 'esperanto')])
|
||||
)
|
||||
def test_language_in_session(self):
|
||||
# language set in both the user preferences and session,
|
||||
# preference should get precedence. The session will hold the last value,
|
||||
@@ -49,14 +58,16 @@ class TestUserPreferenceMiddleware(TestCase):
|
||||
|
||||
# Dark lang middleware should run after this middleware, so it can
|
||||
# set a session language as an override of the user's preference.
|
||||
self.request.session[LANGUAGE_SESSION_KEY] = 'en'
|
||||
self.request.session[LANGUAGE_SESSION_KEY] = 'en' # pylint: disable=no-member
|
||||
set_user_preference(self.user, LANGUAGE_KEY, 'eo')
|
||||
self.middleware.process_request(self.request)
|
||||
|
||||
self.assertEquals(self.request.session[LANGUAGE_SESSION_KEY], 'eo')
|
||||
self.assertEquals(self.request.session[LANGUAGE_SESSION_KEY], 'eo') # pylint: disable=no-member
|
||||
|
||||
@mock.patch('lang_pref.middleware.released_languages',
|
||||
mock.Mock(return_value=[('eo', 'dummy Esperanto'), ('ar', 'arabic')]))
|
||||
@mock.patch(
|
||||
'openedx.core.djangoapps.lang_pref.middleware.released_languages',
|
||||
mock.Mock(return_value=[('eo', 'dummy Esperanto'), ('ar', 'arabic')])
|
||||
)
|
||||
def test_supported_browser_language_in_session(self):
|
||||
"""
|
||||
test: browser language should be set in user session if it is supported by system for unauthenticated user.
|
||||
@@ -65,7 +76,10 @@ class TestUserPreferenceMiddleware(TestCase):
|
||||
self.middleware.process_request(self.request)
|
||||
self.assertEqual(self.request.session[LANGUAGE_SESSION_KEY], 'ar') # pylint: disable=no-member
|
||||
|
||||
@mock.patch('lang_pref.middleware.released_languages', mock.Mock(return_value=[('en', 'english')]))
|
||||
@mock.patch(
|
||||
'openedx.core.djangoapps.lang_pref.middleware.released_languages',
|
||||
mock.Mock(return_value=[('en', 'english')])
|
||||
)
|
||||
def test_browser_language_not_be_in_session(self):
|
||||
"""
|
||||
test: browser language should not be set in user session if it is not supported by system.
|
||||
@@ -74,9 +88,10 @@ class TestUserPreferenceMiddleware(TestCase):
|
||||
self.middleware.process_request(self.request)
|
||||
self.assertNotEqual(self.request.session.get(LANGUAGE_SESSION_KEY), 'ar') # pylint: disable=no-member
|
||||
|
||||
@mock.patch('lang_pref.middleware.released_languages', mock.Mock(
|
||||
return_value=[('en', 'english'), ('ar', 'arabic')]
|
||||
))
|
||||
@mock.patch(
|
||||
'openedx.core.djangoapps.lang_pref.middleware.released_languages',
|
||||
mock.Mock(return_value=[('en', 'english'), ('ar', 'arabic')])
|
||||
)
|
||||
def test_delete_user_lang_preference_not_supported_by_system(self):
|
||||
"""
|
||||
test: user preferred language has been removed from user preferences model if it is not supported by system
|
||||
@@ -1,12 +1,15 @@
|
||||
"""
|
||||
Language Preference Views
|
||||
"""
|
||||
|
||||
import json
|
||||
|
||||
from django.conf import settings
|
||||
from django.http import HttpResponse
|
||||
from django.views.decorators.csrf import ensure_csrf_cookie
|
||||
from django.utils.translation import LANGUAGE_SESSION_KEY
|
||||
from lang_pref import LANGUAGE_KEY
|
||||
from django.http import HttpResponse
|
||||
|
||||
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
Reference in New Issue
Block a user