Reconfigure repoze.who

Now that you have repoze.who working, it’s time to change its setup slightly in order for us to skip authentication while testing protected areas.

The way to change it depends on the way you configure repoze.who:

Via Python code

If the PasteDeploy factory for your application looks like this:

from repoze.who.middleware import PluggableAuthenticationMiddleware

def make_application(global_config, **local_conf):
    # (...)
    app = PluggableAuthenticationMiddleware(
        app,
        identifiers,
        authenticators,
        challengers,
        mdproviders,
        classifier,
        challenge_decider)
    # (...)
    return app

You should replace repoze.who.middleware.PluggableAuthenticationMiddleware with repoze.who.plugins.testutil.make_middleware():

from repoze.who.plugins.testutil import make_middleware

def make_application(global_config, **local_conf):
    # (...)
    app = make_middleware(
        local_conf.get('skip_authentication'),
        app,
        identifiers,
        authenticators,
        challengers,
        mdproviders,
        classifier,
        challenge_decider)
    # (...)
    return app

Attention

Note that repoze.who.plugins.testutil.make_middleware() receives one more argument, before app.

Via repoze.what

If you’re using repoze.what using a code snippet like the one below,

from repoze.what.middleware import setup_auth

def make_application(global_config, **local_conf):
    # (...)
    app = setup_auth(
        app,
        groups,
        permissions,
        identifiers=identifiers,
        authenticators=authenticators,
        challengers=challengers)
    # (...)

Then you should add the skip_authentication keyword argument to setup_auth():

from repoze.what.middleware import setup_auth

def make_application(global_config, **local_conf):
    # (...)
    app = setup_auth(
        app,
        groups,
        permissions,
        identifiers=identifiers,
        authenticators=authenticators,
        challengers=challengers,
        skip_authentication=local_conf.get('skip_authentication'))
    # (...)

That’s it.

Via .ini file

If the PasteDeploy factory for your application looks like this:

from repoze.who.config import make_middleware_with_config

def make_application(global_config, **local_conf):
    # (...)
    app = make_middleware_with_config(
        app,
        global_conf,
        local_conf['who.config_file'],
        local_conf['who.log_file'],
        local_conf['who.log_level'])
    # (...)
    return app

You should replace repoze.who.config.make_middleware_with_config with repoze.who.plugins.testutil.make_middleware_with_config():

from repoze.who.plugins.testutil import make_middleware_with_config

def make_application(global_config, **local_conf):
    # (...)
    app = make_middleware_with_config(
        app,
        global_conf,
        local_conf['who.config_file'],
        local_conf['who.log_file'],
        local_conf['who.log_level'],
        skip_authentication=local_conf.get('skip_authentication'))
    # (...)
    return app

Attention

Note that repoze.who.plugins.testutil.make_middleware_with_config() receives one more argument: skip_authentication.


Tip

You may want to run your application now to check that, so far, nothing seems to have changed.

Table Of Contents

Previous topic

How to test protected areas in Web sites

Next topic

Test protected areas without authentication

This Page