|
1 | 1 | #!/usr/bin/env python
|
2 | 2 |
|
| 3 | +from logging import getLogger |
3 | 4 | from os import environ
|
4 | 5 | try:
|
5 | 6 | from urllib.parse import urlparse
|
6 | 7 | except ImportError:
|
7 | 8 | from urlparse import urlparse
|
8 | 9 |
|
| 10 | +logger = getLogger(__name__) |
9 | 11 |
|
10 | 12 | class Heroku(object):
|
11 | 13 | """Heroku configurations for flask."""
|
@@ -83,28 +85,30 @@ def init_app(self, app):
|
83 | 85 | app.config.setdefault('REDIS_PORT', url.port)
|
84 | 86 | app.config.setdefault('REDIS_PASSWORD', url.password)
|
85 | 87 |
|
86 |
| - # Mongolab |
87 |
| - mongolab_uri = environ.get('MONGOLAB_URI') |
88 |
| - if mongolab_uri: |
89 |
| - url = urlparse(mongolab_uri) |
90 |
| - app.config.setdefault('MONGO_URI', mongolab_uri) |
| 88 | + # Mongolab, MongoHQ and mLab MongoHQ |
| 89 | + mongo_addon_vars = {'MONGOLAB_URI', 'MONGOHQ_URL', 'MONGODB_URI'} |
| 90 | + defined_env_vars = set(environ.keys()) |
| 91 | + |
| 92 | + defined_mongo_addons = defined_env_vars & mongo_addon_vars |
| 93 | + |
| 94 | + if len(defined_mongo_addons) == 1: |
| 95 | + mongo_addon_var = defined_mongo_addons.pop() |
| 96 | + mongo_uri = environ[mongo_addon_var] |
| 97 | + |
| 98 | + url = urlparse(mongo_uri) |
| 99 | + app.config.setdefault('MONGO_URI', mongo_uri) |
91 | 100 | app.config.setdefault('MONGODB_USER', url.username)
|
92 | 101 | app.config.setdefault('MONGODB_USERNAME', url.username)
|
93 | 102 | app.config.setdefault('MONGODB_PASSWORD', url.password)
|
94 | 103 | app.config.setdefault('MONGODB_HOST', url.hostname)
|
95 | 104 | app.config.setdefault('MONGODB_PORT', url.port)
|
96 | 105 | app.config.setdefault('MONGODB_DB', url.path[1:])
|
97 | 106 |
|
98 |
| - # MongoHQ |
99 |
| - mongohq_uri = environ.get('MONGOHQ_URL') |
100 |
| - if mongohq_uri: |
101 |
| - url = urlparse(mongohq_uri) |
102 |
| - app.config.setdefault('MONGO_URI', mongohq_uri) |
103 |
| - app.config.setdefault('MONGODB_USER', url.username) |
104 |
| - app.config.setdefault('MONGODB_PASSWORD', url.password) |
105 |
| - app.config.setdefault('MONGODB_HOST', url.hostname) |
106 |
| - app.config.setdefault('MONGODB_PORT', url.port) |
107 |
| - app.config.setdefault('MONGODB_DB', url.path[1:]) |
| 107 | + elif len(defined_mongo_addons) > 1: |
| 108 | + logger.error( |
| 109 | + 'Multiple MongoDB addons enabled. Flask-Heroku cannot ' |
| 110 | + 'determine which to use.') |
| 111 | + |
108 | 112 |
|
109 | 113 | # Cloudant
|
110 | 114 | cloudant_uri = environ.get('CLOUDANT_URL')
|
|
0 commit comments