From d4a8d9c3b9ab917f50bdaae0ea5a5cd5c4dec53f Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Mon, 30 Oct 2017 18:38:48 +0100 Subject: [PATCH] allow override of app's settings (#19763) --- mandayejs/applications.py | 36 +++++++----------------------------- mandayejs/mandaye/utils.py | 5 +++-- tests/test_mandayejs.py | 20 +++++++++++++++++++- 3 files changed, 29 insertions(+), 32 deletions(-) diff --git a/mandayejs/applications.py b/mandayejs/applications.py index ff02ff3..d031fff 100644 --- a/mandayejs/applications.py +++ b/mandayejs/applications.py @@ -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: + return value + return object.__getattribute__(self, 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/' diff --git a/mandayejs/mandaye/utils.py b/mandayejs/mandaye/utils.py index 3b0d345..0302704 100644 --- a/mandayejs/mandaye/utils.py +++ b/mandayejs/mandaye/utils.py @@ -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 } diff --git a/tests/test_mandayejs.py b/tests/test_mandayejs.py index 8469337..a2b58f0 100644 --- a/tests/test_mandayejs.py +++ b/tests/test_mandayejs.py @@ -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,20 @@ 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 = '/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/login' + assert data['auth_checker'] == os.path.join(settings.STATIC_ROOT, 'js/global.auth.checker.js') + assert data['form_submit_element'] == 'button' -- 2.11.0