settings: Prompt for a database login when using South migrations.
authorMatthijs Kooijman <matthijs@stdin.nl>
Tue, 19 Oct 2010 17:44:41 +0000 (19:44 +0200)
committerMatthijs Kooijman <matthijs@stdin.nl>
Tue, 19 Oct 2010 17:47:08 +0000 (19:47 +0200)
This allows the normal database user to be unprivileged, while
performing schema migrations using a privileged user.

settings.py
southsettings.py [new file with mode: 0644]

index f07aa72728df59e24277bd30e379b00b9555be9b..54df1e2ef3355f9e09e5353a91ca7b25b831c1f3 100644 (file)
@@ -17,6 +17,10 @@ MANAGERS = ADMINS
 # Import database settings from a default file (so we can keep those out
 # of git).
 from dbsettings import *
+# Import alternative database settings for when running a south schema
+# migration. The soutsettings.py takes care of detecting this case and
+# prompting for a password, then.
+from southsettings import *
 
 # Local time zone for this installation. Choices can be found here:
 # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
diff --git a/southsettings.py b/southsettings.py
new file mode 100644 (file)
index 0000000..63ff314
--- /dev/null
@@ -0,0 +1,17 @@
+# Database settings for when doing a database migration using south,
+# which requires more privileges.
+
+import sys
+if 'manage.py' in sys.argv[0] and sys.argv[1] == 'migrate':
+    import south
+
+    try:
+        # We cache the prompted values in the south module, since the
+        # settings module gets loaded multiple times...
+        DATABASE_USER = south.cached_db_user
+        DATABASE_PASSWORD = south.cached_db_pw
+    except AttributeError:
+        DATABASE_USER = raw_input("Privileged database user: ")
+        DATABASE_PASSWORD = raw_input("Database password for %s: " % DATABASE_USER)
+        south.cached_db_user = DATABASE_USER
+        south.cached_db_pw = DATABASE_PASSWORD