示例#1
0
def test_get_settings():
    settings = get_settings('doesnotexist.json', [
        'foobar=foobar',
        'foo.bar=foobar'
    ])
    assert settings['foobar'] == 'foobar'
    assert settings['foo']['bar'] == 'foobar'
示例#2
0
def test_get_settings_with_environment_variables():
    os.environ.update(
        {"G_foobar": "foobar", "G_foo__bar": "foobar", "G_foo__bar1__bar2": json.dumps({"foo": "bar"})}
    )
    settings = get_settings("doesnotexist.json")
    assert settings["foobar"] == "foobar"
    assert settings["foo"]["bar"] == "foobar"
    assert settings["foo"]["bar1"]["bar2"] == {"foo": "bar"}
示例#3
0
def test_get_settings_with_environment_variables():
    os.environ.update({
        'G_foobar': 'foobar',
        'G_foo__bar': 'foobar',
        'G_foo__bar1__bar2': json.dumps({'foo': 'bar'})
    })
    settings = get_settings('doesnotexist.json')
    assert settings['foobar'] == 'foobar'
    assert settings['foo']['bar'] == 'foobar'
    assert settings['foo']['bar1']['bar2'] == {'foo': 'bar'}
示例#4
0
def test_get_settings_with_environment_variables():
    os.environ.update({
        'G_foobar': 'foobar',
        'G_foo__bar': 'foobar',
        'G_foo__bar1__bar2': json.dumps({
            'foo': 'bar'
        })
    })
    settings = get_settings('doesnotexist.json')
    assert settings['foobar'] == 'foobar'
    assert settings['foo']['bar'] == 'foobar'
    assert settings['foo']['bar1']['bar2'] == {'foo': 'bar'}
示例#5
0
def test_get_settings():
    settings = get_settings('doesnotexist.json',
                            ['foobar=foobar', 'foo.bar=foobar'])
    assert settings['foobar'] == 'foobar'
    assert settings['foo']['bar'] == 'foobar'
示例#6
0
文件: app.py 项目: sunbit/guillotina
async def startup_app(config_file=None,
                      settings=None,
                      loop=None,
                      server_app=None):
    """
    Make application from configuration

    :param config_file: path to configuration file to load
    :param settings: dictionary of settings
    :param loop: if not using with default event loop
    :param settings: provide your own asgi application
    """
    assert loop is not None

    # reset app_settings
    startup_vars = {}
    for key in app_settings.keys():
        if key[0] == "_":
            startup_vars[key] = app_settings[key]

    app_settings.clear()
    app_settings.update(startup_vars)
    app_settings.update(deepcopy(default_settings))

    if config_file is not None:
        from guillotina.commands import get_settings

        settings = get_settings(config_file)
    elif settings is None:
        raise Exception("Neither configuration or settings")

    # Create root Application
    root = ApplicationRoot(config_file, loop)
    provide_utility(root, IApplication, "root")

    # Initialize global (threadlocal) ZCA configuration
    config = root.config = ConfigurationMachine()

    app_configurator = ApplicationConfigurator(
        settings.get("applications") or [], config, root, settings)

    configure.scan("guillotina.renderers")
    configure.scan("guillotina.api")
    configure.scan("guillotina.content")
    configure.scan("guillotina.registry")
    configure.scan("guillotina.auth")
    configure.scan("guillotina.json")
    configure.scan("guillotina.behaviors")
    configure.scan("guillotina.languages")
    configure.scan("guillotina.permissions")
    configure.scan("guillotina.security.security_local")
    configure.scan("guillotina.security.policy")

    if settings.get("load_catalog"):
        configure.scan("guillotina.catalog.index")
        configure.scan("guillotina.catalog.catalog")

    configure.scan("guillotina.files")
    configure.scan("guillotina.annotations")
    configure.scan("guillotina.constraintypes")
    configure.scan("guillotina.subscribers")
    configure.scan("guillotina.db.strategies")
    configure.scan("guillotina.db.storages.vacuum")
    configure.scan("guillotina.db.cache")
    configure.scan("guillotina.db.writer")
    configure.scan("guillotina.db.factory")
    configure.scan("guillotina.exc_resp")
    configure.scan("guillotina.fields")
    configure.scan("guillotina.migrations")

    # always load guillotina
    app_configurator.configure_application("guillotina")
    app_configurator.configure_all_applications()

    apply_concrete_behaviors()

    # update *after* plugins loaded
    update_app_settings(settings)

    if "logging" in app_settings:
        try:
            logging.config.dictConfig(app_settings["logging"])
        except Exception:
            app_logger.error("Could not setup logging configuration",
                             exc_info=True)

    # Make and initialize asgi app
    root.app = server_app
    server_app.root = root
    server_app.config = config
    server_app.settings = app_settings

    for k, v in _moved.items():
        # for b/w compatibility, convert these
        if k in app_settings:
            app_settings[v] = app_settings[k]
            del app_settings[k]

    optimize_settings(app_settings)

    await notify(ApplicationConfiguredEvent(server_app, loop))

    for key, dbconfig in list_or_dict_items(app_settings["databases"]):
        factory = get_utility(IDatabaseConfigurationFactory,
                              name=dbconfig["storage"])
        root[key] = await factory(key, dbconfig, loop)
        await notify(DatabaseInitializedEvent(root[key]))

    for key, file_path in list_or_dict_items(app_settings["static"]):
        path = resolve_path(file_path).resolve()
        if not path.exists():
            raise Exception("Invalid static directory {}".format(file_path))
        if path.is_dir():
            root[key] = StaticDirectory(path)
        else:
            root[key] = StaticFile(path)

    for key, file_path in list_or_dict_items(app_settings["jsapps"]):
        path = resolve_path(file_path).resolve()
        if not path.exists() or not path.is_dir():
            raise Exception("Invalid jsapps directory {}".format(file_path))
        root[key] = JavaScriptApplication(path)

    root.set_root_user(app_settings["root_user"])

    if app_settings.get("jwk") and app_settings.get("jwk").get(
            "k") and app_settings.get("jwk").get("kty"):
        key = jwk.JWK.from_json(json.dumps(app_settings.get("jwk")))
        app_settings["jwk"] = key
        # {"k":"QqzzWH1tYqQO48IDvW7VH7gvJz89Ita7G6APhV-uLMo","kty":"oct"}

    if not app_settings.get("debug") and app_settings["jwt"].get("secret"):
        # validate secret
        secret = app_settings["jwt"]["secret"]
        if secret == "secret":
            app_logger.warning(
                "You are using a very insecure secret key in production mode. "
                "It is strongly advised that you provide a better value for "
                "`jwt.secret` in your config.")
        elif not secure_passphrase(app_settings["jwt"]["secret"]):
            app_logger.warning(
                "You are using a insecure secret key in production mode. "
                "It is recommended that you provide a more complex value for "
                "`jwt.secret` in your config.")

    # Set router root
    server_app.router.set_root(root)
    server_app.on_cleanup.append(cleanup_app)

    for key, util in app_settings["load_utilities"].items():
        app_logger.info("Adding " + key + " : " + util["provides"])
        await notify(BeforeAsyncUtilityLoadedEvent(key, util))
        result = root.add_async_utility(key, util, loop=loop)
        if result is not None:
            await notify(AfterAsyncUtilityLoadedEvent(key, util, *result))

    # Load cached Schemas
    load_cached_schema()

    await notify(ApplicationInitializedEvent(server_app, loop))

    return server_app
示例#7
0
def test_get_settings():
    settings = get_settings("doesnotexist.json", ["foobar=foobar", "foo.bar=foobar"])
    assert settings["foobar"] == "foobar"
    assert settings["foo"]["bar"] == "foobar"