Ejemplo n.º 1
0
def pytest_configure(config):
    """
    Performs loading of json-formatted config and extracts vyper object to pytest context variable 'config'

    The config can be loaded from consul server if consul-url, consul-token, consul-path provided,
        seeks for config at {consul-url/consul-path/env}

    If consul-url is not specified, reads config files stored at {test-rootdir/config/env.json}

    """
    config_type = 'json'
    env = config.option.env

    v.set_config_type(config_type)

    is_remote = bool(config.option.consul_url)

    if is_remote:
        c = urlparse(config.option.consul_url)

        token = config.option.consul_token
        client = consul.Consul(host=c.hostname,
                               port=c.port,
                               scheme=c.scheme,
                               token=token)
        path = f'{config.option.consul_path}/{env}'
        provider = 'consul'

        v.add_remote_provider(provider, client, path)
        v.read_remote_config()
    else:
        path = f'{config.rootdir.strpath}/config'

        v.set_config_name(config.option.env)
        v.add_config_path(path)

        try:
            v.read_in_config()
        except FileNotFoundError:
            raise FileNotFoundError(
                f'File not found: {path}/{env}.{config_type}')

    config.v = v
Ejemplo n.º 2
0
Archivo: app.py Proyecto: ykgk518/vyper
import etcd
from flask import Flask
from vyper import v

app = Flask(__name__)
client = etcd.Client(port=2379)


def update_config():
    """Updates Flask's config."""
    return app.config.update(v.all_settings(uppercase_keys=True))


v.set_config_type("json")
v.add_remote_provider("etcd", client, "/config.json")
v.read_remote_config()
update_config()
v.watch_remote_config()
v.on_remote_config_change(update_config)


@app.route("/")
def hello():
    return "Hello " + app.config["HELLO"]


if __name__ == "__main__":
    app.run(use_reloader=False)