Commit c6086633113e8d7402f8d79cbdd69a0042c0a3bc

Authored by Luan
1 parent 746c6fa1

Adding attachments views and models

src/proxy/migrations/0003_create_attachment_view.py 0 → 100644
... ... @@ -0,0 +1,85 @@
  1 +# -*- coding: utf-8 -*-
  2 +import datetime
  3 +from south.db import db
  4 +from django.db import connections
  5 +from south.v2 import DataMigration
  6 +from django.db import models
  7 +
  8 +class Migration(DataMigration):
  9 +
  10 + def forwards(self, orm):
  11 + # Selecting trac database
  12 + connection = connections['trac']
  13 +
  14 + cursor = connection.cursor()
  15 + cursor.execute('''
  16 + CREATE OR REPLACE VIEW attachment_view AS SELECT
  17 + CONCAT(attachment.type, '/' , attachment.id, '/', attachment.filename) AS url,
  18 + attachment.type AS type,
  19 + attachment.filename as filename,
  20 + (SELECT LOWER(SUBSTRING(attachment.filename FROM '\w{2,3}$'))) AS mimetype,
  21 + attachment.author as author,
  22 + attachment.description as description,
  23 + TIMESTAMP WITH TIME ZONE 'epoch' + (attachment.time/1000000)* INTERVAL '1s' AS created
  24 + FROM attachment;
  25 + ''')
  26 +
  27 + def backwards(self, orm):
  28 + # Selecting trac database
  29 + connection = connections['trac']
  30 +
  31 + cursor = connection.cursor()
  32 + cursor.execute('DROP VIEW attachment_view;')
  33 +
  34 + models = {
  35 + u'proxy.attachment': {
  36 + 'Meta': {'object_name': 'Attachment', 'db_table': "'attachment'", 'managed': 'False'},
  37 + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  38 + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  39 + 'filename': ('django.db.models.fields.TextField', [], {}),
  40 + 'id': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  41 + 'key': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),
  42 + 'size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
  43 + 'time': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),
  44 + 'type': ('django.db.models.fields.TextField', [], {})
  45 + },
  46 + u'proxy.revision': {
  47 + 'Meta': {'object_name': 'Revision', 'db_table': "'revision_view'", 'managed': 'False'},
  48 + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  49 + 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  50 + 'key': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),
  51 + 'message': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  52 + 'repository_name': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  53 + 'rev': ('django.db.models.fields.TextField', [], {'blank': 'True'})
  54 + },
  55 + u'proxy.ticket': {
  56 + 'Meta': {'object_name': 'Ticket', 'db_table': "'ticket_view'", 'managed': 'False'},
  57 + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  58 + 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  59 + 'component': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  60 + 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  61 + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  62 + 'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
  63 + 'keywords': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  64 + 'milestone': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  65 + 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  66 + 'priority': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  67 + 'reporter': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  68 + 'severity': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  69 + 'status': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  70 + 'summary': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  71 + 'version': ('django.db.models.fields.TextField', [], {'blank': 'True'})
  72 + },
  73 + u'proxy.wiki': {
  74 + 'Meta': {'object_name': 'Wiki', 'db_table': "'wiki_view'", 'managed': 'False'},
  75 + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  76 + 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  77 + 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  78 + 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  79 + 'name': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),
  80 + 'wiki_text': ('django.db.models.fields.TextField', [], {'blank': 'True'})
  81 + }
  82 + }
  83 +
  84 + complete_apps = ['proxy']
  85 + symmetrical = True
... ...
src/proxy/models.py
... ... @@ -6,6 +6,29 @@ from accounts.models import User
6 6 from hitcount.models import HitCountModelMixin
7 7  
8 8  
  9 +class Attachment(models.Model, HitCountModelMixin):
  10 + url = models.TextField(primary_key=True)
  11 + type = models.TextField()
  12 + filename = models.TextField()
  13 + author = models.TextField(blank=True)
  14 + description = models.TextField(blank=True)
  15 + created = models.DateTimeField(blank=True)
  16 + mimetype = models.TextField(blank=True)
  17 +
  18 + class Meta:
  19 + managed = False
  20 + db_table = 'attachment_view'
  21 +
  22 + def get_absolute_url(self):
  23 + return u'/raw-attachment/{}'.format(self.url)
  24 +
  25 + def get_author(self):
  26 + try:
  27 + return User.objects.get(username=self.author)
  28 + except User.DoesNotExist:
  29 + return None
  30 +
  31 +
9 32 class Revision(models.Model, HitCountModelMixin):
10 33 key = models.TextField(blank=True, primary_key=True)
11 34 rev = models.TextField(blank=True)
... ...