Ejemplo n.º 1
0
def load(context: Context, config: components.Config, c: Config) -> Config:

    # Load commands.
    config.commands = {}
    for scope in c.keys('commands'):
        if scope == 'modules':
            continue
        config.commands[scope] = {}
        for name in c.keys('commands', scope):
            command = c.get('commands', scope, name, cast=importstr)
            config.commands[scope][name] = command

    # Load components.
    config.components = {}
    for group in c.keys('components'):
        config.components[group] = {}
        for name in c.keys('components', group):
            component = c.get('components', group, name, cast=importstr)
            config.components[group][name] = component

    # Load exporters.
    config.exporters = {}
    for name in c.keys('exporters'):
        exporter = c.get('exporters', name, cast=importstr)
        config.exporters[name] = exporter()

    # Load everything else.
    config.debug = c.get('debug', default=False)
    config.config_path = c.get('config_path', cast=pathlib.Path, exists=True)
    config.server_url = c.get('server_url')
    config.scope_prefix = c.get('scope_prefix')
    config.scope_max_length = c.get('scope_max_length', cast=int)
    config.default_auth_client = c.get('default_auth_client')

    return config
Ejemplo n.º 2
0
def test_custom_config():
    config = Config()
    config.read(env_vars=False, env_files=False, config={
        'config': [f'{__name__}:_TEST_CONFIG'],
    })
    assert config.get('backends', 'custom', 'dsn') == 'config'
    assert config.keys('backends') == ['default', 'custom', 'mongo']
Ejemplo n.º 3
0
def test_custom_config_fron_environ():
    config = Config()
    config.read(env_files=False, env_vars={
        'SPINTA_CONFIG': f'{__name__}:_TEST_CONFIG',
    })
    assert config.get('backends', 'custom', 'dsn') == 'config'
    assert config.keys('backends') == ['default', 'custom', 'mongo']
Ejemplo n.º 4
0
def test_update_config_from_cli():
    config = Config()
    config.read(env_vars=False, env_files=False, cli_args=[
        'backends.default.backend=psycopg2',
        'backends.new.backend=psycopg2',
    ])
    assert config.get('backends', 'default', 'backend') == 'psycopg2'
    assert config.get('backends', 'new', 'backend') == 'psycopg2'
    assert config.keys('backends') == ['default', 'new']
Ejemplo n.º 5
0
def test_update_config_from_env():
    config = Config()
    config.read(env_files=False, env_vars={
        'SPINTA_BACKENDS': 'default,new',
        'SPINTA_BACKENDS_DEFAULT_BACKEND': 'psycopg2',
        'SPINTA_BACKENDS_NEW_BACKEND': 'psycopg2',
    })
    assert config.get('backends', 'default', 'backend') == 'psycopg2'
    assert config.get('backends', 'new', 'backend') == 'psycopg2'
    assert config.keys('backends') == ['default', 'new']
Ejemplo n.º 6
0
def load(context: Context, store: Store, config: Config) -> Store:
    """Load backends and manifests from configuration."""

    # Load backends.
    store.backends = {}
    for name in config.keys('backends'):
        Backend = config.get('backends', name, 'backend', cast=importstr)
        backend = store.backends[name] = Backend()
        backend.name = name
        load(context, backend, config)

    # Load intrnal manifest.
    internal = store.internal = Manifest()
    internal.name = 'internal'
    internal.path = pathlib.Path(pres.resource_filename('spinta', 'manifest'))
    internal.backend = store.backends['default']
    load(context, internal, config)

    # Load manifests
    store.manifests = {}
    for name in config.keys('manifests'):
        manifest = store.manifests[name] = Manifest()
        manifest.name = name
        manifest.path = config.get('manifests',
                                   name,
                                   'path',
                                   cast=pathlib.Path,
                                   required=True)
        manifest.backend = store.backends[config.get('manifests',
                                                     name,
                                                     'backend',
                                                     required=True)]
        load(context, manifest, config)

    if 'default' not in store.manifests:
        raise Exception("'default' manifest must be set in the configuration.")

    return store
Ejemplo n.º 7
0
def test_update_config_from_env_file(tmpdir):
    envfile = tmpdir.join('.env')
    envfile.write(
        '# comment line\n'
        '\n'
        'SPINTA_BACKENDS=default,new\n'
        'SPINTA_BACKENDS_DEFAULT_BACKEND=foo\n'
        'SPINTA_BACKENDS_NEW_BACKEND=bar\n',
    )

    config = Config()
    config.read(env_vars=False, env_files=[str(envfile)])
    assert config.get('backends', 'default', 'backend') == 'foo'
    assert config.get('backends', 'new', 'backend') == 'bar'
    assert config.keys('backends') == ['default', 'new']
Ejemplo n.º 8
0
def test_remove_keys():
    config = Config()
    config.read(
        env_files=False,
        env_vars={
            'SPINTA_BACKENDS': 'one,two',
        },
        config={
            'backends': {
                'one': {'dsn': '1'},
                'two': {'dsn': '2'},
                'six': {'dsn': '6'},
                'ten': {'dsn': '0'},
            }
        },
    )
    assert config.keys('backends') == ['one', 'two']
Ejemplo n.º 9
0
def test_udpate_config():
    config = Config()
    config.read(env_vars=False, env_files=False, config={
        'components': {
            'nodes': {
                'new': 'component',
            },
        },
        'manifests': {
            'new': {
                'path': 'here',
            },
        },
    })

    assert config.get('components', 'nodes', 'new') == 'component'
    assert config.get('manifests', 'new', 'path') == 'here'
    assert config.keys('manifests') == ['default', 'new']
Ejemplo n.º 10
0
def test_custom_environment():
    config = Config()
    config.read(env_vars=False, env_files=False, config={
        'env': 'testing',
        'environments': {
            'testing': {
                'backends': {
                    'default': {
                        'dsn': 'foo',
                    },
                    'new': {
                        'dsn': 'bar',
                    },
                }
            }
        }
    })
    assert config.get('backends', 'default', 'dsn') == 'foo'
    assert config.get('backends', 'new', 'dsn') == 'bar'
    assert config.keys('backends') == ['default', 'new']