def create_app(): app = Flask(__name__) # Configuration from listenbrainz import config app.config.from_object(config) # Logging from listenbrainz.webserver.loggers import init_loggers init_loggers(app) # Redis connection create_redis(app) # Influx connection create_influx(app) # RabbitMQ connection create_rabbitmq(app) # Database connection from listenbrainz import db db.init_db_connection(app.config['SQLALCHEMY_DATABASE_URI']) from listenbrainz.webserver.external import messybrainz messybrainz.init_db_connection( app.config['MESSYBRAINZ_SQLALCHEMY_DATABASE_URI']) # OAuth from listenbrainz.webserver.login import login_manager, provider login_manager.init_app(app) provider.init(app.config['MUSICBRAINZ_CLIENT_ID'], app.config['MUSICBRAINZ_CLIENT_SECRET']) # Error handling from listenbrainz.webserver.errors import init_error_handlers init_error_handlers(app) from listenbrainz.webserver import rate_limiter @app.after_request def after_request_callbacks(response): return rate_limiter.inject_x_rate_headers(response) # Template utilities app.jinja_env.add_extension('jinja2.ext.do') from listenbrainz.webserver import utils app.jinja_env.filters['date'] = utils.reformat_date app.jinja_env.filters['datetime'] = utils.reformat_datetime _register_blueprints(app) return app
def gen_app(config_path=None, debug=None): """ Generate a Flask app for LB with all configurations done and connections established. In the Flask app returned, blueprints are not registered. """ app = CustomFlask( import_name=__name__, use_flask_uuid=True, ) print("Starting metabrainz service with %s environment." % deploy_env) # Load configuration files: If we're running under a docker deployment, wait until config_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'config.py') if deploy_env: print("Checking if consul template generated config file exists: %s" % config_file) for i in range(CONSUL_CONFIG_FILE_RETRY_COUNT): if not os.path.exists(config_file): sleep(1) if not os.path.exists(config_file): print( "No configuration file generated yet. Retried %d times, exiting." % CONSUL_CONFIG_FILE_RETRY_COUNT) sys.exit(-1) print("loading consul config file %s)" % config_file) app.config.from_pyfile(config_file) else: app.config.from_pyfile(config_file) if debug is not None: app.debug = debug # initialize Flask-DebugToolbar if the debug option is True if app.debug and app.config['SECRET_KEY']: app.init_debug_toolbar() # Output config values and some other info print('Configuration values are as follows: ') print(pprint.pformat(app.config, indent=4)) try: with open('.git-version') as git_version_file: print('Running on git commit: %s', git_version_file.read().strip()) except IOError as e: print('Unable to retrieve git commit. Error: %s', str(e)) # Logging app.init_loggers(file_config=app.config.get('LOG_FILE'), email_config=app.config.get('LOG_EMAIL'), sentry_config=app.config.get('LOG_SENTRY')) # Redis connection create_redis(app) # Influx connection create_influx(app) # RabbitMQ connection create_rabbitmq(app) # Database connection from listenbrainz import db db.init_db_connection(app.config['SQLALCHEMY_DATABASE_URI']) from listenbrainz.webserver.external import messybrainz messybrainz.init_db_connection( app.config['MESSYBRAINZ_SQLALCHEMY_DATABASE_URI']) # OAuth from listenbrainz.webserver.login import login_manager, provider login_manager.init_app(app) provider.init(app.config['MUSICBRAINZ_CLIENT_ID'], app.config['MUSICBRAINZ_CLIENT_SECRET']) # Error handling from listenbrainz.webserver.errors import init_error_handlers init_error_handlers(app) from listenbrainz.webserver import rate_limiter @app.after_request def after_request_callbacks(response): return rate_limiter.inject_x_rate_headers(response) # Template utilities app.jinja_env.add_extension('jinja2.ext.do') from listenbrainz.webserver import utils app.jinja_env.filters['date'] = utils.reformat_date app.jinja_env.filters['datetime'] = utils.reformat_datetime return app
import argparse import json from listenbrainz.webserver import load_config from brainzutils.flask import CustomFlask from listenbrainz.follow_server.dispatcher import FollowDispatcher app = CustomFlask( import_name=__name__, use_flask_uuid=True, ) load_config(app) # Error handling from listenbrainz.webserver.errors import init_error_handlers init_error_handlers(app) # Logging app.init_loggers(file_config=app.config.get('LOG_FILE'), email_config=app.config.get('LOG_EMAIL'), sentry_config=app.config.get('LOG_SENTRY')) socketio = SocketIO(app, cors_allowed_origins='*') @socketio.on('json') def handle_json(data): try: user = data['user'] except KeyError: raise BadRequest("Missing key 'user'")
def gen_app(config_path=None, debug=None): """ Generate a Flask app for LB with all configurations done and connections established. In the Flask app returned, blueprints are not registered. """ app = CustomFlask( import_name=__name__, use_flask_uuid=True, ) load_config(app) if debug is not None: app.debug = debug # initialize Flask-DebugToolbar if the debug option is True if app.debug and app.config['SECRET_KEY']: app.init_debug_toolbar() # Logging app.init_loggers(file_config=app.config.get('LOG_FILE'), email_config=app.config.get('LOG_EMAIL'), sentry_config=app.config.get('LOG_SENTRY')) # Redis connection create_redis(app) # Influx connection create_influx(app) # RabbitMQ connection try: create_rabbitmq(app) except ConnectionError: app.logger.critical("RabbitMQ service is not up!", exc_info=True) # Database connection from listenbrainz import db db.init_db_connection(app.config['SQLALCHEMY_DATABASE_URI']) from listenbrainz.webserver.external import messybrainz messybrainz.init_db_connection( app.config['MESSYBRAINZ_SQLALCHEMY_DATABASE_URI']) if app.config['MB_DATABASE_URI']: from brainzutils import musicbrainz_db musicbrainz_db.init_db_engine(app.config['MB_DATABASE_URI']) # OAuth from listenbrainz.webserver.login import login_manager, provider login_manager.init_app(app) provider.init(app.config['MUSICBRAINZ_CLIENT_ID'], app.config['MUSICBRAINZ_CLIENT_SECRET']) # Error handling from listenbrainz.webserver.errors import init_error_handlers init_error_handlers(app) from listenbrainz.webserver import rate_limiter @app.after_request def after_request_callbacks(response): return rate_limiter.inject_x_rate_headers(response) # Template utilities app.jinja_env.add_extension('jinja2.ext.do') from listenbrainz.webserver import utils app.jinja_env.filters['date'] = utils.reformat_date app.jinja_env.filters['datetime'] = utils.reformat_datetime return app
def create_app(debug=None): """ Generate a Flask app for LB with all configurations done and connections established. In the Flask app returned, blueprints are not registered. """ app = CustomFlask( import_name=__name__, use_flask_uuid=True, ) load_config(app) if debug is not None: app.debug = debug # As early as possible, if debug is True, set the log level of our 'listenbrainz' logger to DEBUG # to prevent flask from creating a new log handler if app.debug: logger = logging.getLogger('listenbrainz') logger.setLevel(logging.DEBUG) # initialize Flask-DebugToolbar if the debug option is True if app.debug and app.config['SECRET_KEY']: app.init_debug_toolbar() sentry_config = app.config.get('LOG_SENTRY') if sentry_config: sentry.init_sentry(**sentry_config) # Initialize BU cache and metrics cache.init(host=app.config['REDIS_HOST'], port=app.config['REDIS_PORT'], namespace=app.config['REDIS_NAMESPACE']) metrics.init("listenbrainz") # Database connections from listenbrainz import db from listenbrainz.db import timescale as ts from listenbrainz import messybrainz as msb db.init_db_connection(app.config['SQLALCHEMY_DATABASE_URI']) ts.init_db_connection(app.config['SQLALCHEMY_TIMESCALE_URI']) msb.init_db_connection(app.config['MESSYBRAINZ_SQLALCHEMY_DATABASE_URI']) # Redis connection from listenbrainz.webserver.redis_connection import init_redis_connection init_redis_connection(app.logger) # Timescale connection from listenbrainz.webserver.timescale_connection import init_timescale_connection init_timescale_connection(app) # RabbitMQ connection from listenbrainz.webserver.rabbitmq_connection import init_rabbitmq_connection try: init_rabbitmq_connection(app) except ConnectionError: app.logger.critical("RabbitMQ service is not up!", exc_info=True) if app.config['MB_DATABASE_URI']: from brainzutils import musicbrainz_db musicbrainz_db.init_db_engine(app.config['MB_DATABASE_URI']) # OAuth from listenbrainz.webserver.login import login_manager, provider login_manager.init_app(app) provider.init(app.config['MUSICBRAINZ_CLIENT_ID'], app.config['MUSICBRAINZ_CLIENT_SECRET']) # Error handling from listenbrainz.webserver.errors import init_error_handlers init_error_handlers(app) from brainzutils.ratelimit import inject_x_rate_headers, set_user_validation_function set_user_validation_function(check_ratelimit_token_whitelist) @app.after_request def after_request_callbacks(response): return inject_x_rate_headers(response) # Template utilities app.jinja_env.add_extension('jinja2.ext.do') from listenbrainz.webserver import utils app.jinja_env.filters['date'] = utils.reformat_date app.jinja_env.filters['datetime'] = utils.reformat_datetime return app