Exemple #1
0
def backend(db_session, tmpdir, request):
    def finalize():
        db_session.flush()
        db_session.rollback()
    request.addfinalizer(finalize)
    db_session.rollback()
    backend = Backend(db_session, str(tmpdir))
    if 'login' in request.keywords:
        user = backend.users.add('Sylvie', 'super*secret', _crypt_strength=0)
        backend.login(user)
    return backend
Exemple #2
0
def get_backend(arguments):
    filename, source = get_config_filename(arguments)
    if filename:
        config_filename = os.path.abspath(filename)
        del filename
        if not os.path.exists(config_filename):
            raise SystemExit('config file does not exist: {}'.format(
                config_filename))
        if arguments['--debug']:
            print('Using config file {} (from {})'.format(config_filename,
                                                          source),
                  file=sys.stderr)
        defaults = {'here': os.path.dirname(config_filename)}
        config = configparser.ConfigParser(defaults)
        config.read(config_filename)
    else:
        if arguments['--debug']:
            print('Cannot find config file', file=sys.stderr)
        config = None
    def get_value_with_source(
            argname, config_section, config_key, default=FAIL, boolean=False):
        if arguments[argname]:
            return arguments[argname], 'command line'
        try:
            section = config[config_section]
            if boolean:
                return section.getboolean(config_key), config_filename
            else:
                return section[config_key], config_filename
        except KeyError:
            pass
        return default, 'default'
    def get_value(argname, *args, **kwargs):
        value, source = get_value_with_source(argname, *args, **kwargs)
        if value is FAIL:
            if config:
                raise SystemExit('{} not given and not found in {}'.format(
                    argname, config_filename))
            else:
                raise SystemExit('{} not given, no config file found'.format(
                    argname))
        else:
            if arguments['--debug']:
                print('{}={} (from {})'.format(argname, value, source),
                    file=sys.stderr)
            return value
    db_url = get_value('--db-url', 'app:main', 'sqlalchemy.url')
    scratch_die = get_value('--scratch', 'app:main', 'fanart.scratch_dir')
    guest = get_value('--guest', 'cli', 'guest', False, boolean=True)
    user = get_value('--user', 'cli', 'user', GUEST if guest else ADMIN)

    engine = engine_from_config({'url': db_url}, prefix='')
    db = initialize_sql(engine)

    backend = Backend(db, scratch_die)
    if user is ADMIN:
        backend.login_admin()
    elif user is GUEST:
        pass
    else:
        backend.login(backend.users[user])

    return backend