From 9a7788a6f5b04051442ae50e8490d31249be771c Mon Sep 17 00:00:00 2001 From: Martyn Inglis Date: Thu, 17 Mar 2016 11:47:44 +0000 Subject: [PATCH 1/2] Allowing overrides on a per environment basis --- app/__init__.py | 1 + aws_run_celery.py | 10 ++++++++++ config.py | 6 ++++++ config_live.py | 16 ++++++++++++++++ config_staging.py | 16 ++++++++++++++++ wsgi.py | 13 ++++++++++++- 6 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 config_live.py create mode 100644 config_staging.py diff --git a/app/__init__.py b/app/__init__.py index 28508cb1f..f34177786 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -31,6 +31,7 @@ def create_app(app_name=None): application = Flask(__name__) application.config.from_object(os.environ['NOTIFY_API_ENVIRONMENT']) + if app_name: application.config['NOTIFY_APP_NAME'] = app_name diff --git a/aws_run_celery.py b/aws_run_celery.py index 814e07f4b..9ee774ff6 100644 --- a/aws_run_celery.py +++ b/aws_run_celery.py @@ -2,11 +2,21 @@ from app import notify_celery, create_app from credstash import getAllSecrets import os +from config import configs + +default_env_file = '/home/ubuntu/environment' +environment = 'live' + +if os.path.isfile(default_env_file): + environment_file = open(default_env_file, 'r') + environment = environment_file.readline().strip() # on aws get secrets and export to env secrets = getAllSecrets(region="eu-west-1") for key, val in secrets.items(): os.environ[key] = val +os.environ['NOTIFY_API_ENVIRONMENT'] = configs[environment] + application = create_app() application.app_context().push() diff --git a/config.py b/config.py index c2b6ce984..0234e9e7b 100644 --- a/config.py +++ b/config.py @@ -84,3 +84,9 @@ class Development(Config): class Test(Development): pass + +configs = { + 'live': 'config_live.Live', + 'staging': 'config_staging.Staging', + 'preview': 'config.Config' +} diff --git a/config_live.py b/config_live.py new file mode 100644 index 000000000..57236f71c --- /dev/null +++ b/config_live.py @@ -0,0 +1,16 @@ +import os +from config import Config + + +class Live(Config): + ADMIN_BASE_URL = os.environ['LIVE_ADMIN_BASE_URL'] + ADMIN_CLIENT_SECRET = os.environ['LIVE_ADMIN_CLIENT_SECRET'] + DANGEROUS_SALT = os.environ['LIVE_DANGEROUS_SALT'] + NOTIFICATION_QUEUE_PREFIX = os.environ['LIVE_NOTIFICATION_QUEUE_PREFIX'] + NOTIFY_JOB_QUEUE = os.environ['LIVE_NOTIFY_JOB_QUEUE'] + SECRET_KEY = os.environ['LIVE_SECRET_KEY'] + SQLALCHEMY_DATABASE_URI = os.environ['LIVE_SQLALCHEMY_DATABASE_URI'] + VERIFY_CODE_FROM_EMAIL_ADDRESS = os.environ['LIVE_VERIFY_CODE_FROM_EMAIL_ADDRESS'] + NOTIFY_EMAIL_DOMAIN = os.environ['LIVE_NOTIFY_EMAIL_DOMAIN'] + FIRETEXT_API_KEY = os.getenv("LIVE_FIRETEXT_API_KEY") + TWILIO_AUTH_TOKEN = os.getenv('LIVE_TWILIO_AUTH_TOKEN') diff --git a/config_staging.py b/config_staging.py new file mode 100644 index 000000000..3c36cc1b7 --- /dev/null +++ b/config_staging.py @@ -0,0 +1,16 @@ +import os +from config import Config + + +class Staging(Config): + ADMIN_BASE_URL = os.environ['STAGING_ADMIN_BASE_URL'] + ADMIN_CLIENT_SECRET = os.environ['STAGING_ADMIN_CLIENT_SECRET'] + DANGEROUS_SALT = os.environ['STAGING_DANGEROUS_SALT'] + NOTIFICATION_QUEUE_PREFIX = os.environ['STAGING_NOTIFICATION_QUEUE_PREFIX'] + NOTIFY_JOB_QUEUE = os.environ['STAGING_NOTIFY_JOB_QUEUE'] + SECRET_KEY = os.environ['STAGING_SECRET_KEY'] + SQLALCHEMY_DATABASE_URI = os.environ['STAGING_SQLALCHEMY_DATABASE_URI'] + VERIFY_CODE_FROM_EMAIL_ADDRESS = os.environ['STAGING_VERIFY_CODE_FROM_EMAIL_ADDRESS'] + NOTIFY_EMAIL_DOMAIN = os.environ['STAGING_NOTIFY_EMAIL_DOMAIN'] + FIRETEXT_API_KEY = os.getenv("STAGING_FIRETEXT_API_KEY") + TWILIO_AUTH_TOKEN = os.getenv('STAGING_TWILIO_AUTH_TOKEN') diff --git a/wsgi.py b/wsgi.py index 3e9e20d2f..0dac23248 100644 --- a/wsgi.py +++ b/wsgi.py @@ -2,13 +2,24 @@ import os from app import create_app from credstash import getAllSecrets +from config import configs + + +default_env_file = '/home/ubuntu/environment' +environment = 'live' + +if os.path.isfile(default_env_file): + environment_file = open(default_env_file, 'r') + environment = environment_file.readline().strip() # on aws get secrets and export to env secrets = getAllSecrets(region="eu-west-1") for key, val in secrets.items(): os.environ[key] = val +os.environ['NOTIFY_API_ENVIRONMENT'] = configs[environment] + application = create_app() if __name__ == "__main__": - application.run() + application.run() From 6aec6a0bdaddb4ee6c4bb69487c7f8e6bcb6ac31 Mon Sep 17 00:00:00 2001 From: Martyn Inglis Date: Thu, 17 Mar 2016 12:51:14 +0000 Subject: [PATCH 2/2] Update as per pull request comments: - context manager for file handling - os.environ.update for setting overrides --- aws_run_celery.py | 8 +++----- wsgi.py | 9 +++------ 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/aws_run_celery.py b/aws_run_celery.py index 9ee774ff6..bbc64d2ad 100644 --- a/aws_run_celery.py +++ b/aws_run_celery.py @@ -8,13 +8,11 @@ default_env_file = '/home/ubuntu/environment' environment = 'live' if os.path.isfile(default_env_file): - environment_file = open(default_env_file, 'r') - environment = environment_file.readline().strip() + with open(default_env_file, 'r') as environment_file: + environment = environment_file.readline().strip() # on aws get secrets and export to env -secrets = getAllSecrets(region="eu-west-1") -for key, val in secrets.items(): - os.environ[key] = val +os.environ.update(getAllSecrets(region="eu-west-1")) os.environ['NOTIFY_API_ENVIRONMENT'] = configs[environment] diff --git a/wsgi.py b/wsgi.py index 0dac23248..4149fb92a 100644 --- a/wsgi.py +++ b/wsgi.py @@ -9,14 +9,11 @@ default_env_file = '/home/ubuntu/environment' environment = 'live' if os.path.isfile(default_env_file): - environment_file = open(default_env_file, 'r') - environment = environment_file.readline().strip() + with open(default_env_file, 'r') as environment_file: + environment = environment_file.readline().strip() # on aws get secrets and export to env -secrets = getAllSecrets(region="eu-west-1") -for key, val in secrets.items(): - os.environ[key] = val - +os.environ.update(getAllSecrets(region="eu-west-1")) os.environ['NOTIFY_API_ENVIRONMENT'] = configs[environment] application = create_app()