Commit 139dbed9cc80172e75ea28f86b2d493f642418d2

Authored by Luan
1 parent a80fcb8f

Adding datamigration to create trac views

src/proxy/migrations/0001_create_views.py 0 → 100644
... ... @@ -0,0 +1,115 @@
  1 +# -*- coding: utf-8 -*-
  2 +import datetime
  3 +from django.db import connections
  4 +from south.db import db
  5 +from south.v2 import DataMigration
  6 +from django.db import models
  7 +
  8 +
  9 +class Migration(DataMigration):
  10 +
  11 + def forwards(self, orm):
  12 + # Selecting trac database
  13 + connection = connections['trac']
  14 +
  15 + cursor = connection.cursor()
  16 + cursor.execute('''
  17 + CREATE OR REPLACE VIEW wiki_view AS SELECT
  18 + wiki.name AS name,
  19 + (SELECT wiki2.text FROM wiki AS wiki2 WHERE wiki2.name = wiki.name
  20 + AND wiki2.version = MAX(wiki.version)) AS wiki_text,
  21 + (SELECT wiki3.author FROM wiki AS wiki3 WHERE wiki3.name = wiki.name
  22 + AND wiki3.version = 1) AS author,
  23 + string_agg(DISTINCT wiki.author, ', ') AS collaborators,
  24 + TIMESTAMP WITH TIME ZONE 'epoch' + (MAX(wiki.time)/1000000) * INTERVAL '1s' AS created,
  25 + TIMESTAMP WITH TIME ZONE 'epoch' + (MIN(wiki.time)/1000000) * INTERVAL '1s' AS modified
  26 + FROM wiki
  27 + GROUP BY wiki.name;
  28 +
  29 + CREATE OR REPLACE VIEW ticket_view AS SELECT
  30 + ticket.id AS id,
  31 + ticket.summary as summary,
  32 + ticket.description as description,
  33 + ticket.milestone as milestone,
  34 + ticket.priority as priority,
  35 + ticket.component as component,
  36 + ticket.version as version,
  37 + ticket.severity as severity,
  38 + ticket.reporter as reporter,
  39 + ticket.owner as author,
  40 + ticket.status as status,
  41 + ticket.keywords as keywords,
  42 + (SELECT
  43 + string_agg(DISTINCT ticket_change.author, ', ')
  44 + FROM ticket_change WHERE ticket_change.ticket = ticket.id
  45 + GROUP BY ticket_change.ticket) as collaborators,
  46 + TIMESTAMP WITH TIME ZONE 'epoch' + (time/1000000)* INTERVAL '1s' AS created,
  47 + TIMESTAMP WITH TIME ZONE 'epoch' + (changetime/1000000) * INTERVAL '1s' AS modified
  48 + FROM ticket;
  49 +
  50 + CREATE OR REPLACE VIEW revision_view AS SELECT
  51 + revision.rev,
  52 + revision.author,
  53 + revision.message,
  54 + repository.value AS repository_name,
  55 + TIMESTAMP WITH TIME ZONE 'epoch' + (revision.time/1000000) * INTERVAL '1s' AS created
  56 + FROM revision
  57 + INNER JOIN repository ON(
  58 + repository.id = revision.repos
  59 + AND repository.name = 'name'
  60 + AND repository.value != ''
  61 + );
  62 + ''')
  63 +
  64 + def backwards(self, orm):
  65 + # Selecting trac database
  66 + connection = connections['trac']
  67 +
  68 + cursor = connection.cursor()
  69 + cursor.execute('''
  70 + DROP VIEW IF EXISTS revision_view;
  71 + DROP VIEW IF EXISTS ticket_view;
  72 + DROP VIEW IF EXISTS wiki_view;
  73 + ''')
  74 +
  75 +
  76 + models = {
  77 + u'proxy.revision': {
  78 + 'Meta': {'object_name': 'Revision', 'db_table': "'revision_view'", 'managed': 'False'},
  79 + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  80 + 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  81 + 'message': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  82 + 'repository_name': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  83 + 'rev': ('django.db.models.fields.TextField', [], {'primary_key': 'True'})
  84 + },
  85 + u'proxy.ticket': {
  86 + 'Meta': {'object_name': 'Ticket', 'db_table': "'ticket_view'", 'managed': 'False'},
  87 + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  88 + 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  89 + 'component': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  90 + 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  91 + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  92 + 'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
  93 + 'keywords': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  94 + 'milestone': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  95 + 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  96 + 'priority': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  97 + 'reporter': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  98 + 'severity': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  99 + 'status': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  100 + 'summary': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  101 + 'version': ('django.db.models.fields.TextField', [], {'blank': 'True'})
  102 + },
  103 + u'proxy.wiki': {
  104 + 'Meta': {'object_name': 'Wiki', 'db_table': "'wiki_view'", 'managed': 'False'},
  105 + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  106 + 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  107 + 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  108 + 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  109 + 'name': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),
  110 + 'wiki_text': ('django.db.models.fields.TextField', [], {'blank': 'True'})
  111 + }
  112 + }
  113 +
  114 + complete_apps = ['proxy']
  115 + symmetrical = True
... ...
src/proxy/migrations/__init__.py 0 → 100644