Bugfix: erreur lors de l'output de messages pendant la création des vues
[auf_django_references.git] / auf / django / references / management / __init__.py
CommitLineData
652c5d02
EMS
1# encoding: utf-8
2
a10aee41 3from django import db
652c5d02 4from django.db.models import get_models, signals
67c788a8 5from django.conf import settings
652c5d02
EMS
6
7import auf.django.references.models
8
9def post_syncdb(sender, **kwargs):
a10aee41
EMS
10 """Création des vues vers datamaster."""
11
12 # On ne crée des vues que si on est sur une BD MySQL.
13 # L'attribut db.connection.vendor n'est présent qu'à partir de Django
14 # 1.3
15 if (hasattr(db.connection, 'vendor') and db.connection.vendor != 'mysql') or \
16 'mysql' not in db.backend.__name__:
17 return
18
19 cursor = db.connection.cursor()
20
21 # Vérifions qu'on a une BD qui s'appelle 'datamaster'
22 if not cursor.execute("SHOW DATABASES LIKE 'datamaster'"):
23 return
24
25 # Déterminons la liste de tables de référence dans datamaster
26 cursor.execute("SHOW TABLES IN datamaster LIKE 'ref\\_%%'")
27 datamaster_tables = set(row[0] for row in cursor)
28
29 # Déterminons la liste de tables que nous avons déjà et
30 # enlevons-les des tables de datamaster
31 cursor.execute("SHOW FULL TABLES WHERE Table_type != 'VIEW'")
32 my_tables = set(row[0] for row in cursor)
33 datamaster_tables.difference_update(my_tables)
34
35 # On peut maintenant créer les vues
36 cursor = db.connection.cursor()
37 for table in datamaster_tables:
97462e05 38 print u"Création d'une vue vers datamaster.%s" % table
a10aee41
EMS
39 cursor.execute(
40 'CREATE OR REPLACE VIEW `%s` AS SELECT * FROM datamaster.`%s`' % (table, table)
41 )
652c5d02
EMS
42
43signals.post_syncdb.connect(post_syncdb, sender=auf.django.references.models)