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,6 +32,11 @@ ALLOWED_HOSTS = [ | ||
| 32 | # SOCIAL_NETWORK_ENABLED = True | 32 | # SOCIAL_NETWORK_ENABLED = True |
| 33 | 33 | ||
| 34 | ## Database settings | 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 | # DATABASES = {{ | 40 | # DATABASES = {{ |
| 36 | # 'default': {{ | 41 | # 'default': {{ |
| 37 | # 'ENGINE': 'django.db.backends.sqlite3', | 42 | # 'ENGINE': 'django.db.backends.sqlite3', |
colab/settings.py
| @@ -9,6 +9,7 @@ https://docs.djangoproject.com/en/1.7/ref/settings/ | @@ -9,6 +9,7 @@ https://docs.djangoproject.com/en/1.7/ref/settings/ | ||
| 9 | """ | 9 | """ |
| 10 | 10 | ||
| 11 | BROKER_URL = 'amqp://guest:guest@localhost:5672/' | 11 | BROKER_URL = 'amqp://guest:guest@localhost:5672/' |
| 12 | + | ||
| 12 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) | 13 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) |
| 13 | import os | 14 | import os |
| 14 | BASE_DIR = os.path.dirname(__file__) | 15 | BASE_DIR = os.path.dirname(__file__) |
| @@ -172,10 +173,11 @@ HAYSTACK_CONNECTIONS = { | @@ -172,10 +173,11 @@ HAYSTACK_CONNECTIONS = { | ||
| 172 | } | 173 | } |
| 173 | } | 174 | } |
| 174 | 175 | ||
| 176 | +DEFAULT_DATABASE = os.path.join(BASE_DIR, 'colab.sqlite3') | ||
| 175 | DATABASES = { | 177 | DATABASES = { |
| 176 | 'default': { | 178 | 'default': { |
| 177 | 'ENGINE': 'django.db.backends.sqlite3', | 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,12 +254,12 @@ REVPROXY_ADD_REMOTE_USER = True | ||
| 252 | # Tastypie settings | 254 | # Tastypie settings |
| 253 | TASTYPIE_DEFAULT_FORMATS = ['json', ] | 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 | SOCIAL_NETWORK_ENABLED = locals().get('SOCIAL_NETWORK_ENABLED') or False | 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 | COLAB_APPS = locals().get('COLAB_APPS') or {} | 264 | COLAB_APPS = locals().get('COLAB_APPS') or {} |
| 263 | PROXIED_APPS = {} | 265 | PROXIED_APPS = {} |
| @@ -297,3 +299,5 @@ STATICFILES_DIRS += [ | @@ -297,3 +299,5 @@ STATICFILES_DIRS += [ | ||
| 297 | TEMPLATE_DIRS += ( | 299 | TEMPLATE_DIRS += ( |
| 298 | os.path.join(BASE_DIR, 'templates'), | 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,6 +5,7 @@ import importlib | ||
| 5 | import warnings | 5 | import warnings |
| 6 | 6 | ||
| 7 | from django.core.exceptions import ImproperlyConfigured | 7 | from django.core.exceptions import ImproperlyConfigured |
| 8 | +from django.utils.translation import ugettext as _ | ||
| 8 | 9 | ||
| 9 | 10 | ||
| 10 | class InaccessibleSettings(ImproperlyConfigured): | 11 | class InaccessibleSettings(ImproperlyConfigured): |
| @@ -13,6 +14,14 @@ class InaccessibleSettings(ImproperlyConfigured): | @@ -13,6 +14,14 @@ class InaccessibleSettings(ImproperlyConfigured): | ||
| 13 | Check if the file exists and if you have read permissions.""" | 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 | def _load_py_file(py_path, path): | 25 | def _load_py_file(py_path, path): |
| 17 | original_path = sys.path | 26 | original_path = sys.path |
| 18 | 27 | ||
| @@ -94,3 +103,11 @@ def load_colab_apps(): | @@ -94,3 +103,11 @@ def load_colab_apps(): | ||
| 94 | COLAB_APPS[app_name][key] = value | 103 | COLAB_APPS[app_name][key] = value |
| 95 | 104 | ||
| 96 | return {'COLAB_APPS': COLAB_APPS} | 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) |