Patchwork [bitbake-devel,4/9] toaster: read database settings from the environment

login
register
mail settings
Submitter Alexandru DAMIAN
Date June 3, 2014, 3:26 p.m.
Message ID <6ecab61779079d4e0cd4ae7d4de82766a8557373.1401808899.git.alexandru.damian@intel.com>
Download mbox | patch
Permalink /patch/73147/
State New
Headers show

Comments

Alexandru DAMIAN - June 3, 2014, 3:26 p.m.
From: Alexandru DAMIAN <alexandru.damian@intel.com>

We add the capability to read the database settings for
Toaster from the environment. The DATABASE_URL is intepreted
and used to override the default settings.

This capability is essential for easy deployment of Toaster
in a managed hosted environment, and for creating
build environments with custom database settings.

Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
---
 lib/toaster/toastermain/settings.py | 35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

Patch

diff --git a/lib/toaster/toastermain/settings.py b/lib/toaster/toastermain/settings.py
index 645f327..adaa56c 100644
--- a/lib/toaster/toastermain/settings.py
+++ b/lib/toaster/toastermain/settings.py
@@ -41,6 +41,39 @@  DATABASES = {
     }
 }
 
+# Reinterpret database settings if we have DATABASE_URL environment variable defined
+import os, re
+
+if 'DATABASE_URL' in os.environ:
+    dburl = os.environ['DATABASE_URL']
+    if dburl.startswith('sqlite3://'):
+        result = re.match('sqlite3://(.*)', dburl)
+        if result is None:
+            raise Exception("ERROR: Could not read sqlite database url: %s" % dburl)
+        DATABASES['default'] = {
+            'ENGINE': 'django.db.backends.sqlite3',
+            'NAME': result.group(1),
+            'USER': '',
+            'PASSWORD': '',
+            'HOST': '',
+            'PORT': '',
+        }
+    elif dburl.startswith('mysql://'):
+        # URL must be in this form: mysql://user:pass@host:port/name
+        result = re.match(r"mysql://([^:]*):([^@]*)@([^:]*):(\d+)/([^/]*)", dburl)
+        if result is None:
+            raise Exception("ERROR: Could not read mysql database url: %s" % dburl)
+        DATABASES['default'] = {
+            'ENGINE': 'django.db.backends.mysql',
+            'NAME': result.group(5),
+            'USER': result.group(1),
+            'PASSWORD': result.group(2),
+            'HOST': result.group(3),
+            'PORT': result.group(4),
+        }
+    else:
+        raise Exception("FIXME: Please implement missing database url schema for url: %s" % dburl)
+
 # Hosts/domain names that are valid for this site; required if DEBUG is False
 # See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
 ALLOWED_HOSTS = []
@@ -51,7 +84,7 @@  ALLOWED_HOSTS = []
 # In a Windows environment this must be set to your system time zone.
 
 # Always use local computer's time zone, find
-import os, hashlib
+import hashlib
 if 'TZ' in os.environ:
     TIME_ZONE = os.environ['TZ']
 else: