+++ /dev/null
-# -*- coding: utf-8 -*-
-import os
-import subprocess
-from django.db import models
-from django.core.urlresolvers import reverse
-from django.conf import settings
-from poetry.utils import get_hash
-
-
-class Poet(models.Model):
- name = models.CharField(max_length=50)
- path = models.CharField(max_length=255)
- slug = models.SlugField(max_length=50, unique=True, db_index=True)
- author = models.CharField(max_length=128, blank=True)
- url = models.CharField(max_length=255, blank=True)
- description = models.TextField(blank=True)
- first_line_title = models.BooleanField(default=False)
- skip_first_lines = models.IntegerField(default=0)
-
- def __unicode__(self):
- return self.name
-
- def get_absolute_url(self):
- return reverse('poetry_poet', kwargs={'slug': self.slug})
-
- def write(self):
- curdir = os.getcwd()
- os.chdir(os.path.dirname(self.path))
- proc = subprocess.Popen(self.path,
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- os.chdir(curdir)
- stdout, stderr = proc.communicate()
- text = unicode(stdout, "utf-8", errors="ignore")[:1000]
- slug = get_hash(text)
- title = ''
- if self.first_line_title:
- title, text = text.split('\n', 1)
- if self.skip_first_lines:
- text = text.split('\n', self.skip_first_lines)[-1]
- text = text.strip('\n')
- poem = self.poem_set.create(
- slug=slug,
- text=text,
- title=title
- )
- return poem
-
- def make_for_contest(self):
- assert not self.poem_set.filter(for_contest=True).exists()
- for i in range(settings.POETRY_POEMS_FOR_CONTEST):
- p = self.write()
- p.for_contest = True
- p.save()
- return self.poem_set.filter(for_contest=True)
-
- def contest_poems(self):
- return self.poem_set.filter(in_contest=True)
-
-
-class Poem(models.Model):
- slug = models.SlugField(max_length=50, db_index=True)
- title = models.CharField(max_length=255, null=True, blank=True)
- text = models.TextField()
- poet = models.ForeignKey(Poet)
- created_at = models.DateTimeField(auto_now_add=True, editable=False, db_index=True)
- seen_at = models.DateTimeField(auto_now_add=True, editable=False)
- view_count = models.IntegerField(default=1)
-
- for_contest = models.BooleanField(default=False)
- in_contest = models.BooleanField(default=False)
-
- def __unicode__(self):
- oneliner = u"%s, %s" % (self.poet.name, self.pretty_title())
- oneliner += u" [%s…]" % (u" ".join(self.text.split()[:5]))
- return oneliner
-
- def get_absolute_url(self):
- return reverse('poetry_poem', kwargs={'slug': self.slug})
-
- def pretty_title(self):
- return self.title or "***"
-
- def visit(self):
- self.view_count += 1
- self.seen_at = datetime.now()
- self.save()