summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2010-11-11 18:34:38 +0100
committerÉtienne Loks <etienne.loks@peacefrogs.net>2010-11-11 18:34:38 +0100
commita8e9b660968b18ce7a7d1716fb1410e14c8669f3 (patch)
tree30aa8bc1d0a84d68563f6f06769283976e444cf1
parent43e49bad514d78ae4318b51bdce40b43a4223922 (diff)
downloadChimère-a8e9b660968b18ce7a7d1716fb1410e14c8669f3.tar.bz2
Chimère-a8e9b660968b18ce7a7d1716fb1410e14c8669f3.zip
Upgrade script to manage database changement and correct errors from old
models Creation of urn field when missing
-rw-r--r--chimere/.gitignore1
-rw-r--r--chimere/scripts/__init__.py0
-rwxr-xr-xchimere/scripts/upgrade.py62
-rw-r--r--chimere/settings.py.example1
4 files changed, 64 insertions, 0 deletions
diff --git a/chimere/.gitignore b/chimere/.gitignore
index fce19e4..dc3d5e7 100644
--- a/chimere/.gitignore
+++ b/chimere/.gitignore
@@ -1 +1,2 @@
settings.py
+*.pyc
diff --git a/chimere/scripts/__init__.py b/chimere/scripts/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/chimere/scripts/__init__.py
diff --git a/chimere/scripts/upgrade.py b/chimere/scripts/upgrade.py
new file mode 100755
index 0000000..939bb4c
--- /dev/null
+++ b/chimere/scripts/upgrade.py
@@ -0,0 +1,62 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import sys
+sys.path.append('.')
+
+from django.core.management import setup_environ
+import settings
+
+setup_environ(settings)
+
+from django.db import connection, transaction
+
+cursor = connection.cursor()
+
+from main.models import Area
+
+
+# early versions before 0.1: urn field doesn't exist for area
+
+import htmlentitydefs, re
+
+def slugfy(text, separator):
+ ret = u""
+ text = text.strip()
+ for c in text.lower():
+ try:
+ ret += htmlentitydefs.codepoint2name[ord(c)][0]
+ except:
+ ret += c
+ ret = re.sub("\W", " ", ret)
+ ret = re.sub(" +", separator, ret)
+ return ret.strip()
+
+query = """SELECT a.attname AS field FROM pg_class c, pg_attribute a
+ WHERE c.relname = 'main_area' AND a.attnum > 0 AND a.attrelid = c.oid
+ AND a.attname='urn';"""
+cursor.execute(query)
+transaction.commit_unless_managed()
+
+row = cursor.fetchone()
+if not row:
+ query_update = "ALTER TABLE main_area ADD COLUMN urn VARCHAR(50) \
+UNIQUE"
+ cursor.execute(query_update)
+ transaction.commit_unless_managed()
+ areas = Area.objects.all()
+ print " * urn field created in table main_area"
+ for area in areas:
+ urn = slugfy(area.name, "-")
+ area.urn = urn
+ area.save()
+ print " * area %s urn is now: %s" % (area.name, area.urn)
+
+ query = "ALTER TABLE main_area ALTER COLUMN urn SET not null;"
+ cursor.execute(query)
+ transaction.commit_unless_managed()
+ print " * urn field has now the constraint NOT NULL"
+
+# early versions before 0.1: save area with wrong SRID
+
+query = "SELECT AsText(ST_Transform(upper_left_corner, 4326)) from main_area;"
diff --git a/chimere/settings.py.example b/chimere/settings.py.example
index a87394b..58d12f3 100644
--- a/chimere/settings.py.example
+++ b/chimere/settings.py.example
@@ -132,4 +132,5 @@ INSTALLED_APPS = (
'django.contrib.sessions',
'django.contrib.sites',
'chimere.main',
+ 'chimere.scripts',
)