snipt/snipt/snipts/models.py

96 lines
3.0 KiB
Python
Raw Normal View History

2011-10-01 10:23:05 -07:00
from django.template.defaultfilters import slugify
2011-10-02 15:38:20 -07:00
from django.contrib.sites.models import Site
from django.contrib.auth.models import User
2011-10-02 15:38:20 -07:00
from django.conf import settings
from django.db import models
2011-06-05 09:51:56 -07:00
from taggit.managers import TaggableManager
2011-10-02 15:38:20 -07:00
from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters import HtmlFormatter
site = Site.objects.all()[0]
class Snipt(models.Model):
2011-10-01 10:23:05 -07:00
"""An individual Snipt."""
2011-06-05 09:51:56 -07:00
user = models.ForeignKey(User)
title = models.CharField(max_length=255)
2011-10-02 11:02:13 -07:00
description = models.TextField(blank=True, null=True)
slug = models.SlugField(max_length=255, blank=True)
2011-06-05 09:51:56 -07:00
tags = TaggableManager()
lexer = models.CharField(max_length=50)
code = models.TextField()
stylized = models.TextField()
2011-10-19 20:50:23 -07:00
line_count = models.IntegerField(blank=True, null=True, default=None)
key = models.CharField(max_length=100)
public = models.BooleanField(default=False)
2011-10-03 17:42:00 -07:00
# TODO Set back to True for production!
created = models.DateTimeField(auto_now_add=False, editable=False)
2011-10-02 13:07:47 -07:00
modified = models.DateTimeField(auto_now=False, editable=False)
2011-10-01 10:23:05 -07:00
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)[:50]
2011-10-02 11:02:13 -07:00
return super(Snipt, self).save(*args, **kwargs)
2011-10-01 10:23:05 -07:00
def __unicode__(self):
2011-10-01 10:23:05 -07:00
return self.title
2011-06-05 08:55:27 -07:00
2011-10-01 16:09:59 -07:00
def get_absolute_url(self):
2011-10-02 13:07:47 -07:00
return "/%s/%s/" % (self.user.username, self.slug)
2011-10-01 16:09:59 -07:00
2011-10-13 10:30:44 -07:00
#TODO This needs to be deprecated - render stylized version on save
2011-10-02 15:38:20 -07:00
def get_stylized(self):
if self.stylized == '':
self.stylized = highlight(self.code,
2011-10-19 20:50:23 -07:00
get_lexer_by_name(self.lexer, encoding='UTF-8'),
2011-10-02 15:38:20 -07:00
HtmlFormatter())
self.save()
return self.stylized
else:
return self.stylized
2011-10-19 20:50:23 -07:00
#TODO This needs to be deprecated - render line count on save
def get_line_count(self):
if not self.line_count:
self.line_count = len(self.code.split('\n'))
self.save()
return self.line_count
else:
return self.line_count
2011-10-03 17:42:00 -07:00
def get_embed_url(self):
2011-10-02 15:38:20 -07:00
return 'http%s://%s/embed/%s/' % ('s' if settings.USE_HTTPS else '',
site.domain,
self.key)
2011-10-13 10:30:44 -07:00
@property
def lexer_name(self):
return get_lexer_by_name(self.lexer).name
2011-06-05 08:55:27 -07:00
class Comment(models.Model):
"""A comment on a Snipt"""
2011-06-05 09:51:56 -07:00
user = models.ForeignKey(User)
snipt = models.ForeignKey(Snipt)
2011-06-05 08:55:27 -07:00
comment = models.TextField()
2011-10-03 17:42:00 -07:00
# TODO Set back to True for production!
2011-10-02 11:02:13 -07:00
created = models.DateTimeField(auto_now_add=False, editable=False)
2011-10-02 13:07:47 -07:00
modified = models.DateTimeField(auto_now=False, editable=False)
2011-10-01 10:23:05 -07:00
def __unicode__(self):
return u'%s on %s' %(self.user, self.snipt)
2011-10-03 17:42:00 -07:00
def get_absolute_url(self):
return '%s#comment-%d' % (self.snipt.get_absolute_url(), self.id)