def wsgi_apps(): """Wsgi app fixture.""" from invenio_base.wsgi import create_wsgi_factory, wsgi_proxyfix from invenio_base.app import create_app_factory def _config(app, **kwargs): app.config.update(SECRET_KEY='SECRET_KEY', TESTING=True, APP_DEFAULT_SECURE_HEADERS=dict(force_https=False, )) # API create_api = create_app_factory( 'invenio', config_loader=_config, wsgi_factory=wsgi_proxyfix(), ) # UI create_ui = create_app_factory( 'invenio', config_loader=_config, wsgi_factory=wsgi_proxyfix(), ) # Combined create_app = create_app_factory( 'invenio', config_loader=_config, wsgi_factory=wsgi_proxyfix(create_wsgi_factory({'/api': create_api})), ) return create_app, create_ui, create_api
def test_create_app_factory_wsgi_factory(): """Test app factory wsgi factory.""" def _wsgi_factory(app): return DispatcherMiddleware(app.wsgi_app, {'/test': Flask('dispatch')}) create_app = create_app_factory('test', wsgi_factory=_wsgi_factory) app = create_app() assert isinstance(app.wsgi_app, DispatcherMiddleware)
def test_callable_static_path(tmppath): """Test static path evaluation.""" def static_folder(): return join(tmppath, 'teststatic') app = create_app_factory('test', static_folder=static_folder)() assert app.static_folder == join(tmppath, 'teststatic') assert app.instance_path is not None
def test_callable_instance_path(tmppath): """Test instance path evaluation.""" def instance_path(): return tmppath app = create_app_factory('test', instance_path=instance_path)() assert app.instance_path == tmppath assert app.static_folder is None
def test_create_app_factory_config_loader(): """Test app factory conf loader.""" def _config_loader(app, **kwargs): app.config['CONFIG_LOADER'] = True app.config.update(kwargs) create_app = create_app_factory('test', config_loader=_config_loader) app = create_app(KWARGS_TEST=True) assert app.config['CONFIG_LOADER'] assert app.config['KWARGS_TEST']
def create_api(*args, **kwargs): app = create_app_factory( 'b2share', config_loader=config_loader, extension_entry_points=['invenio_base.api_apps'], blueprint_entry_points=['invenio_base.api_blueprints'], converter_entry_points=['invenio_base.api_converters'], instance_path=instance_path, )(*args, **kwargs) return app
def create_api(*args, **kwargs): """Create Flask application providing B2SHARE REST API.""" app = create_app_factory( 'b2share', config_loader=config_loader, extension_entry_points=['invenio_base.api_apps'], blueprint_entry_points=['invenio_base.api_blueprints'], converter_entry_points=['invenio_base.api_converters'], instance_path=instance_path, )(*args, **kwargs) return app
def test_migrate_secret_key(): """Test cli command for SECRET_KEY change.""" def _config_loader(app, **kwargs): app.config['CONFIG_LOADER'] = True app.config.update(kwargs) create_app = create_app_factory('test', config_loader=_config_loader) app = create_app(KWARGS_TEST=True) script_info = ScriptInfo(create_app=lambda info: app) # Check that CLI command fails when the SECRET_KEY is not set. with app.app_context(): runner = CliRunner() result = runner.invoke(instance, ['migrate_secret_key', '--old-key', 'OLD_SECRET_KEY'], obj=script_info) assert result.exit_code == 1 assert 'Error: SECRET_KEY is not set in the configuration.' in \ result.output app.secret_key = "SECRET" with patch('pkg_resources.EntryPoint') as MockEntryPoint: # Test that the CLI command succeeds when the entrypoint does # return a function. entrypoint = MockEntryPoint('ep1', 'ep1') entrypoint.load.return_value = MagicMock() with patch('invenio_base.cli.iter_entry_points', return_value=[entrypoint]): result = runner.invoke( instance, ['migrate_secret_key', '--old-key', 'OLD_SECRET_KEY'], obj=script_info) assert result.exit_code == 0 assert entrypoint.load.called entrypoint.load.return_value.assert_called_with( old_key='OLD_SECRET_KEY' ) assert 'Successfully changed secret key.' in result.output # Test that the CLI command fails correctly when the entrypoint does # not return a function. entrypoint = MockEntryPoint('ep2', 'ep2') entrypoint.load.return_value = 'ep2' with patch('invenio_base.cli.iter_entry_points', return_value=[entrypoint]): result = runner.invoke( instance, ['migrate_secret_key', '--old-key', 'OLD_SECRET_KEY'], obj=script_info) assert result.exit_code == -1 assert entrypoint.load.called assert 'Failed to initialize entry point' in result.output
def test_migrate_secret_key(): """Test cli command for SECRET_KEY change.""" def _config_loader(app, **kwargs): app.config["CONFIG_LOADER"] = True app.config.update(kwargs) create_app = create_app_factory("test", config_loader=_config_loader) app = create_app(KWARGS_TEST=True) # Check that CLI command fails when the SECRET_KEY is not set. runner = app.test_cli_runner() result = runner.invoke( instance, ["migrate-secret-key", "--old-key", "OLD_SECRET_KEY"]) assert result.exit_code == 1 assert "Error: SECRET_KEY is not set in the configuration." in result.output app.secret_key = "SECRET" with patch("importlib_metadata.entry_points") as MockEP: # Test that the CLI command succeeds when the entrypoint does # return a function. entrypoint = MockEP("ep1", "ep1", "ep1") entrypoint.load.return_value = MagicMock() with patch( "importlib_metadata.entry_points", return_value={"invenio_base.secret_key": [entrypoint]}, ): result = runner.invoke( instance, ["migrate-secret-key", "--old-key", "OLD_SECRET_KEY"]) assert result.exit_code == 0 assert entrypoint.load.called entrypoint.load.return_value.assert_called_with( old_key="OLD_SECRET_KEY") assert "Successfully changed secret key." in result.output # Test that the CLI command fails correctly when the entrypoint does # not return a function. entrypoint = MockEP("ep2", "ep2", "ep2") entrypoint.load.return_value = "ep2" with patch("importlib_metadata.entry_points", return_value={"ep2": [entrypoint]}): result = runner.invoke( instance, ["migrate-secret-key", "--old-key", "OLD_SECRET_KEY"]) assert result.exit_code == 1 assert entrypoint.load.called assert "Failed to perform migration of secret key" in result.output
def test_create_cli_with_app(): """Test create cli.""" app_name = 'mycmdtest' create_app = create_app_factory(app_name) cli = create_cli(create_app=create_app) @cli.command() def test_cmd(): click.echo('{0} {1}'.format(current_app.name, current_app.debug)) runner = CliRunner() result = runner.invoke(cli) assert result.exit_code == 0 result = runner.invoke(cli, ['test_cmd']) assert result.exit_code == 0 assert u'{0} False\n'.format(app_name) in result.output
def test_create_cli_with_app(): """Test create cli.""" app_name = 'mycmdtest' create_app = create_app_factory(app_name) cli = create_cli(create_app=create_app) @cli.command() def test_cmd(): click.echo('{0} {1}'.format(current_app.name, current_app.debug)) runner = CliRunner() result = runner.invoke(cli) assert result.exit_code == 0 result = runner.invoke(cli, ['test-cmd']) assert result.exit_code == 0 assert u'{0} False\n'.format(app_name) in result.output
def test_create_app_factory(): """Test app factory factory.""" class FlaskExt(object): def __init__(self, app): self.app = app app.extensions['ext'] = self bp = Blueprint('test', 'test') # Create app create_app = create_app_factory( 'test', blueprints=[bp], extensions=[FlaskExt]) assert callable(create_app) app = create_app() assert app.name == 'test' assert len(app.blueprints) == 1 assert 'ext' in app.extensions
def test_create_app_factory(): """Test signals sending.""" calls = {'created': 0, 'loaded': 0} create_app = create_app_factory('test') def _receiver(name): def _inner(sender, app=None): calls[name] += 1 calls['{}_app'.format(name)] = app return _inner app_created.connect(_receiver('created'), sender=create_app, weak=False) app_loaded.connect(_receiver('loaded'), sender=create_app, weak=False) assert callable(create_app) app = create_app() assert calls['created'] == 1 assert calls['loaded'] == 1 assert calls['created_app'] is app assert calls['loaded_app'] is app
def test_create_app_factory(): """Test signals sending.""" calls = {"created": 0, "loaded": 0} create_app = create_app_factory("test") def _receiver(name): def _inner(sender, app=None): calls[name] += 1 calls[f"{name}_app"] = app return _inner app_created.connect(_receiver("created"), sender=create_app, weak=False) app_loaded.connect(_receiver("loaded"), sender=create_app, weak=False) assert callable(create_app) app = create_app() assert calls["created"] == 1 assert calls["loaded"] == 1 assert calls["created_app"] is app assert calls["loaded_app"] is app
def config_loader(app, **kwargs_config): """Add loading templates.""" local_templates_path = os.path.join(app.instance_path, 'templates') if os.path.exists(local_templates_path): app.jinja_loader = ChoiceLoader([ FileSystemLoader(local_templates_path), app.jinja_loader, ]) app.jinja_options = dict( app.jinja_options, cache_size=1000, bytecode_cache=BytecodeCache(app) ) app.url_map.strict_slashes = False invenio_config_loader(app, **kwargs_config) create_api = create_app_factory( 'invenio', config_loader=config_loader, blueprint_entry_points=['invenio_base.api_blueprints'], extension_entry_points=['invenio_base.api_apps'], converter_entry_points=['invenio_base.api_converters'], wsgi_factory=wsgi_proxyfix(), instance_path=instance_path, app_class=app_class(), )
Defaults to ``<env_prefix>_INSTANCE_PATH`` or if environment variable is not set ``<sys.prefix>/var/<app_name>-instance``. """ static_folder = os.getenv(env_prefix + '_STATIC_FOLDER') or \ os.path.join(instance_path, 'static') """Static folder path. Defaults to ``<env_prefix>_STATIC_FOLDER`` or if environment variable is not set ``<sys.prefix>/var/<app_name>-instance/static``. """ create_api = create_app_factory( '{{ cookiecutter.package_name }}', config_loader=config_loader, blueprint_entry_points=['invenio_base.api_blueprints'], extension_entry_points=['invenio_base.api_apps'], converter_entry_points=['invenio_base.api_converters'], instance_path=instance_path, ) create_app = create_app_factory( '{{ cookiecutter.package_name }}', config_loader=config_loader, blueprint_entry_points=['invenio_base.blueprints'], extension_entry_points=['invenio_base.apps'], converter_entry_points=['invenio_base.converters'], wsgi_factory=create_wsgi_factory({'/api': create_api}), instance_path=instance_path, static_folder=static_folder, )
set ``<sys.prefix>/var/<app_name>-instance``. """ static_folder = os.getenv(env_prefix + '_STATIC_FOLDER') or \ os.path.join(instance_path, 'static') """Static folder path. Defaults to ``<env_prefix>_STATIC_FOLDER`` or if environment variable is not set ``<sys.prefix>/var/<app_name>-instance/static``. """ create_api = create_app_factory( 'cap', config_loader=conf_loader, blueprint_entry_points=['invenio_base.api_blueprints'], extension_entry_points=['invenio_base.api_apps'], converter_entry_points=['invenio_base.api_converters'], instance_path=instance_path, static_folder=static_folder, ) create_app = create_app_factory( 'cap', config_loader=conf_loader, blueprint_entry_points=['invenio_base.blueprints'], extension_entry_points=['invenio_base.apps'], instance_path=instance_path, static_folder=static_folder, )
# -*- coding: utf-8 -*- """Mysite Invenio API application.""" from invenio_base.app import create_app_factory from invenio_base.wsgi import create_wsgi_factory from invenio_config import default_conf_loader from . import config env_prefix = 'APP' create_api = create_app_factory( 'mysite-api', env_prefix=env_prefix, config_loader=default_conf_loader(config, env_prefix=env_prefix), bp_entry_point='invenio_base.api_blueprints', ext_entry_point='invenio_base.api_apps', ) create_app = create_app_factory( 'mysite-app', env_prefix=env_prefix, config_loader=default_conf_loader(config, env_prefix=env_prefix), bp_entry_point='invenio_base.blueprints', ext_entry_point='invenio_base.apps', wsgi_factory=create_wsgi_factory({'/api': create_api}) )
from inspire_hal.cli import hal from inspire_hal import config env_prefix = 'APP' def config_loader(app, **kwargs_config): invenio_config_loader = create_config_loader(config=config, env_prefix=env_prefix) result = invenio_config_loader(app, **kwargs_config) app.url_map.strict_slashes = False app.cli.add_command(hal) return result instance_path = os.getenv(env_prefix + '_INSTANCE_PATH') or \ os.path.join(sys.prefix, 'var', 'inspirehal-instance') """Instance path for Invenio. Defaults to ``<env_prefix>_INSTANCE_PATH`` or if environment variable is not set ``<sys.prefix>/var/<app_name>-instance``. """ create_app = create_app_factory( 'inspire_hal', config_loader=config_loader, extension_entry_points=['invenio_base.apps'], instance_path=instance_path, )
Defaults to ``<virtualenv>/var/instance/``. Can be overwritten using the environment variable ``APP_INSTANCE_PATH``. """ static_folder = os.getenv(env_prefix + '_STATIC_FOLDER') or \ os.path.join(instance_path, 'static') """Path to static folder. Defaults to ``<virtualenv>/var/instance/static/``. Can be overwritten using the environment variable ``APP_STATIC_FOLDER`` """ create_api = create_app_factory( 'zenodo', config_loader=conf_loader, extension_entry_points=['invenio_base.api_apps'], blueprint_entry_points=['invenio_base.api_blueprints'], instance_path=instance_path, ) """Create Flask API application.""" create_app = create_app_factory( 'zenodo', config_loader=conf_loader, extension_entry_points=['invenio_base.apps'], blueprint_entry_points=['invenio_base.blueprints'], wsgi_factory=create_wsgi_factory({'/api': create_api}), instance_path=instance_path, static_folder=static_folder, ) """Create Flask UI application."""
Defaults to ``<env_prefix>_INSTANCE_PATH`` or if environment variable is not set ``<sys.prefix>/var/<app_name>-instance``. """ static_folder = os.getenv(env_prefix + '_STATIC_FOLDER') or \ os.path.join(instance_path, 'static') """Static folder path. Defaults to ``<env_prefix>_STATIC_FOLDER`` or if environment variable is not set ``<sys.prefix>/var/<app_name>-instance/static``. """ create_api = create_app_factory( 'scoap3', config_loader=config_loader, blueprint_entry_points=['invenio_base.api_blueprints'], extension_entry_points=['invenio_base.api_apps'], converter_entry_points=['invenio_base.api_converters'], instance_path=instance_path, ) create_app = create_app_factory( 'scoap3', config_loader=config_loader, blueprint_entry_points=['invenio_base.blueprints'], extension_entry_points=['invenio_base.apps'], converter_entry_points=['invenio_base.converters'], wsgi_factory=create_wsgi_factory({'/api': create_api}), instance_path=instance_path, static_folder=static_folder, )
# Add Host header validation via APP_ALLOWED_HOSTS configuration variable. class Request(TrustedHostsMixin, FlaskBase.request_class): pass class Flask(FlaskBase): request_class = Request return Flask create_api = create_app_factory( 'invenio', config_loader=config_loader, blueprint_entry_points=['invenio_base.api_blueprints'], extension_entry_points=['invenio_base.api_apps'], converter_entry_points=['invenio_base.api_converters'], wsgi_factory=wsgi_proxyfix(), instance_path=instance_path, root_path=instance_path, app_class=app_class(), ) """Flask application factory for Invenio REST API.""" create_ui = create_app_factory( 'invenio', config_loader=config_loader, blueprint_entry_points=['invenio_base.blueprints'], extension_entry_points=['invenio_base.apps'], converter_entry_points=['invenio_base.converters'], wsgi_factory=wsgi_proxyfix(), instance_path=instance_path,
"""Static folder path. Defaults to ``<env_prefix>_STATIC_FOLDER`` or if environment variable is not set ``<sys.prefix>/var/<app_name>-instance/static``. """ return os.getenv(env_prefix + "_STATIC_FOLDER") or os.path.join( instance_path(), "static") # sphinxdoc-example-paths-end # sphinxdoc-example-factories-begin create_api = create_app_factory( "example", config_loader=config_loader, blueprint_entry_points=["invenio_base.api_blueprints"], extension_entry_points=["invenio_base.api_apps"], converter_entry_points=["invenio_base.api_converters"], instance_path=instance_path, ) create_app = create_app_factory( "example", config_loader=config_loader, blueprint_entry_points=["invenio_base.blueprints"], extension_entry_points=["invenio_base.apps"], converter_entry_points=["invenio_base.converters"], wsgi_factory=create_wsgi_factory({"/api": create_api}), instance_path=instance_path, static_folder=static_folder, ) # sphinxdoc-example-factories-end
Defaults to ``<env_prefix>_INSTANCE_PATH`` or if environment variable is not set ``<sys.prefix>/var/<app_name>-instance``. """ static_folder = os.getenv(env_prefix + '_STATIC_FOLDER') or \ os.path.join(instance_path, 'static') """Static folder path. Defaults to ``<env_prefix>_STATIC_FOLDER`` or if environment variable is not set ``<sys.prefix>/var/<app_name>-instance/static``. """ create_api = create_app_factory( 'cernopendata', config_loader=config_loader, blueprint_entry_points=['invenio_base.api_blueprints'], extension_entry_points=['invenio_base.api_apps'], converter_entry_points=['invenio_base.api_converters'], instance_path=instance_path, ) create_app = create_app_factory( 'cernopendata', config_loader=config_loader, blueprint_entry_points=['invenio_base.blueprints'], extension_entry_points=['invenio_base.apps'], converter_entry_points=['invenio_base.converters'], wsgi_factory=create_wsgi_factory({'/api': create_api}), instance_path=instance_path, static_folder=static_folder, )
set ``<sys.prefix>/var/<app_name>-instance``. """ static_folder = os.getenv(env_prefix + '_STATIC_FOLDER') or \ os.path.join(instance_path, 'static') """Static folder path. Defaults to ``<env_prefix>_STATIC_FOLDER`` or if environment variable is not set ``<sys.prefix>/var/<app_name>-instance/static``. """ create_api = create_app_factory( 'cap', config_loader=conf_loader, blueprint_entry_points=['invenio_base.api_blueprints'], extension_entry_points=['invenio_base.api_apps'], converter_entry_points=['invenio_base.api_converters'], instance_path=instance_path, static_folder=static_folder, ) # create_app = create_app_factory( # 'cap', # config_loader=conf_loader, # blueprint_entry_points=['invenio_base.blueprints'], # extension_entry_points=['invenio_base.apps'], # instance_path=instance_path, # static_folder=static_folder, # )
port = app.config.get('STATSD_PORT', 8125) prefix = app.config.get('STATSD_PREFIX') if host and port and prefix: client = StatsClient(prefix=prefix, host=host, port=port) return StatsdTimingMiddleware(application, client) return application return create_wsgi create_celery = create_app_factory( 'zenodo', config_loader=conf_loader, extension_entry_points=['invenio_base.apps'], blueprint_entry_points=['invenio_base.blueprints'], converter_entry_points=['invenio_base.converters'], instance_path=instance_path, static_folder=static_folder, ) """Create CLI/Celery application.""" create_api = create_app_factory( 'zenodo', config_loader=conf_loader, extension_entry_points=['invenio_base.api_apps'], blueprint_entry_points=['invenio_base.api_blueprints'], converter_entry_points=['invenio_base.api_converters'], instance_path=instance_path, app_class=Flask, )
Defaults to ``<virtualenv>/var/zenodo-instance/``. Can be overwritten using the environment variable ``APP_INSTANCE_PATH``. """ static_folder = os.getenv(env_prefix + "_STATIC_FOLDER") or os.path.join(instance_path, "static") """Path to static folder. Defaults to ``<virtualenv>/var/zenodo-instance/static/``. Can be overwritten using the environment variable ``APP_STATIC_FOLDER`` """ create_api = create_app_factory( "zenodo", config_loader=conf_loader, extension_entry_points=["invenio_base.api_apps"], blueprint_entry_points=["invenio_base.api_blueprints"], instance_path=instance_path, ) """Create Flask API application.""" create_app = create_app_factory( "zenodo", config_loader=conf_loader, extension_entry_points=["invenio_base.apps"], blueprint_entry_points=["invenio_base.blueprints"], wsgi_factory=create_wsgi_factory({"/api": create_api}), instance_path=instance_path, static_folder=static_folder, ) """Create Flask UI application."""
env_prefix = "INVENIO" def config_loader(app, **kwargs_config): invenio_config_loader = create_config_loader(config=config, env_prefix=env_prefix) result = invenio_config_loader(app, **kwargs_config) app.url_map.strict_slashes = False return result create_api = create_app_factory( "inspirehep_api", config_loader=config_loader, blueprint_entry_points=["invenio_base.api_blueprints"], extension_entry_points=["invenio_base.api_apps"], converter_entry_points=["invenio_base.api_converters"], wsgi_factory=wsgi_proxyfix(), instance_path=instance_path, app_class=app_class(), ) """Flask application factory for Invenio REST API.""" create_app = create_app_factory( "inspirehep", config_loader=config_loader, blueprint_entry_points=["invenio_base.api_blueprints"], extension_entry_points=["invenio_base.api_apps"], converter_entry_points=["invenio_base.api_converters"], wsgi_factory=create_wsgi_factory({"/api": create_api}), instance_path=instance_path,
host = app.config.get('STATSD_HOST') port = app.config.get('STATSD_PORT', 8125) prefix = app.config.get('STATSD_PREFIX') if host and port and prefix: client = StatsClient(prefix=prefix, host=host, port=port) return StatsdTimingMiddleware(application, client) return application return create_wsgi create_celery = create_app_factory( 'zenodo', config_loader=conf_loader, extension_entry_points=['invenio_base.apps'], blueprint_entry_points=['invenio_base.blueprints'], converter_entry_points=['invenio_base.converters'], instance_path=instance_path, static_folder=static_folder, ) """Create CLI/Celery application.""" create_api = create_app_factory( 'zenodo', config_loader=conf_loader, extension_entry_points=['invenio_base.api_apps'], blueprint_entry_points=['invenio_base.api_blueprints'], converter_entry_points=['invenio_base.api_converters'], instance_path=instance_path, ) """Create Flask API application."""
def test_create_app_debug_flag(): """Test debug flag propagation (needed by CLI).""" create_app = create_app_factory('test') assert create_app().debug is False assert create_app(debug=True).debug is True
local_templates_path = os.path.join(app.instance_path, 'templates') if os.path.exists(local_templates_path): # Let's customize the template loader to look into packages # and application templates folders. app.jinja_loader = ChoiceLoader([ FileSystemLoader(local_templates_path), app.jinja_loader, ]) app.jinja_options = dict( app.jinja_options, cache_size=1000, bytecode_cache=BytecodeCache(app) ) app.url_map.strict_slashes = False invenio_config_loader(app, **kwargs_config) create_api = create_app_factory( 'invenio', config_loader=config_loader, blueprint_entry_points=['invenio_base.api_blueprints'], extension_entry_points=['invenio_base.api_apps'], converter_entry_points=['invenio_base.api_converters'], wsgi_factory=wsgi_proxyfix(), instance_path=instance_path, app_class=app_class(), ) """Flask application factory for Invenio REST API."""
set ``<sys.prefix>/var/<app_name>-instance``. """ static_folder = os.getenv(env_prefix + '_STATIC_FOLDER') or \ os.path.join(instance_path, 'static') """Static folder path. Defaults to ``<env_prefix>_STATIC_FOLDER`` or if environment variable is not set ``<sys.prefix>/var/<app_name>-instance/static``. """ create_api = create_app_factory( 'cap', config_loader=conf_loader, blueprint_entry_points=['invenio_base.api_blueprints'], extension_entry_points=['invenio_base.api_apps'], converter_entry_points=['invenio_base.api_converters'], instance_path=instance_path, static_folder=static_folder, ) # create_app = create_app_factory( # 'cap', # config_loader=conf_loader, # blueprint_entry_points=['invenio_base.blueprints'], # extension_entry_points=['invenio_base.apps'], # instance_path=instance_path, # static_folder=static_folder, # ) create_front = create_app_factory(