From c6086633113e8d7402f8d79cbdd69a0042c0a3bc Mon Sep 17 00:00:00 2001 From: Luan Date: Fri, 25 Oct 2013 11:41:15 -0200 Subject: [PATCH] Adding attachments views and models --- src/proxy/migrations/0003_create_attachment_view.py | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/proxy/models.py | 23 +++++++++++++++++++++++ 2 files changed, 108 insertions(+), 0 deletions(-) create mode 100644 src/proxy/migrations/0003_create_attachment_view.py diff --git a/src/proxy/migrations/0003_create_attachment_view.py b/src/proxy/migrations/0003_create_attachment_view.py new file mode 100644 index 0000000..f4c98ff --- /dev/null +++ b/src/proxy/migrations/0003_create_attachment_view.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from django.db import connections +from south.v2 import DataMigration +from django.db import models + +class Migration(DataMigration): + + def forwards(self, orm): + # Selecting trac database + connection = connections['trac'] + + cursor = connection.cursor() + cursor.execute(''' + CREATE OR REPLACE VIEW attachment_view AS SELECT + CONCAT(attachment.type, '/' , attachment.id, '/', attachment.filename) AS url, + attachment.type AS type, + attachment.filename as filename, + (SELECT LOWER(SUBSTRING(attachment.filename FROM '\w{2,3}$'))) AS mimetype, + attachment.author as author, + attachment.description as description, + TIMESTAMP WITH TIME ZONE 'epoch' + (attachment.time/1000000)* INTERVAL '1s' AS created + FROM attachment; + ''') + + def backwards(self, orm): + # Selecting trac database + connection = connections['trac'] + + cursor = connection.cursor() + cursor.execute('DROP VIEW attachment_view;') + + models = { + u'proxy.attachment': { + 'Meta': {'object_name': 'Attachment', 'db_table': "'attachment'", 'managed': 'False'}, + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'filename': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'key': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}), + 'size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'time': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}), + 'type': ('django.db.models.fields.TextField', [], {}) + }, + u'proxy.revision': { + 'Meta': {'object_name': 'Revision', 'db_table': "'revision_view'", 'managed': 'False'}, + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'key': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'repository_name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'rev': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + }, + u'proxy.ticket': { + 'Meta': {'object_name': 'Ticket', 'db_table': "'ticket_view'", 'managed': 'False'}, + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'component': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}), + 'keywords': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'milestone': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'priority': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'reporter': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'severity': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'status': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'summary': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'version': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + }, + u'proxy.wiki': { + 'Meta': {'object_name': 'Wiki', 'db_table': "'wiki_view'", 'managed': 'False'}, + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}), + 'wiki_text': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + } + } + + complete_apps = ['proxy'] + symmetrical = True diff --git a/src/proxy/models.py b/src/proxy/models.py index 548e07e..4f3a025 100644 --- a/src/proxy/models.py +++ b/src/proxy/models.py @@ -6,6 +6,29 @@ from accounts.models import User from hitcount.models import HitCountModelMixin +class Attachment(models.Model, HitCountModelMixin): + url = models.TextField(primary_key=True) + type = models.TextField() + filename = models.TextField() + author = models.TextField(blank=True) + description = models.TextField(blank=True) + created = models.DateTimeField(blank=True) + mimetype = models.TextField(blank=True) + + class Meta: + managed = False + db_table = 'attachment_view' + + def get_absolute_url(self): + return u'/raw-attachment/{}'.format(self.url) + + def get_author(self): + try: + return User.objects.get(username=self.author) + except User.DoesNotExist: + return None + + class Revision(models.Model, HitCountModelMixin): key = models.TextField(blank=True, primary_key=True) rev = models.TextField(blank=True) -- libgit2 0.21.2