diff options
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 |
commit | a8e9b660968b18ce7a7d1716fb1410e14c8669f3 (patch) | |
tree | 30aa8bc1d0a84d68563f6f06769283976e444cf1 | |
parent | 43e49bad514d78ae4318b51bdce40b43a4223922 (diff) | |
download | Chimè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/.gitignore | 1 | ||||
-rw-r--r-- | chimere/scripts/__init__.py | 0 | ||||
-rwxr-xr-x | chimere/scripts/upgrade.py | 62 | ||||
-rw-r--r-- | chimere/settings.py.example | 1 |
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', ) |