def create_app(debug=None, config_path=None): app = CustomFlask( import_name=__name__, use_flask_uuid=True, ) print("Starting metabrainz service with %s environment." % deploy_env) # Now load other bits of configuration print("loading %s" % os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'default_config.py')) app.config.from_pyfile( os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'default_config.py')) print("loading %s" % os.path.join( os.path.dirname(os.path.realpath(__file__)), '..', 'custom_config.py')) app.config.from_pyfile(os.path.join( os.path.dirname(os.path.realpath(__file__)), '..', 'custom_config.py'), silent=True) if config_path: print("loading custom %s" % config_path) app.config.from_pyfile(config_path) # Load configuration files: If we're running under a docker deployment, wait until # the consul configuration is available. if deploy_env: consul_config = os.path.join( os.path.dirname(os.path.realpath(__file__)), '..', 'consul_config.py') print("loading consul %s" % consul_config) for i in range(CONSUL_CONFIG_FILE_RETRY_COUNT): if not os.path.exists(consul_config): sleep(1) if not os.path.exists(consul_config): print( "No configuration file generated yet. Retried %d times, exiting." % CONSUL_CONFIG_FILE_RETRY_COUNT) sys.exit(-1) app.config.from_pyfile(consul_config, silent=True) if debug is not None: app.debug = debug if app.debug and app.config['SECRET_KEY']: app.init_debug_toolbar() # Printing out some debug values such as config and git commit try: with open(".git-version") as f: git_version = f.read() print('Running on git commit %s' % git_version.strip()) except IOError: print( "Unable to retrieve git commit. Use docker/push.sh to push images for production." ) print('Configuration values are as follows: ') print(pprint.pformat(app.config, indent=4)) app.init_loggers( file_config=app.config.get('LOG_FILE'), email_config=app.config.get('LOG_EMAIL'), sentry_config=app.config.get('LOG_SENTRY'), ) # Database from metabrainz import db db.init_db_engine(app.config["SQLALCHEMY_DATABASE_URI"]) from metabrainz import model model.db.init_app(app) # Redis (cache) from brainzutils import cache cache.init(**app.config['REDIS']) # MusicBrainz OAuth from metabrainz.users import login_manager, musicbrainz_login login_manager.init_app(app) musicbrainz_login.init(app.config['MUSICBRAINZ_BASE_URL'], app.config['MUSICBRAINZ_CLIENT_ID'], app.config['MUSICBRAINZ_CLIENT_SECRET']) # Templates from metabrainz.utils import reformat_datetime app.jinja_env.filters['datetime'] = reformat_datetime app.jinja_env.filters['nl2br'] = lambda val: val.replace('\n', '<br />' ) if val else '' # Error handling from metabrainz.errors import init_error_handlers init_error_handlers(app) add_robots(app) from metabrainz import babel babel.init_app(app) from flask_uploads import configure_uploads from metabrainz.admin.forms import LOGO_UPLOAD_SET configure_uploads(app, upload_sets=[ LOGO_UPLOAD_SET, ]) # Blueprints _register_blueprints(app) # ADMIN SECTION from flask_admin import Admin from metabrainz.admin.views import HomeView admin = Admin(app, index_view=HomeView(name='Pending users'), template_mode='bootstrap3') # Models from metabrainz.model.user import UserAdminView from metabrainz.model.payment import PaymentAdminView from metabrainz.model.tier import TierAdminView admin.add_view( UserAdminView(model.db.session, category='Users', endpoint="user_model")) admin.add_view( PaymentAdminView(model.db.session, category='Payments', endpoint="payment_model")) admin.add_view(TierAdminView(model.db.session, endpoint="tier_model")) # Custom stuff from metabrainz.admin.views import CommercialUsersView from metabrainz.admin.views import UsersView from metabrainz.admin.views import PaymentsView from metabrainz.admin.views import TokensView from metabrainz.admin.views import StatsView admin.add_view( CommercialUsersView(name='Commercial users', category='Users')) admin.add_view(UsersView(name='Search', category='Users')) admin.add_view(PaymentsView(name='All', category='Payments')) admin.add_view(TokensView(name='Access tokens', category='Users')) admin.add_view(StatsView(name='Statistics')) return app
def create_app(): app = Flask(__name__) # Configuration app.config.from_object('metabrainz.default_config') app.config.from_object('metabrainz.config') # Logging from metabrainz import loggers loggers.init_loggers(app) if app.debug: # Debug toolbar from flask_debugtoolbar import DebugToolbarExtension DebugToolbarExtension(app) app.config['DEBUG_TB_TEMPLATE_EDITOR_ENABLED'] = True # Database from metabrainz import db db.init_db_engine(app.config["SQLALCHEMY_DATABASE_URI"]) from metabrainz import model model.db.init_app(app) # Memcached if 'MEMCACHED_SERVERS' in app.config: from metabrainz import cache cache.init(app.config['MEMCACHED_SERVERS'], app.config['MEMCACHED_NAMESPACE'], debug=1 if app.debug else 0) # MusicBrainz OAuth from metabrainz.users import login_manager, musicbrainz_login login_manager.init_app(app) musicbrainz_login.init( app.config['MUSICBRAINZ_BASE_URL'], app.config['MUSICBRAINZ_CLIENT_ID'], app.config['MUSICBRAINZ_CLIENT_SECRET'] ) # Templates from metabrainz.utils import reformat_datetime app.jinja_env.filters['datetime'] = reformat_datetime app.jinja_env.filters['nl2br'] = lambda val: val.replace('\n', '<br />') if val else '' # Error handling from metabrainz.errors import init_error_handlers init_error_handlers(app) add_robots(app) # Blueprints _register_blueprints(app) # ADMIN SECTION from flask_admin import Admin from metabrainz.admin.views import HomeView admin = Admin(app, index_view=HomeView(name='Pending users')) # Models from metabrainz.model.user import UserAdminView from metabrainz.model.payment import PaymentAdminView from metabrainz.model.tier import TierAdminView admin.add_view(UserAdminView(model.db.session, category='Users', endpoint="user_model")) admin.add_view(PaymentAdminView(model.db.session, endpoint="donation_model")) admin.add_view(TierAdminView(model.db.session, endpoint="tier_model")) # Custom stuff from metabrainz.admin.views import CommercialUsersView from metabrainz.admin.views import UsersView from metabrainz.admin.views import TokensView from metabrainz.admin.views import StatsView admin.add_view(CommercialUsersView(name='Commercial users', category='Users')) admin.add_view(UsersView(name='Search', category='Users')) admin.add_view(TokensView(name='Access tokens', category='Users')) admin.add_view(StatsView(name='Statistics')) return app
def create_app(config_path=None): app = CustomFlask( import_name=__name__, use_flask_uuid=True, use_debug_toolbar=True, ) # Configuration files app.config.from_pyfile( os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'default_config.py')) app.config.from_pyfile(os.path.join( os.path.dirname(os.path.realpath(__file__)), '..', 'consul_config.py'), silent=True) app.config.from_pyfile(os.path.join( os.path.dirname(os.path.realpath(__file__)), '..', 'custom_config.py'), silent=True) if config_path: app.config.from_pyfile(config_path) app.init_loggers( file_config=app.config.get('LOG_FILE'), email_config=app.config.get('LOG_EMAIL'), sentry_config=app.config.get('LOG_SENTRY'), ) # Database from metabrainz import db db.init_db_engine(app.config["SQLALCHEMY_DATABASE_URI"]) from metabrainz import model model.db.init_app(app) # Redis (cache) from brainzutils import cache cache.init(**app.config['REDIS']) # MusicBrainz OAuth from metabrainz.users import login_manager, musicbrainz_login login_manager.init_app(app) musicbrainz_login.init(app.config['MUSICBRAINZ_BASE_URL'], app.config['MUSICBRAINZ_CLIENT_ID'], app.config['MUSICBRAINZ_CLIENT_SECRET']) # Templates from metabrainz.utils import reformat_datetime app.jinja_env.filters['datetime'] = reformat_datetime app.jinja_env.filters['nl2br'] = lambda val: val.replace('\n', '<br />' ) if val else '' # Error handling from metabrainz.errors import init_error_handlers init_error_handlers(app) add_robots(app) from metabrainz import babel babel.init_app(app) from flask_uploads import configure_uploads from metabrainz.admin.forms import LOGO_UPLOAD_SET configure_uploads(app, upload_sets=[ LOGO_UPLOAD_SET, ]) # Blueprints _register_blueprints(app) # ADMIN SECTION from flask_admin import Admin from metabrainz.admin.views import HomeView admin = Admin(app, index_view=HomeView(name='Pending users'), template_mode='bootstrap3') # Models from metabrainz.model.user import UserAdminView from metabrainz.model.payment import PaymentAdminView from metabrainz.model.tier import TierAdminView admin.add_view( UserAdminView(model.db.session, category='Users', endpoint="user_model")) admin.add_view( PaymentAdminView(model.db.session, category='Payments', endpoint="payment_model")) admin.add_view(TierAdminView(model.db.session, endpoint="tier_model")) # Custom stuff from metabrainz.admin.views import CommercialUsersView from metabrainz.admin.views import UsersView from metabrainz.admin.views import PaymentsView from metabrainz.admin.views import TokensView from metabrainz.admin.views import StatsView admin.add_view( CommercialUsersView(name='Commercial users', category='Users')) admin.add_view(UsersView(name='Search', category='Users')) admin.add_view(PaymentsView(name='All', category='Payments')) admin.add_view(TokensView(name='Access tokens', category='Users')) admin.add_view(StatsView(name='Statistics')) return app
def create_app(): app = Flask(__name__) # Configuration app.config.from_object('metabrainz.default_config') app.config.from_object('metabrainz.config') # Logging from metabrainz import loggers loggers.init_loggers(app) if app.debug: # Debug toolbar from flask_debugtoolbar import DebugToolbarExtension DebugToolbarExtension(app) app.config['DEBUG_TB_TEMPLATE_EDITOR_ENABLED'] = True # Database from metabrainz import db db.init_db_engine(app.config["SQLALCHEMY_DATABASE_URI"]) from metabrainz import model model.db.init_app(app) # Memcached if 'MEMCACHED_SERVERS' in app.config: from metabrainz import cache cache.init(app.config['MEMCACHED_SERVERS'], app.config['MEMCACHED_NAMESPACE'], debug=1 if app.debug else 0) # MusicBrainz OAuth from metabrainz.users import login_manager, musicbrainz_login login_manager.init_app(app) musicbrainz_login.init(app.config['MUSICBRAINZ_BASE_URL'], app.config['MUSICBRAINZ_CLIENT_ID'], app.config['MUSICBRAINZ_CLIENT_SECRET']) # Templates from metabrainz.utils import reformat_datetime app.jinja_env.filters['datetime'] = reformat_datetime app.jinja_env.filters['nl2br'] = lambda val: val.replace('\n', '<br />' ) if val else '' # Error handling from metabrainz.errors import init_error_handlers init_error_handlers(app) add_robots(app) # Blueprints _register_blueprints(app) # ADMIN SECTION from flask_admin import Admin from metabrainz.admin.views import HomeView admin = Admin(app, index_view=HomeView(name='Pending users')) # Models from metabrainz.model.user import UserAdminView from metabrainz.model.payment import PaymentAdminView from metabrainz.model.tier import TierAdminView admin.add_view( UserAdminView(model.db.session, category='Users', endpoint="user_model")) admin.add_view( PaymentAdminView(model.db.session, endpoint="donation_model")) admin.add_view(TierAdminView(model.db.session, endpoint="tier_model")) # Custom stuff from metabrainz.admin.views import CommercialUsersView from metabrainz.admin.views import UsersView from metabrainz.admin.views import TokensView from metabrainz.admin.views import StatsView admin.add_view( CommercialUsersView(name='Commercial users', category='Users')) admin.add_view(UsersView(name='Search', category='Users')) admin.add_view(TokensView(name='Access tokens', category='Users')) admin.add_view(StatsView(name='Statistics')) return app
def create_app(config_path=None): app = CustomFlask( import_name=__name__, use_flask_uuid=True, use_debug_toolbar=True, ) # Configuration files app.config.from_pyfile(os.path.join( os.path.dirname(os.path.realpath(__file__)), '..', 'default_config.py' )) app.config.from_pyfile(os.path.join( os.path.dirname(os.path.realpath(__file__)), '..', 'consul_config.py' ), silent=True) app.config.from_pyfile(os.path.join( os.path.dirname(os.path.realpath(__file__)), '..', 'custom_config.py' ), silent=True) if config_path: app.config.from_pyfile(config_path) app.init_loggers( file_config=app.config.get('LOG_FILE'), email_config=app.config.get('LOG_EMAIL'), sentry_config=app.config.get('LOG_SENTRY'), ) # Database from metabrainz import db db.init_db_engine(app.config["SQLALCHEMY_DATABASE_URI"]) from metabrainz import model model.db.init_app(app) # Redis (cache) from brainzutils import cache cache.init(**app.config['REDIS']) # MusicBrainz OAuth from metabrainz.users import login_manager, musicbrainz_login login_manager.init_app(app) musicbrainz_login.init( app.config['MUSICBRAINZ_BASE_URL'], app.config['MUSICBRAINZ_CLIENT_ID'], app.config['MUSICBRAINZ_CLIENT_SECRET'] ) # Templates from metabrainz.utils import reformat_datetime app.jinja_env.filters['datetime'] = reformat_datetime app.jinja_env.filters['nl2br'] = lambda val: val.replace('\n', '<br />') if val else '' # Error handling from metabrainz.errors import init_error_handlers init_error_handlers(app) add_robots(app) # Blueprints _register_blueprints(app) # ADMIN SECTION from flask_admin import Admin from metabrainz.admin.views import HomeView admin = Admin(app, index_view=HomeView(name='Pending users')) # Models from metabrainz.model.user import UserAdminView from metabrainz.model.payment import PaymentAdminView from metabrainz.model.tier import TierAdminView admin.add_view(UserAdminView(model.db.session, category='Users', endpoint="user_model")) admin.add_view(PaymentAdminView(model.db.session, endpoint="donation_model")) admin.add_view(TierAdminView(model.db.session, endpoint="tier_model")) # Custom stuff from metabrainz.admin.views import CommercialUsersView from metabrainz.admin.views import UsersView from metabrainz.admin.views import TokensView from metabrainz.admin.views import StatsView admin.add_view(CommercialUsersView(name='Commercial users', category='Users')) admin.add_view(UsersView(name='Search', category='Users')) admin.add_view(TokensView(name='Access tokens', category='Users')) admin.add_view(StatsView(name='Statistics')) return app
def create_app(): app = Flask(__name__) # Configuration app.config.from_object('metabrainz.default_config') app.config.from_object('metabrainz.config') # Logging from metabrainz import loggers loggers.init_loggers(app) if app.debug: # Debug toolbar from flask_debugtoolbar import DebugToolbarExtension DebugToolbarExtension(app) app.config['DEBUG_TB_TEMPLATE_EDITOR_ENABLED'] = True # Database from metabrainz.model import db db.init_app(app) # Memcached if 'MEMCACHED_SERVERS' in app.config: from metabrainz import cache cache.init(app.config['MEMCACHED_SERVERS'], app.config['MEMCACHED_NAMESPACE'], debug=1 if app.debug else 0) # MusicBrainz OAuth from metabrainz.users import login_manager, musicbrainz_login login_manager.init_app(app) musicbrainz_login.init( app.config['MUSICBRAINZ_BASE_URL'], app.config['MUSICBRAINZ_CLIENT_ID'], app.config['MUSICBRAINZ_CLIENT_SECRET'] ) # Templates from metabrainz.utils import reformat_datetime app.jinja_env.filters['datetime'] = reformat_datetime app.jinja_env.filters['nl2br'] = lambda val: val.replace('\n', '<br />') if val else '' # Error handling from metabrainz.errors import init_error_handlers init_error_handlers(app) # Blueprints from metabrainz.views import index_bp from metabrainz.reports.financial_reports.views import financial_reports_bp from metabrainz.reports.annual_reports.views import annual_reports_bp from metabrainz.users.views import users_bp from metabrainz.donations.views import donations_bp from metabrainz.donations.paypal.views import donations_paypal_bp from metabrainz.donations.wepay.views import donations_wepay_bp from metabrainz.donations.stripe.views import donations_stripe_bp from metabrainz.api.views import api_bp app.register_blueprint(index_bp) app.register_blueprint(financial_reports_bp, url_prefix='/finances') app.register_blueprint(annual_reports_bp, url_prefix='/reports') app.register_blueprint(users_bp) app.register_blueprint(donations_bp) app.register_blueprint(donations_paypal_bp, url_prefix='/donations/paypal') app.register_blueprint(donations_wepay_bp, url_prefix='/donations/wepay') app.register_blueprint(donations_stripe_bp, url_prefix='/donations/stripe') app.register_blueprint(api_bp, url_prefix='/api') # ADMIN SECTION from flask_admin import Admin from metabrainz.admin.views import HomeView admin = Admin(app, index_view=HomeView(name='Pending users')) # Models from metabrainz.model.user import UserAdminView from metabrainz.model.donation import DonationAdminView from metabrainz.model.tier import TierAdminView admin.add_view(UserAdminView(db.session, category='Users', endpoint="user_model")) admin.add_view(DonationAdminView(db.session, endpoint="donation_model")) admin.add_view(TierAdminView(db.session, endpoint="tier_model")) # Custom stuff from metabrainz.admin.views import CommercialUsersView from metabrainz.admin.views import UsersView from metabrainz.admin.views import TokensView from metabrainz.admin.views import StatsView admin.add_view(CommercialUsersView(name='Commercial users', category='Users')) admin.add_view(UsersView(name='Search', category='Users')) admin.add_view(TokensView(name='Access tokens', category='Users')) admin.add_view(StatsView(name='Statistics')) return app
def create_app(debug=None, config_path = None): app = CustomFlask( import_name=__name__, use_flask_uuid=True, ) # get rid of some really pesky warning. Remove this in April 2020, when it shouldn't be needed anymore. app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True print("Starting metabrainz service with %s environment." % deploy_env); # This is used to run tests, but not for dev or deployment if config_path: print("loading %s" % config_path) app.config.from_pyfile(config_path) else: print("loading %s" % os.path.join( os.path.dirname(os.path.realpath(__file__)), '..', 'config.py')) app.config.from_pyfile(os.path.join( os.path.dirname(os.path.realpath(__file__)), '..', 'config.py' )) # Load configuration files: If we're running under a docker deployment, wait until # the consul configuration is available. if deploy_env: consul_config = os.path.join( os.path.dirname(os.path.realpath(__file__)), '..', 'consul_config.py') print("loading consul %s" % consul_config) for i in range(CONSUL_CONFIG_FILE_RETRY_COUNT): if not os.path.exists(consul_config): sleep(1) if not os.path.exists(consul_config): print("No configuration file generated yet. Retried %d times, exiting." % CONSUL_CONFIG_FILE_RETRY_COUNT); sys.exit(-1) app.config.from_pyfile(consul_config, silent=True) if debug is not None: app.debug = debug if app.debug and app.config['SECRET_KEY']: app.init_debug_toolbar() # Printing out some debug values such as config and git commit try: with open(".git-version") as f: git_version = f.read() print('Running on git commit %s' % git_version.strip()) except IOError: print("Unable to retrieve git commit. Use docker/push.sh to push images for production.") print('Configuration values are as follows: ') print(pprint.pformat(app.config, indent=4)) app.init_loggers( file_config=app.config.get('LOG_FILE'), email_config=app.config.get('LOG_EMAIL'), sentry_config=app.config.get('LOG_SENTRY'), ) # Database from metabrainz import db db.init_db_engine(app.config["SQLALCHEMY_DATABASE_URI"]) from metabrainz import model model.db.init_app(app) # Redis (cache) from brainzutils import cache cache.init(**app.config['REDIS']) # MusicBrainz OAuth from metabrainz.users import login_manager, musicbrainz_login login_manager.init_app(app) musicbrainz_login.init( app.config['MUSICBRAINZ_BASE_URL'], app.config['MUSICBRAINZ_CLIENT_ID'], app.config['MUSICBRAINZ_CLIENT_SECRET'] ) # Templates from metabrainz.utils import reformat_datetime app.jinja_env.filters['datetime'] = reformat_datetime app.jinja_env.filters['nl2br'] = lambda val: val.replace('\n', '<br />') if val else '' # Error handling from metabrainz.errors import init_error_handlers init_error_handlers(app) add_robots(app) from metabrainz import babel babel.init_app(app) from flask_uploads import configure_uploads from metabrainz.admin.forms import LOGO_UPLOAD_SET configure_uploads(app, upload_sets=[ LOGO_UPLOAD_SET, ]) # Blueprints _register_blueprints(app) # ADMIN SECTION from flask_admin import Admin from metabrainz.admin.views import HomeView admin = Admin(app, index_view=HomeView(name='Pending users'), template_mode='bootstrap3') # Models from metabrainz.model.user import UserAdminView from metabrainz.model.payment import PaymentAdminView from metabrainz.model.tier import TierAdminView admin.add_view(UserAdminView(model.db.session, category='Users', endpoint="user_model")) admin.add_view(PaymentAdminView(model.db.session, category='Payments', endpoint="payment_model")) admin.add_view(TierAdminView(model.db.session, endpoint="tier_model")) # Custom stuff from metabrainz.admin.views import CommercialUsersView from metabrainz.admin.views import UsersView from metabrainz.admin.views import PaymentsView from metabrainz.admin.views import TokensView from metabrainz.admin.views import StatsView admin.add_view(CommercialUsersView(name='Commercial users', category='Users')) admin.add_view(UsersView(name='Search', category='Users')) admin.add_view(PaymentsView(name='All', category='Payments')) admin.add_view(TokensView(name='Access tokens', category='Users')) admin.add_view(StatsView(name='Statistics', category='Statistics')) admin.add_view(StatsView(name='Top IPs', endpoint="statsview/top-ips", category='Statistics')) admin.add_view(StatsView(name='Top Tokens', endpoint="statsview/top-tokens", category='Statistics')) return app