diff --git a/colab/proxy/trac/migrations/0001_initial.py b/colab/proxy/trac/migrations/0001_initial.py index 20f94eb..b9b03cf 100644 --- a/colab/proxy/trac/migrations/0001_initial.py +++ b/colab/proxy/trac/migrations/0001_initial.py @@ -1,141 +1,124 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations, connections - - -def create_views(apps, schema_editor): - connection = connections['trac'] - - cursor = connection.cursor() - - # revision_view - cursor.execute(''' - CREATE OR REPLACE VIEW revision_view AS SELECT - revision.rev, - revision.author, - revision.message, - repository.value AS repository_name, - TIMESTAMP WITH TIME ZONE 'epoch' + (revision.time/1000000) * INTERVAL '1s' AS created, - CONCAT(revision.repos, '-', revision.rev) AS key - FROM revision - INNER JOIN repository ON( - repository.id = revision.repos - AND repository.name = 'name' - AND repository.value != '' - ); - ''') - - # attachment_view - cursor.execute(''' - CREATE OR REPLACE VIEW attachment_view AS SELECT - CONCAT(attachment.type, '/' , attachment.id, '/', attachment.filename) AS url, - attachment.type AS used_by, - attachment.filename AS filename, - attachment.id as attach_id, - (SELECT LOWER(SUBSTRING(attachment.filename FROM '\.(\w+)$'))) AS mimetype, - attachment.author AS author, - attachment.description AS description, - attachment.size AS size, - TIMESTAMP WITH TIME ZONE 'epoch' + (attachment.time/1000000)* INTERVAL '1s' AS created - FROM attachment; - ''') - - # wiki_view - cursor.execute(''' - CREATE OR REPLACE VIEW wiki_view AS SELECT - wiki.name AS name, - (SELECT wiki2.text FROM wiki AS wiki2 WHERE wiki2.name = wiki.name - AND wiki2.version = MAX(wiki.version)) AS wiki_text, - (SELECT wiki3.author FROM wiki AS wiki3 WHERE wiki3.name = wiki.name - AND wiki3.version = 1) AS author, - string_agg(DISTINCT wiki.author, ', ') AS collaborators, - TIMESTAMP WITH TIME ZONE 'epoch' + (MIN(wiki.time)/1000000) * INTERVAL '1s' AS created, - TIMESTAMP WITH TIME ZONE 'epoch' + (MAX(wiki.time)/1000000) * INTERVAL '1s' AS modified, - (SELECT wiki4.author FROM wiki AS wiki4 WHERE wiki4.name = wiki.name - AND wiki4.version = MAX(wiki.version)) AS modified_by - FROM wiki - GROUP BY wiki.name; - ''') - - # ticket_view - cursor.execute(''' - CREATE OR REPLACE VIEW ticket_view AS SELECT - ticket.id AS id, - ticket.summary as summary, - ticket.description as description, - ticket.milestone as milestone, - ticket.priority as priority, - ticket.component as component, - ticket.version as version, - ticket.severity as severity, - ticket.reporter as reporter, - ticket.reporter as author, - ticket.status as status, - ticket.keywords as keywords, - (SELECT - string_agg(DISTINCT ticket_change.author, ', ') - FROM ticket_change WHERE ticket_change.ticket = ticket.id - GROUP BY ticket_change.ticket) as collaborators, - TIMESTAMP WITH TIME ZONE 'epoch' + (time/1000000)* INTERVAL '1s' AS created, - TIMESTAMP WITH TIME ZONE 'epoch' + (changetime/1000000) * INTERVAL '1s' AS modified, - (SELECT - ticket_change.author - FROM ticket_change - WHERE ticket_change.ticket = ticket.id - AND ticket_change.time = ticket.changetime - LIMIT 1 - ) AS modified_by - FROM ticket; - ''') - - # ticket_collab_count_view - cursor.execute(''' - CREATE OR REPLACE VIEW ticket_collab_count_view AS - SELECT - COALESCE (t1.author, t2.author) as author, - (COALESCE(t1.count, 0) + COALESCE(t2.count, 0)) as count - FROM - (SELECT author, count(*) as count - FROM ticket_change - GROUP BY author - ORDER BY author - ) AS t1 - FULL OUTER JOIN - (SELECT reporter as author, count(*) as count - FROM ticket - GROUP BY reporter - ORDER BY reporter - ) AS t2 - ON t1.author = t2.author; - ''') - - # wiki_collab_count_view - cursor.execute(''' - CREATE OR REPLACE VIEW wiki_collab_count_view AS - SELECT author, count(*) from wiki GROUP BY author; - ''') - - -def drop_views(apps, schema_editor): - connection = connections['trac'] - - cursor = connection.cursor() - cursor.execute(''' - DROP VIEW IF EXISTS revision_view; - DROP VIEW IF EXISTS ticket_view; - DROP VIEW IF EXISTS wiki_view; - DROP VIEW IF EXISTS ticket_collab_count_view; - DROP VIEW IF EXISTS wiki_collab_count_view; - DROP VIEW IF EXISTS attachment_view; - ''') +from django.db import models, migrations +import django.db.models.deletion +import hitcounter.models +from django.conf import settings class Migration(migrations.Migration): dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ - migrations.RunPython(code=create_views, reverse_code=drop_views) + migrations.CreateModel( + name='Attachment', + fields=[ + ('url', models.TextField(serialize=False, primary_key=True)), + ('attach_id', models.TextField()), + ('used_by', models.TextField()), + ('filename', models.TextField()), + ('author', models.TextField(blank=True)), + ('title', models.TextField(blank=True)), + ('description', models.TextField(blank=True)), + ('modified', models.DateTimeField(blank=True)), + ('mimetype', models.TextField(blank=True)), + ('size', models.IntegerField(blank=True)), + ], + options={ + 'verbose_name': 'Attachment', + 'verbose_name_plural': 'Attachment', + }, + bases=(models.Model, hitcounter.models.HitCounterModelMixin), + ), + migrations.CreateModel( + name='Revision', + fields=[ + ('key', models.TextField(serialize=False, primary_key=True, blank=True)), + ('rev', models.TextField(blank=True)), + ('author', models.TextField(blank=True)), + ('message', models.TextField(blank=True)), + ('description', models.TextField(blank=True)), + ('repository_name', models.TextField(blank=True)), + ('created', models.DateTimeField(null=True, blank=True)), + ('modified', models.DateTimeField(null=True, blank=True)), + ], + options={ + 'db_table': 'trac_revision', + 'verbose_name': 'Attachment', + 'verbose_name_plural': 'Attachment', + }, + bases=(models.Model, hitcounter.models.HitCounterModelMixin), + ), + migrations.CreateModel( + name='Ticket', + fields=[ + ('id', models.IntegerField(serialize=False, primary_key=True)), + ('summary', models.TextField(blank=True)), + ('description_ticket', models.TextField(blank=True)), + ('milestone', models.TextField(blank=True)), + ('priority', models.TextField(blank=True)), + ('component', models.TextField(blank=True)), + ('version', models.TextField(blank=True)), + ('severity', models.TextField(blank=True)), + ('reporter', models.TextField(blank=True)), + ('author', models.TextField(blank=True)), + ('status', models.TextField(blank=True)), + ('tag', models.TextField(blank=True)), + ('keywords', models.TextField(blank=True)), + ('collaborators', models.TextField(blank=True)), + ('created', models.DateTimeField(null=True, blank=True)), + ('modified', models.DateTimeField(null=True, blank=True)), + ('modified_by', models.TextField(blank=True)), + ], + options={ + 'verbose_name': 'Attachment', + 'verbose_name_plural': 'Attachment', + }, + bases=(models.Model, hitcounter.models.HitCounterModelMixin), + ), + migrations.CreateModel( + name='TicketCollabCount', + fields=[ + ('author', models.TextField(serialize=False, primary_key=True)), + ('count', models.IntegerField()), + ], + options={ + 'verbose_name': 'Attachment', + 'verbose_name_plural': 'Attachment', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Wiki', + fields=[ + ('title', models.TextField(serialize=False, primary_key=True)), + ('wiki_text', models.TextField(blank=True)), + ('author', models.TextField(blank=True)), + ('collaborators', models.TextField(blank=True)), + ('created', models.DateTimeField(null=True, blank=True)), + ('modified', models.DateTimeField(null=True, blank=True)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + 'verbose_name': 'Attachment', + 'verbose_name_plural': 'Attachment', + }, + bases=(models.Model, hitcounter.models.HitCounterModelMixin), + ), + migrations.CreateModel( + name='WikiCollabCount', + fields=[ + ('author', models.TextField(serialize=False, primary_key=True)), + ('count', models.IntegerField()), + ], + options={ + 'verbose_name': 'Attachment', + 'verbose_name_plural': 'Attachment', + }, + bases=(models.Model,), + ), ] diff --git a/colab/proxy/trac/tests/test_trac.py b/colab/proxy/trac/tests/test_trac.py index dc1ddd2..6366bec 100644 --- a/colab/proxy/trac/tests/test_trac.py +++ b/colab/proxy/trac/tests/test_trac.py @@ -162,6 +162,8 @@ class WikiTest(TestCase): wiki.collaborators = 'collaborators' wiki.created = '1994-11-05T08:15:30-05:00' wiki.modified = '1994-11-05T08:15:30-05:00' + from django.conf import settings + print settings.INSTALLED_APPS wiki.save() return wiki -- libgit2 0.21.2