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
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