diff apps/snippet/models.py @ 42:ab608f27ecd5

Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
author Jordi Gutiérrez Hermoso <jordigh@gmail.com>
date Thu, 29 Jul 2010 00:25:30 -0500
parents f14aaa98306a
children b7c1c22fdfe8
line wrap: on
line diff
--- a/apps/snippet/models.py	Thu Jul 08 20:27:23 2010 -0500
+++ b/apps/snippet/models.py	Thu Jul 29 00:25:30 2010 -0500
@@ -1,18 +1,52 @@
+import datetime
+import difflib
+import random
+import agora.apps.mptt as mptt
 from django.db import models
-from django.contrib.auth.models import User
+from django.db.models import permalink
+from django.utils.translation import ugettext_lazy as _
+from agora.apps.snippet.highlight import LEXER_DEFAULT, pygmentize
+
+t = 'abcdefghijkmnopqrstuvwwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ1234567890'
+def generate_secret_id(length=4):
+    return ''.join([random.choice(t) for i in range(length)])
 
 class Snippet(models.Model):
-    code = models.TextField(max_length=32768)
-    name = models.CharField(max_length=256)
-    description = models.TextField(max_length=1024)
-    uploader = models.ForeignKey(User)
-    pub_date = models.DateTimeField('date uploaded')
-    mod_date = models.DateTimeField('date last modified')
+    secret_id = models.CharField(_(u'Secret ID'), max_length=4, blank=True)
+    title = models.CharField(_(u'Title'), max_length=120, blank=True)
+    author = models.CharField(_(u'Author'), max_length=30, blank=True)
+    content = models.TextField(_(u'Content'), )
+    content_highlighted = models.TextField(_(u'Highlighted Content'), blank=True)
+    lexer = models.CharField(_(u'Lexer'), max_length=30, default=LEXER_DEFAULT)
+    published = models.DateTimeField(_(u'Published'), blank=True)
+    expires = models.DateTimeField(_(u'Expires'), blank=True, help_text='asdf')
+    parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
+
+    class Meta:
+        ordering = ('-published',)
+
+    def get_linecount(self):
+        return len(self.content.splitlines())
+
+    def content_splitted(self):
+        return self.content_highlighted.splitlines()
+
+    def save(self, *args, **kwargs):
+        if not self.pk:
+            self.published = datetime.datetime.now()
+            self.secret_id = generate_secret_id()
+        self.content_highlighted = pygmentize(self.content, self.lexer)
+        super(Snippet, self).save(*args, **kwargs)
+
+    @permalink
+    def get_absolute_url(self):
+        return ('snippet_details', (self.secret_id,))
 
     def __unicode__(self):
-        if self.name:
-            return self.name
-        return self.id
+        return '%s' % self.secret_id
+
+mptt.register(Snippet, order_insertion_by=['content'])
+
 
 class CodeLanguage(models.Model):
     name = models.CharField(max_length=64)