From e2af3318674d49af6d33ef8de57599377f0013d8 Mon Sep 17 00:00:00 2001 From: Max Vorobev Date: Sun, 7 May 2017 18:54:35 +0300 Subject: [PATCH 1/2] Add mLab MongoDB; complain about several mongo installations --- flask_heroku.py | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/flask_heroku.py b/flask_heroku.py index 0aceb15..368bad0 100644 --- a/flask_heroku.py +++ b/flask_heroku.py @@ -1,11 +1,13 @@ #!/usr/bin/env python +from logging import getLogger from os import environ try: from urllib.parse import urlparse except ImportError: from urlparse import urlparse +logger = getLogger(__name__) class Heroku(object): """Heroku configurations for flask.""" @@ -85,26 +87,26 @@ class Heroku(object): # Mongolab mongolab_uri = environ.get('MONGOLAB_URI') - if mongolab_uri: - url = urlparse(mongolab_uri) - app.config.setdefault('MONGO_URI', mongolab_uri) - app.config.setdefault('MONGODB_USER', url.username) - app.config.setdefault('MONGODB_USERNAME', url.username) - app.config.setdefault('MONGODB_PASSWORD', url.password) - app.config.setdefault('MONGODB_HOST', url.hostname) - app.config.setdefault('MONGODB_PORT', url.port) - app.config.setdefault('MONGODB_DB', url.path[1:]) - # MongoHQ mongohq_uri = environ.get('MONGOHQ_URL') - if mongohq_uri: - url = urlparse(mongohq_uri) - app.config.setdefault('MONGO_URI', mongohq_uri) - app.config.setdefault('MONGODB_USER', url.username) - app.config.setdefault('MONGODB_PASSWORD', url.password) - app.config.setdefault('MONGODB_HOST', url.hostname) - app.config.setdefault('MONGODB_PORT', url.port) - app.config.setdefault('MONGODB_DB', url.path[1:]) + # mLab MongoHQ + mlab_mongo_uri = environ.get('MONGODB_URI') + + if sum(1 for uri in ( + mongolab_uri, mongohq_uri, mlab_mongo_uri) if uri) > 1: + logger.error('There are conflicting settings for Mongo') + else: + mongo_uri = mongolab_uri or mongohq_uri or mlab_mongo_uri + + if mongo_uri: + url = urlparse(mongo_uri) + app.config.setdefault('MONGO_URI', mongo_uri) + app.config.setdefault('MONGODB_USER', url.username) + app.config.setdefault('MONGODB_USERNAME', url.username) + app.config.setdefault('MONGODB_PASSWORD', url.password) + app.config.setdefault('MONGODB_HOST', url.hostname) + app.config.setdefault('MONGODB_PORT', url.port) + app.config.setdefault('MONGODB_DB', url.path[1:]) # Cloudant cloudant_uri = environ.get('CLOUDANT_URL') From 0119ae04bf27cab233f71779fbf12bf2de7b1ae7 Mon Sep 17 00:00:00 2001 From: Max Vorobev Date: Sat, 13 May 2017 02:12:15 +0300 Subject: [PATCH 2/2] Less obscure way to fix whether we have multiple Mongo addons --- flask_heroku.py | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/flask_heroku.py b/flask_heroku.py index 368bad0..4180f1b 100644 --- a/flask_heroku.py +++ b/flask_heroku.py @@ -85,28 +85,30 @@ class Heroku(object): app.config.setdefault('REDIS_PORT', url.port) app.config.setdefault('REDIS_PASSWORD', url.password) - # Mongolab - mongolab_uri = environ.get('MONGOLAB_URI') - # MongoHQ - mongohq_uri = environ.get('MONGOHQ_URL') - # mLab MongoHQ - mlab_mongo_uri = environ.get('MONGODB_URI') + # Mongolab, MongoHQ and mLab MongoHQ + mongo_addon_vars = {'MONGOLAB_URI', 'MONGOHQ_URL', 'MONGODB_URI'} + defined_env_vars = set(environ.keys()) - if sum(1 for uri in ( - mongolab_uri, mongohq_uri, mlab_mongo_uri) if uri) > 1: - logger.error('There are conflicting settings for Mongo') - else: - mongo_uri = mongolab_uri or mongohq_uri or mlab_mongo_uri + defined_mongo_addons = defined_env_vars & mongo_addon_vars + + if len(defined_mongo_addons) == 1: + mongo_addon_var = defined_mongo_addons.pop() + mongo_uri = environ[mongo_addon_var] + + url = urlparse(mongo_uri) + app.config.setdefault('MONGO_URI', mongo_uri) + app.config.setdefault('MONGODB_USER', url.username) + app.config.setdefault('MONGODB_USERNAME', url.username) + app.config.setdefault('MONGODB_PASSWORD', url.password) + app.config.setdefault('MONGODB_HOST', url.hostname) + app.config.setdefault('MONGODB_PORT', url.port) + app.config.setdefault('MONGODB_DB', url.path[1:]) + + elif len(defined_mongo_addons) > 1: + logger.error( + 'Multiple MongoDB addons enabled. Flask-Heroku cannot ' + 'determine which to use.') - if mongo_uri: - url = urlparse(mongo_uri) - app.config.setdefault('MONGO_URI', mongo_uri) - app.config.setdefault('MONGODB_USER', url.username) - app.config.setdefault('MONGODB_USERNAME', url.username) - app.config.setdefault('MONGODB_PASSWORD', url.password) - app.config.setdefault('MONGODB_HOST', url.hostname) - app.config.setdefault('MONGODB_PORT', url.port) - app.config.setdefault('MONGODB_DB', url.path[1:]) # Cloudant cloudant_uri = environ.get('CLOUDANT_URL')