allow override of app's settings (#19763)
This commit is contained in:
parent
4a9368111c
commit
1f4bd5d85d
|
@ -29,7 +29,7 @@ from django.core.urlresolvers import resolve
|
|||
def get_app_settings():
|
||||
module_name, app_settings = tuple(settings.SITE_APP.rsplit('.', 1))
|
||||
module = import_module(module_name)
|
||||
return getattr(module, app_settings)
|
||||
return getattr(module, app_settings)()
|
||||
|
||||
|
||||
def app_web_services(request, path):
|
||||
|
@ -63,22 +63,22 @@ class AppSettingsMeta(type):
|
|||
'one of these settings ({}) must be defined'
|
||||
.format(('SITE_FORCE_REDIRECT_URL', 'SITE_FORCE_REDIRECT_LOCATOR')))
|
||||
|
||||
# Script asserting phantomjs authentication
|
||||
dct['SITE_AUTH_CHECKER'] = os.path.join(settings.STATIC_ROOT, dct['SITE_AUTH_CHECKER'])
|
||||
|
||||
# Default form submit element
|
||||
if not dct.get('SITE_FORM_SUBMIT_ELEMENT', None):
|
||||
dct['SITE_FORM_SUBMIT_ELEMENT'] = 'input[type=submit], button'
|
||||
|
||||
if dct.get('SITE_LOGIN_PATH_PREFIX', None):
|
||||
parent = bases[0]
|
||||
dct['SITE_LOGIN_PATH'] = os.path.join(dct['SITE_LOGIN_PATH_PREFIX'], parent.SITE_LOGIN_PATH.strip('/'))
|
||||
return super(AppSettingsMeta, cls).__new__(cls, name, bases, dct)
|
||||
|
||||
|
||||
class AppSettings(object):
|
||||
__metaclass__ = AppSettingsMeta
|
||||
|
||||
def __getattribute__(self, name):
|
||||
value = getattr(settings, name, None)
|
||||
if value is not None:
|
||||
return value
|
||||
return super(AppSettings, self).__getattribute__(name)
|
||||
|
||||
|
||||
# Test App Settings
|
||||
class Test(AppSettings):
|
||||
|
@ -228,10 +228,6 @@ class Arpege(AppSettings):
|
|||
SITE_LOGOUT_LOCATOR = '#espace-login form input[type=submit]'
|
||||
|
||||
|
||||
class ArpegeVincennesTest(Arpege):
|
||||
SITE_LOGIN_PATH = '/vincennes-test/index.do'
|
||||
|
||||
|
||||
class Imuse(AppSettings):
|
||||
SITE_LOGIN_PATH = 'extranet/login/gen_index_groupe.php?nav=autre'
|
||||
|
||||
|
@ -265,20 +261,6 @@ class Imuse(AppSettings):
|
|||
SITE_FORM_SUBMIT_ELEMENT = '#INDEX_BT_LOGIN'
|
||||
|
||||
|
||||
class ImuseTeacher(Imuse):
|
||||
SITE_LOGIN_PATH = '/extranet/login/ens_index_enseignant.php'
|
||||
|
||||
|
||||
class ImuseFamily(Imuse):
|
||||
SITE_LOGIN_PATH = '/extranet/login/usa_index_famille.php'
|
||||
|
||||
SITE_LOGOUT_LOCATOR = '#MENU_FAMILLE_QUITTER'
|
||||
|
||||
|
||||
class ImuseFamilyMontpellier(ImuseFamily):
|
||||
SITE_LOGIN_PATH_PREFIX = '/montpellier/'
|
||||
|
||||
|
||||
class Sezhame(AppSettings):
|
||||
SITE_LOGIN_PATH = '/sezhame/page/connexion-abonne?destination=user'
|
||||
|
||||
|
@ -344,7 +326,3 @@ class Teamnet(AppSettings):
|
|||
SITE_FORCE_REDIRECT_LOCATOR = '#loginForm'
|
||||
|
||||
SITE_LOGOUT_LOCATOR = ".infoUtilisateur[alt=Deconnexion]"
|
||||
|
||||
|
||||
class TeamnetMeyzieu(Teamnet):
|
||||
SITE_LOGIN_PATH_PREFIX = '/meyzieu/'
|
||||
|
|
|
@ -133,12 +133,13 @@ def get_login_info(request, credentials):
|
|||
"""Returns phantomjs login prerequis
|
||||
"""
|
||||
app_settings = get_app_settings()
|
||||
|
||||
auth_checker = os.path.join(
|
||||
settings.STATIC_ROOT, app_settings.SITE_AUTH_CHECKER)
|
||||
return {
|
||||
'address': request.build_absolute_uri(app_settings.SITE_LOGIN_PATH),
|
||||
'cookies': [],
|
||||
'locators': [credentials.to_login_info()],
|
||||
'auth_checker': app_settings.SITE_AUTH_CHECKER,
|
||||
'auth_checker': auth_checker,
|
||||
'form_submit_element': app_settings.SITE_FORM_SUBMIT_ELEMENT
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
import json
|
||||
import time
|
||||
import mock
|
||||
import os
|
||||
import pytest
|
||||
|
||||
from django.conf import settings
|
||||
|
@ -13,7 +14,7 @@ from django.test.client import RequestFactory, Client
|
|||
from django.core.urlresolvers import reverse
|
||||
|
||||
from mandayejs.mandaye.models import UserCredentials
|
||||
from mandayejs.mandaye.utils import exec_phantom
|
||||
from mandayejs.mandaye.utils import exec_phantom, get_login_info
|
||||
from mandayejs.mandaye.forms import FormFactory
|
||||
from mandayejs.mandaye.views import post_login_do
|
||||
|
||||
|
@ -409,3 +410,25 @@ def test_post_login_do_with_next_url(mocked_popen, user_john):
|
|||
request.user = user_john
|
||||
response = post_login_do(request)
|
||||
assert 'window.top.location = "http://example.net/"' in response.content
|
||||
|
||||
|
||||
@mock.patch('mandayejs.applications.Test.SITE_LOCATORS', MOCKED_SITE_LOCATORS)
|
||||
def test_app_settings_overriding(settings, cred_john):
|
||||
request = RequestFactory().get('/')
|
||||
data = get_login_info(request, cred_john)
|
||||
assert data['address'] == 'http://testserver/'
|
||||
assert data['auth_checker'] == os.path.join(settings.STATIC_ROOT, 'js/test/auth.checker.js')
|
||||
assert data['form_submit_element'] == 'input[type=submit], button'
|
||||
# when overriding settings
|
||||
settings.SITE_LOGIN_PATH = 'account/login'
|
||||
settings.SITE_AUTH_CHECKER = 'js/global.auth.checker.js'
|
||||
settings.SITE_FORM_SUBMIT_ELEMENT = 'button'
|
||||
data = get_login_info(request, cred_john)
|
||||
assert data['address'] == 'http://testserver/account/login'
|
||||
assert data['auth_checker'] == os.path.join(settings.STATIC_ROOT, 'js/global.auth.checker.js')
|
||||
assert data['form_submit_element'] == 'button'
|
||||
settings.SITE_LOGIN_PATH = ''
|
||||
settings.SITE_FORM_SUBMIT_ELEMENT = ''
|
||||
data = get_login_info(request, cred_john)
|
||||
assert data['address'] == 'http://testserver/'
|
||||
assert data['form_submit_element'] == ''
|
||||
|
|
Reference in New Issue