Projet

Général

Profil

0001-allow-override-of-app-s-settings-19763.patch

Josué Kouka, 17 novembre 2017 09:57

Télécharger (4,48 ko)

Voir les différences:

Subject: [PATCH] allow override of app's settings (#19763)

 mandayejs/applications.py | 33 +++++++--------------------------
 tests/test_mandayejs.py   | 20 +++++++++++++++++++-
 2 files changed, 26 insertions(+), 27 deletions(-)
mandayejs/applications.py
29 29
def get_app_settings():
30 30
    module_name, app_settings = tuple(settings.SITE_APP.rsplit('.', 1))
31 31
    module = import_module(module_name)
32
    return getattr(module, app_settings)
32
    return getattr(module, app_settings)()
33 33

  
34 34

  
35 35
def app_web_services(request, path):
......
70 70
                if not dct.get('SITE_FORM_SUBMIT_ELEMENT', None):
71 71
                    dct['SITE_FORM_SUBMIT_ELEMENT'] = 'input[type=submit], button'
72 72

  
73
        if dct.get('SITE_LOGIN_PATH_PREFIX', None):
74
            parent = bases[0]
75
            dct['SITE_LOGIN_PATH'] = os.path.join(dct['SITE_LOGIN_PATH_PREFIX'], parent.SITE_LOGIN_PATH.strip('/'))
76 73
        return super(AppSettingsMeta, cls).__new__(cls, name, bases, dct)
77 74

  
78 75

  
79 76
class AppSettings(object):
80 77
    __metaclass__ = AppSettingsMeta
81 78

  
79
    def __getattribute__(self, name):
80
        value = getattr(settings, name, None)
81
        if value:
82
            return value
83
        return object.__getattribute__(self, name)
84

  
82 85

  
83 86
# Test App Settings
84 87
class Test(AppSettings):
......
228 231
    SITE_LOGOUT_LOCATOR = '#espace-login form input[type=submit]'
229 232

  
230 233

  
231
class ArpegeVincennesTest(Arpege):
232
    SITE_LOGIN_PATH = '/vincennes-test/index.do'
233

  
234

  
235 234
class Imuse(AppSettings):
236 235
    SITE_LOGIN_PATH = 'extranet/login/gen_index_groupe.php?nav=autre'
237 236

  
......
265 264
    SITE_FORM_SUBMIT_ELEMENT = '#INDEX_BT_LOGIN'
266 265

  
267 266

  
268
class ImuseTeacher(Imuse):
269
    SITE_LOGIN_PATH = '/extranet/login/ens_index_enseignant.php'
270

  
271

  
272
class ImuseFamily(Imuse):
273
    SITE_LOGIN_PATH = '/extranet/login/usa_index_famille.php'
274

  
275
    SITE_LOGOUT_LOCATOR = '#MENU_FAMILLE_QUITTER'
276

  
277

  
278
class ImuseFamilyMontpellier(ImuseFamily):
279
    SITE_LOGIN_PATH_PREFIX = '/montpellier/'
280

  
281

  
282 267
class Sezhame(AppSettings):
283 268
    SITE_LOGIN_PATH = '/sezhame/page/connexion-abonne?destination=user'
284 269

  
......
344 329
    SITE_FORCE_REDIRECT_LOCATOR = '#loginForm'
345 330

  
346 331
    SITE_LOGOUT_LOCATOR = ".infoUtilisateur[alt=Deconnexion]"
347

  
348

  
349
class TeamnetMeyzieu(Teamnet):
350
    SITE_LOGIN_PATH_PREFIX = '/meyzieu/'
tests/test_mandayejs.py
3 3
import json
4 4
import time
5 5
import mock
6
import os
6 7
import pytest
7 8

  
8 9
from django.conf import settings
......
13 14
from django.core.urlresolvers import reverse
14 15

  
15 16
from mandayejs.mandaye.models import UserCredentials
16
from mandayejs.mandaye.utils import exec_phantom
17
from mandayejs.mandaye.utils import exec_phantom, get_login_info
17 18
from mandayejs.mandaye.forms import FormFactory
18 19
from mandayejs.mandaye.views import post_login_do
19 20

  
......
409 410
    request.user = user_john
410 411
    response = post_login_do(request)
411 412
    assert 'window.top.location = "http://example.net/"' in response.content
413

  
414

  
415
@mock.patch('mandayejs.applications.Test.SITE_LOCATORS', MOCKED_SITE_LOCATORS)
416
def test_app_settings_overriding(settings, cred_john):
417
    request = RequestFactory().get('/')
418
    data = get_login_info(request, cred_john)
419
    assert data['address'] == 'http://testserver/'
420
    assert data['auth_checker'] == os.path.join(settings.STATIC_ROOT, 'js/test/auth.checker.js')
421
    assert data['form_submit_element'] == 'input[type=submit], button'
422
    # when overriding settings
423
    settings.SITE_LOGIN_PATH = '/login'
424
    settings.SITE_AUTH_CHECKER = os.path.join(settings.STATIC_ROOT, 'js/global.auth.checker.js')
425
    settings.SITE_FORM_SUBMIT_ELEMENT = 'button'
426
    data = get_login_info(request, cred_john)
427
    assert data['address'] == 'http://testserver/login'
428
    assert data['auth_checker'] == os.path.join(settings.STATIC_ROOT, 'js/global.auth.checker.js')
429
    assert data['form_submit_element'] == 'button'
412
-