summaryrefslogtreecommitdiff
path: root/chimere/scripts/upgrade.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/scripts/upgrade.py')
-rwxr-xr-xchimere/scripts/upgrade.py315
1 files changed, 0 insertions, 315 deletions
diff --git a/chimere/scripts/upgrade.py b/chimere/scripts/upgrade.py
deleted file mode 100755
index accb751..0000000
--- a/chimere/scripts/upgrade.py
+++ /dev/null
@@ -1,315 +0,0 @@
-#!/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, Marker, Route, Icon, SubCategory
-from django.contrib.gis.geos import LineString
-
-# 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_CHECK_FIELD = """SELECT a.attname AS field FROM pg_class c, pg_attribute a
- WHERE c.relname = '%s' AND a.attnum > 0 AND a.attrelid = c.oid
- AND a.attname='%s';"""
-QUERY_CHECK_TABLE = """SELECT c.relname FROM pg_class c
-WHERE c.relname = '%s';"""
-
-
-query = QUERY_CHECK_FIELD % ('main_area', '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"
-
-from django.contrib.auth.models import Permission, ContentType
-
-# check if permission have been correctly set for each areas
-areas = Area.objects.all()
-for area in areas:
- content_type = ContentType.objects.get(app_label="main",
- model="area")
- mnemo = 'change_area_' + area.urn
- perm = Permission.objects.filter(codename=mnemo)
- if not perm:
- lbl = "Can change " + area.name
- perm = Permission(name=lbl, content_type_id=content_type.id,
- codename=mnemo)
- perm.save()
- print ' * permission "' + lbl + '" has been created'
- print " WARNING: don't forget to update administrator's rights with \
-this new permission"
-
-# early versions before 0.1: subcategory_areas table doesn't exist
-# version 1.0 subcategory_areas renamed to main_subcategory_areas
-
-query = QUERY_CHECK_TABLE % 'main_subcategory_areas'
-cursor.execute(query)
-transaction.commit_unless_managed()
-
-row = cursor.fetchone()
-if not row:
- query = QUERY_CHECK_TABLE % 'subcategory_areas'
- cursor.execute(query)
- transaction.commit_unless_managed()
-
- row = cursor.fetchone()
- if row:
- query_rename = "ALTER TABLE subcategory_areas RENAME TO \
-main_subcategory_areas;"
- cursor.execute(query_rename)
- transaction.commit_unless_managed()
- print " * subcategory_areas renamed to main_subcategory_areas"
- else:
- query_create = """
-CREATE TABLE "main_subcategory_areas" (
- "id" serial NOT NULL PRIMARY KEY,
- "subcategory_id" integer NOT NULL REFERENCES "main_subcategory" ("id")
- DEFERRABLE INITIALLY DEFERRED,
- "area_id" integer NOT NULL REFERENCES "main_area" ("id")
- DEFERRABLE INITIALLY DEFERRED,
- UNIQUE ("subcategory_id", "area_id"));
-"""
- cursor.execute(query_create)
- transaction.commit_unless_managed()
- print " * main_subcategory_areas created"
-
-# early versions before 0.1: main_tinyurl table doesn't exist
-
-query = QUERY_CHECK_TABLE % 'main_tinyurl'
-cursor.execute(query)
-transaction.commit_unless_managed()
-
-row = cursor.fetchone()
-if not row:
- query_create = """
-CREATE TABLE "main_tinyurl" (
- "id" serial NOT NULL PRIMARY KEY,
- "parameters" varchar(500) NOT NULL);
-"""
- cursor.execute(query_create)
- transaction.commit_unless_managed()
- print " * main_tinyurl created"
-
-
-# early versions before 0.1: save area with wrong SRID
-# only errors with default SRID is managed adapt the script for your SRID
-
-from osgeo import osr
-
-srs = osr.SpatialReference()
-srs.ImportFromEPSG(4326) # WGS84
-ll = srs.CloneGeogCS()
-srs.ImportFromEPSG(settings.EPSG_PROJECTION)
-proj = osr.CoordinateTransformation(srs, ll)
-
-changed = False
-areas = Area.objects.all()
-for area in areas:
- # only one test: assume each point as been save with the same SRID...
- if area.upper_left_corner.srid == 4326 and area.upper_left_corner.x > 90 \
- or area.upper_left_corner.x < -90:
- changed = True
- pt = proj.TransformPoint(area.upper_left_corner.y,
- area.upper_left_corner.x)
- area.upper_left_corner.x = pt[0]
- area.upper_left_corner.y = pt[1]
- pt = proj.TransformPoint(area.lower_right_corner.y,
- area.lower_right_corner.x)
- area.lower_right_corner.x = pt[0]
- area.lower_right_corner.y = pt[1]
- area.save()
-if changed:
- print " * projections of areas corrected"
-
-# changement from version 1.0 to 1.1: add dated fields to markers and routes
-if settings.DAYS_BEFORE_EVENT:
- for cls in (Marker, Route):
- table = cls._meta.db_table
- query = QUERY_CHECK_FIELD % (table, 'start_date')
- cursor.execute(query)
- transaction.commit_unless_managed()
-
- row = cursor.fetchone()
- if not row:
- query_update = "ALTER TABLE "+table+" ADD COLUMN start_date date"
- cursor.execute(query_update)
- transaction.commit_unless_managed()
- query_update = "ALTER TABLE "+table+" ADD COLUMN end_date date"
- cursor.execute(query_update)
- transaction.commit_unless_managed()
- print " * start_date and end_date added to table " + table + "."
-
-# changement from version 1.0 to 1.1: add available_date field to marker
-if 'chimere.rss' in settings.INSTALLED_APPS:
- for cls in (Marker,):
- table = cls._meta.db_table
- query = QUERY_CHECK_FIELD % (table, 'available_date')
- cursor.execute(query)
- transaction.commit_unless_managed()
-
- row = cursor.fetchone()
- if not row:
- query_update = "ALTER TABLE " + table + " ADD COLUMN \
-available_date timestamp with time zone"
- cursor.execute(query_update)
- transaction.commit_unless_managed()
- print " * available_date added to table " + table + "."
-
-# changement from version 1.0 to 1.1: version of django 1.2
-# create specific height and width for image fields
-
-for cls, attr in ((Icon, "image"), (Marker, "picture"),
- (Route, "picture")):
- table = cls._meta.db_table
- query = QUERY_CHECK_FIELD % (table, 'width')
- cursor.execute(query)
- transaction.commit_unless_managed()
-
- row = cursor.fetchone()
- if not row:
- query_update = "ALTER TABLE "+table+" ADD COLUMN width integer"
- cursor.execute(query_update)
- transaction.commit_unless_managed()
- query_update = "ALTER TABLE "+table+" ADD COLUMN height integer"
- cursor.execute(query_update)
- transaction.commit_unless_managed()
- for obj in cls.objects.all():
- image = getattr(obj, attr)
- if not image:
- continue
- obj.width = image.width
- obj.height = image.height
- obj.save()
- print " * height and width of " + table + " corrected"
-
-# changement from version 1.0 to 1.1: multiple selection of categories
-
-for cls in (Marker, Route):
- table = cls._meta.db_table[len("main_"):]
- query = QUERY_CHECK_TABLE % ('main_' + table + '_categories')
- cursor.execute(query)
- transaction.commit_unless_managed()
-
- row = cursor.fetchone()
- if row:
- continue
- query_create = """
-CREATE TABLE "main_%s_categories" (
- "id" serial NOT NULL PRIMARY KEY,
- "%s_id" integer NOT NULL REFERENCES "main_%s" ("id") DEFERRABLE INITIALLY DEFERRED,
- "subcategory_id" integer NOT NULL REFERENCES "main_subcategory" ("id") DEFERRABLE INITIALLY DEFERRED,
- UNIQUE ("%s_id", "subcategory_id"));
-""" % (table, table, table, table)
- cursor.execute(query_create)
- transaction.commit_unless_managed()
- for obj in cls.objects.all():
- query = "select subcategory_id from main_%s where id=%d" % (table,
- obj.id)
- cursor.execute(query)
- transaction.commit_unless_managed()
-
- row = cursor.fetchone()
- if row:
- obj.categories.add(SubCategory.objects.get(id=row[0]))
- obj.save()
- query = "ALTER TABLE main_%s DROP COLUMN subcategory_id;" % table
- cursor.execute(query)
- transaction.commit_unless_managed()
- print " * main_%s_categories created" % table
-
-# -> version 1.2: associate point to route (for the future)
-query = QUERY_CHECK_FIELD % ('main_marker', 'route_id')
-cursor.execute(query)
-transaction.commit_unless_managed()
-
-row = cursor.fetchone()
-if not row:
- query_update = 'ALTER TABLE "main_marker" ADD COLUMN \
-"route_id" integer REFERENCES "main_route" ("id") DEFERRABLE INITIALLY DEFERRED'
- cursor.execute(query_update)
- transaction.commit_unless_managed()
- print " * route_id added to table main_marker."
-
-# -> version 1.3: file associated to routes
-query = QUERY_CHECK_TABLE % 'main_routefile'
-cursor.execute(query)
-transaction.commit_unless_managed()
-
-row = cursor.fetchone()
-if not row:
- query_create = """
- CREATE TABLE "main_routefile" (
- "id" serial NOT NULL PRIMARY KEY,
- "name" varchar(150) NOT NULL,
- "raw_file" varchar(100) NOT NULL,
- "simplified_file" varchar(100),
- "file_type" varchar(1) NOT NULL
- )
- ;
- ALTER TABLE "main_route" ADD COLUMN
- "associated_file_id" integer REFERENCES "main_routefile" ("id")
- DEFERRABLE INITIALLY DEFERRED;
- """
- cursor.execute(query_create)
- transaction.commit_unless_managed()
- print " * main_routefile created"
-
-# early versions before 0.1: save route with wrong SRID
-# only errors with default SRID is managed adapt the script for your SRID
-
-changed = False
-routes = Route.objects.all()
-for route in routes:
- # only one test: assume each point as been save with the same SRID...
- if route.route and route.route.srid == 4326 and \
- route.route[0][0] > 90 or route.route[0][0] < -90:
- changed = True
- new_route = []
- for pt in route.route:
- pt = proj.TransformPoint(pt[0], pt[1])
- new_route.append((pt[0], pt[1]))
- route.route = LineString(new_route)
- route.save()
-if changed:
- print " * projections of routes corrected"