mirror of
https://github.com/fergalmoran/fsai-api.git
synced 2025-12-22 09:18:39 +00:00
143 lines
4.2 KiB
Python
143 lines
4.2 KiB
Python
import os
|
|
import sys
|
|
|
|
from raygun4py.middleware import flask as flask_raygun
|
|
|
|
PYTHON_VERSION = sys.version_info[0]
|
|
if PYTHON_VERSION == 3:
|
|
import urllib.parse
|
|
else:
|
|
import urlparse
|
|
|
|
basedir = os.path.abspath(os.path.dirname(__file__))
|
|
|
|
if os.path.exists('config.env'):
|
|
print('Importing environment from .env file')
|
|
for line in open('config.env'):
|
|
var = line.strip().split('=')
|
|
if len(var) == 2:
|
|
os.environ[var[0]] = var[1].replace("\"", "")
|
|
|
|
|
|
class Config:
|
|
APP_NAME = os.environ.get('APP_NAME', 'Flask-Base')
|
|
|
|
if os.environ.get('SECRET_KEY'):
|
|
SECRET_KEY = os.environ.get('SECRET_KEY')
|
|
else:
|
|
SECRET_KEY = 'SECRET_KEY_ENV_VAR_NOT_SET'
|
|
print('SECRET KEY ENV VAR NOT SET! SHOULD NOT SEE IN PRODUCTION')
|
|
SQLALCHEMY_COMMIT_ON_TEARDOWN = True
|
|
|
|
# Email
|
|
MAIL_SERVER = os.environ.get('MAIL_SERVER', 'smtp.sendgrid.net')
|
|
MAIL_PORT = os.environ.get('MAIL_PORT', 587)
|
|
MAIL_USE_TLS = os.environ.get('MAIL_USE_TLS', True)
|
|
MAIL_USE_SSL = os.environ.get('MAIL_USE_SSL', False)
|
|
MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
|
|
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
|
|
MAIL_DEFAULT_SENDER = os.environ.get('MAIL_DEFAULT_SENDER')
|
|
|
|
# Analytics
|
|
GOOGLE_ANALYTICS_ID = os.environ.get('GOOGLE_ANALYTICS_ID', '')
|
|
SEGMENT_API_KEY = os.environ.get('SEGMENT_API_KEY', '')
|
|
|
|
# Admin account
|
|
ADMIN_PASSWORD = os.environ.get('ADMIN_PASSWORD', 'password')
|
|
ADMIN_EMAIL = os.environ.get(
|
|
'ADMIN_EMAIL', 'flask-base-admin@example.com')
|
|
EMAIL_SUBJECT_PREFIX = '[{}]'.format(APP_NAME)
|
|
EMAIL_SENDER = '{app_name} Admin <{email}>'.format(
|
|
app_name=APP_NAME, email=MAIL_USERNAME)
|
|
|
|
REDIS_URL = os.getenv('REDISTOGO_URL', 'http://localhost:6379')
|
|
|
|
RAYGUN_APIKEY = os.environ.get('RAYGUN_APIKEY')
|
|
|
|
# Parse the REDIS_URL to set RQ config variables
|
|
if PYTHON_VERSION == 3:
|
|
urllib.parse.uses_netloc.append('redis')
|
|
url = urllib.parse.urlparse(REDIS_URL)
|
|
else:
|
|
urlparse.uses_netloc.append('redis')
|
|
url = urlparse.urlparse(REDIS_URL)
|
|
|
|
RQ_DEFAULT_HOST = url.hostname
|
|
RQ_DEFAULT_PORT = url.port
|
|
RQ_DEFAULT_PASSWORD = url.password
|
|
RQ_DEFAULT_DB = 0
|
|
|
|
@staticmethod
|
|
def init_app(app):
|
|
pass
|
|
|
|
|
|
class DevelopmentConfig(Config):
|
|
DEBUG = True
|
|
ASSETS_DEBUG = True
|
|
SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL',
|
|
'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite'))
|
|
|
|
@classmethod
|
|
def init_app(cls, app):
|
|
print('THIS APP IS IN DEBUG MODE. \
|
|
YOU SHOULD NOT SEE THIS IN PRODUCTION.')
|
|
|
|
|
|
class TestingConfig(Config):
|
|
TESTING = True
|
|
SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL',
|
|
'sqlite:///' + os.path.join(basedir, 'data-test.sqlite'))
|
|
WTF_CSRF_ENABLED = False
|
|
|
|
@classmethod
|
|
def init_app(cls, app):
|
|
print('THIS APP IS IN TESTING MODE. \
|
|
YOU SHOULD NOT SEE THIS IN PRODUCTION.')
|
|
|
|
|
|
class ProductionConfig(Config):
|
|
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL',
|
|
'sqlite:///' + os.path.join(basedir, 'data.sqlite'))
|
|
SSL_DISABLE = (os.environ.get('SSL_DISABLE', 'True') == 'True')
|
|
|
|
@classmethod
|
|
def init_app(cls, app):
|
|
Config.init_app(app)
|
|
assert os.environ.get('SECRET_KEY'), 'SECRET_KEY IS NOT SET!'
|
|
|
|
flask_raygun.Provider(app, app.config['RAYGUN_APIKEY']).attach()
|
|
|
|
|
|
class HerokuConfig(ProductionConfig):
|
|
@classmethod
|
|
def init_app(cls, app):
|
|
ProductionConfig.init_app(app)
|
|
|
|
# Handle proxy server headers
|
|
from werkzeug.contrib.fixers import ProxyFix
|
|
app.wsgi_app = ProxyFix(app.wsgi_app)
|
|
|
|
|
|
class UnixConfig(ProductionConfig):
|
|
@classmethod
|
|
def init_app(cls, app):
|
|
ProductionConfig.init_app(app)
|
|
|
|
# Log to syslog
|
|
import logging
|
|
from logging.handlers import SysLogHandler
|
|
syslog_handler = SysLogHandler()
|
|
syslog_handler.setLevel(logging.WARNING)
|
|
app.logger.addHandler(syslog_handler)
|
|
|
|
|
|
config = {
|
|
'development': DevelopmentConfig,
|
|
'testing': TestingConfig,
|
|
'production': ProductionConfig,
|
|
'default': DevelopmentConfig,
|
|
'heroku': HerokuConfig,
|
|
'unix': UnixConfig
|
|
}
|