Commit b71fe7377ea7a34c0995c8b0f499f783428cb9a9
1 parent
47ca4d8d
Exists in
master
and in
31 other branches
Don't allow auto db conf if debug is False
Showing
3 changed files
with
30 additions
and
4 deletions
Show diff stats
colab/management/initconfig.py
| ... | ... | @@ -32,6 +32,11 @@ ALLOWED_HOSTS = [ |
| 32 | 32 | # SOCIAL_NETWORK_ENABLED = True |
| 33 | 33 | |
| 34 | 34 | ## Database settings |
| 35 | +## | |
| 36 | +## When DEBUG is True colab will create the DB on | |
| 37 | +## the repository root. In case of production settings | |
| 38 | +## (DEBUG False) the DB settings must be set. | |
| 39 | +## | |
| 35 | 40 | # DATABASES = {{ |
| 36 | 41 | # 'default': {{ |
| 37 | 42 | # 'ENGINE': 'django.db.backends.sqlite3', | ... | ... |
colab/settings.py
| ... | ... | @@ -9,6 +9,7 @@ https://docs.djangoproject.com/en/1.7/ref/settings/ |
| 9 | 9 | """ |
| 10 | 10 | |
| 11 | 11 | BROKER_URL = 'amqp://guest:guest@localhost:5672/' |
| 12 | + | |
| 12 | 13 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) |
| 13 | 14 | import os |
| 14 | 15 | BASE_DIR = os.path.dirname(__file__) |
| ... | ... | @@ -172,10 +173,11 @@ HAYSTACK_CONNECTIONS = { |
| 172 | 173 | } |
| 173 | 174 | } |
| 174 | 175 | |
| 176 | +DEFAULT_DATABASE = os.path.join(BASE_DIR, 'colab.sqlite3') | |
| 175 | 177 | DATABASES = { |
| 176 | 178 | 'default': { |
| 177 | 179 | 'ENGINE': 'django.db.backends.sqlite3', |
| 178 | - 'NAME': os.path.join(BASE_DIR, 'colab.sqlite3'), | |
| 180 | + 'NAME': DEFAULT_DATABASE, | |
| 179 | 181 | } |
| 180 | 182 | } |
| 181 | 183 | |
| ... | ... | @@ -252,12 +254,12 @@ REVPROXY_ADD_REMOTE_USER = True |
| 252 | 254 | # Tastypie settings |
| 253 | 255 | TASTYPIE_DEFAULT_FORMATS = ['json', ] |
| 254 | 256 | |
| 255 | -from .utils.conf import load_colab_apps, load_py_settings | |
| 257 | +from .utils import conf | |
| 256 | 258 | |
| 257 | 259 | SOCIAL_NETWORK_ENABLED = locals().get('SOCIAL_NETWORK_ENABLED') or False |
| 258 | 260 | |
| 259 | -locals().update(load_colab_apps()) | |
| 260 | -locals().update(load_py_settings()) | |
| 261 | +locals().update(conf.load_colab_apps()) | |
| 262 | +locals().update(conf.load_py_settings()) | |
| 261 | 263 | |
| 262 | 264 | COLAB_APPS = locals().get('COLAB_APPS') or {} |
| 263 | 265 | PROXIED_APPS = {} |
| ... | ... | @@ -297,3 +299,5 @@ STATICFILES_DIRS += [ |
| 297 | 299 | TEMPLATE_DIRS += ( |
| 298 | 300 | os.path.join(BASE_DIR, 'templates'), |
| 299 | 301 | ) |
| 302 | + | |
| 303 | +conf.validate_database(DATABASES, DEFAULT_DATABASE, DEBUG) | ... | ... |
colab/utils/conf.py
| ... | ... | @@ -5,6 +5,7 @@ import importlib |
| 5 | 5 | import warnings |
| 6 | 6 | |
| 7 | 7 | from django.core.exceptions import ImproperlyConfigured |
| 8 | +from django.utils.translation import ugettext as _ | |
| 8 | 9 | |
| 9 | 10 | |
| 10 | 11 | class InaccessibleSettings(ImproperlyConfigured): |
| ... | ... | @@ -13,6 +14,14 @@ class InaccessibleSettings(ImproperlyConfigured): |
| 13 | 14 | Check if the file exists and if you have read permissions.""" |
| 14 | 15 | |
| 15 | 16 | |
| 17 | +class DatabaseUndefined(ImproperlyConfigured): | |
| 18 | + """Default database is not set. | |
| 19 | + | |
| 20 | + When DEBUG is set to True a local sqlite database can be used for | |
| 21 | + developement porposes but otherwise the `default` database must | |
| 22 | + be set.""" | |
| 23 | + | |
| 24 | + | |
| 16 | 25 | def _load_py_file(py_path, path): |
| 17 | 26 | original_path = sys.path |
| 18 | 27 | |
| ... | ... | @@ -94,3 +103,11 @@ def load_colab_apps(): |
| 94 | 103 | COLAB_APPS[app_name][key] = value |
| 95 | 104 | |
| 96 | 105 | return {'COLAB_APPS': COLAB_APPS} |
| 106 | + | |
| 107 | + | |
| 108 | +def validate_database(database_dict, default_db, debug): | |
| 109 | + db_name = database_dict.get('default', {}).get('NAME') | |
| 110 | + if not debug and db_name == default_db: | |
| 111 | + msg = _('Since DEBUG is set to False DATABASE must be set on ' | |
| 112 | + 'colab settings') | |
| 113 | + raise DatabaseUndefined(msg) | ... | ... |