Mercurial > agora-palash
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)