Commit | Line | Data |
---|---|---|
652c5d02 EMS |
1 | # encoding: utf-8 |
2 | ||
a10aee41 | 3 | from django import db |
652c5d02 | 4 | from django.db.models import get_models, signals |
67c788a8 | 5 | from django.conf import settings |
652c5d02 EMS |
6 | |
7 | import auf.django.references.models | |
8 | ||
9 | def 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 | |
43 | signals.post_syncdb.connect(post_syncdb, sender=auf.django.references.models) |