qrurls/models.py
author Tero Marttila <terom@fixme.fi>
Mon, 15 Jul 2013 03:02:49 +0300
changeset 6 e821a59bf3a7
parent 4 d56f48f6c94b
child 7 8202196630d3
permissions -rw-r--r--
show published state for url items
from django.db import models
from django.core.urlresolvers import reverse
import django.utils.http
from django.contrib.sites.models import get_current_site
from django.utils import timezone

QRCODE_API = 'https://chart.googleapis.com/chart?cht=qr&chs={width}x{height}&chl={url}'

class URL(models.Model):
    shorturl = models.SlugField(unique=True)

    class Meta:
        verbose_name = u"URL"
        verbose_name_plural = u"URLs"

    def qrcode_img (self, size=512) :
        return QRCODE_API.format(
                width=size, height=size,
                url=django.utils.http.urlquote(self.qrcode_url()),
        )

    def qrcode_url (self) :
        return 'http://{domain}{url}'.format(
                domain = get_current_site(None).domain,
                url = self.get_absolute_url(),
        )

    def get_absolute_url (self) :
        return reverse('shorturl', args=[self.shorturl])

    def get_item (self, now=None) :
        if now is None :
            now = timezone.now()

        return URLItem.objects.filter(shorturl=self, published__lt=now).order_by('-published')[0]

    def __unicode__ (self) :
        return self.shorturl

class URLItem(models.Model):
    shorturl = models.ForeignKey(URL)
    published = models.DateTimeField()
    url = models.URLField()
    
    class Meta:
        verbose_name = u"URL Item"
        verbose_name_plural = u"URL Items"
        ordering = ['published']

    def get_absolute_url (self) :
        return self.url
    
    def published_state (self) :
        now = timezone.now()

        publish_date = self.published.strftime("%Y-%m-%d")

        if now > self.published:
            td = now - self.published
        else :
            td = self.published - now

        print now, self.published, td

        days, seconds = td.days, td.seconds
        m, s = divmod(seconds, 60)
        h, m = divmod(m, 60)
        age = "{h}h {m}m {s}s".format(h=h, m=m, s=s)

        if self.published < now and days :
            return "Published ({date})".format(date=publish_date)
        elif self.published < now :
            return "Published ({age})".format(age=age)
        elif days :
            return "Scheduled ({when})".format(when=publish_date)
        else :
            return "Scheduled ({age})".format(age=age)

    def __unicode__ (self) :
        return self.url