87 lines
2.7 KiB
Python
87 lines
2.7 KiB
Python
from django.template.defaultfilters import slugify
|
|
from django.contrib.sites.models import Site
|
|
from django.contrib.auth.models import User
|
|
from django.conf import settings
|
|
from django.db import models
|
|
|
|
from taggit.managers import TaggableManager
|
|
|
|
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):
|
|
"""An individual Snipt."""
|
|
|
|
user = models.ForeignKey(User)
|
|
|
|
title = models.CharField(max_length=255)
|
|
description = models.TextField(blank=True, null=True)
|
|
slug = models.SlugField(max_length=255, blank=True)
|
|
tags = TaggableManager()
|
|
|
|
lexer = models.CharField(max_length=50)
|
|
code = models.TextField()
|
|
stylized = models.TextField()
|
|
|
|
key = models.CharField(max_length=100)
|
|
public = models.BooleanField(default=False)
|
|
|
|
# TODO Set back to True for production!
|
|
created = models.DateTimeField(auto_now_add=False, editable=False)
|
|
modified = models.DateTimeField(auto_now=False, editable=False)
|
|
|
|
def save(self, *args, **kwargs):
|
|
if not self.slug:
|
|
self.slug = slugify(self.title)[:50]
|
|
|
|
return super(Snipt, self).save(*args, **kwargs)
|
|
|
|
def __unicode__(self):
|
|
return self.title
|
|
|
|
def get_absolute_url(self):
|
|
return "/%s/%s/" % (self.user.username, self.slug)
|
|
|
|
#TODO This needs to be deprecated - render stylized version on save
|
|
def get_stylized(self):
|
|
if self.stylized == '':
|
|
self.stylized = highlight(self.code,
|
|
get_lexer_by_name(self.lexer,
|
|
encoding='UTF-8'),
|
|
HtmlFormatter())
|
|
self.save()
|
|
return self.stylized
|
|
else:
|
|
return self.stylized
|
|
|
|
def get_embed_url(self):
|
|
return 'http%s://%s/embed/%s/' % ('s' if settings.USE_HTTPS else '',
|
|
site.domain,
|
|
self.key)
|
|
|
|
@property
|
|
def lexer_name(self):
|
|
return get_lexer_by_name(self.lexer).name
|
|
|
|
class Comment(models.Model):
|
|
"""A comment on a Snipt"""
|
|
|
|
user = models.ForeignKey(User)
|
|
snipt = models.ForeignKey(Snipt)
|
|
|
|
comment = models.TextField()
|
|
|
|
# TODO Set back to True for production!
|
|
created = models.DateTimeField(auto_now_add=False, editable=False)
|
|
modified = models.DateTimeField(auto_now=False, editable=False)
|
|
|
|
def __unicode__(self):
|
|
return u'%s on %s' %(self.user, self.snipt)
|
|
|
|
def get_absolute_url(self):
|
|
return '%s#comment-%d' % (self.snipt.get_absolute_url(), self.id)
|