terom@0: from django.db import models terom@2: from django.core.urlresolvers import reverse terom@4: import django.utils.http terom@4: from django.contrib.sites.models import get_current_site terom@6: from django.utils import timezone terom@4: terom@18: QRCODE_API = 'https://chart.googleapis.com/chart?cht=qr&chs={width}x{height}&chl={url}&chld=H' terom@0: terom@2: class URL(models.Model): terom@2: shorturl = models.SlugField(unique=True) terom@2: terom@3: class Meta: terom@12: verbose_name = u"URL Feed" terom@12: verbose_name_plural = u"URL Feeds" terom@3: terom@4: def qrcode_img (self, size=512) : terom@4: return QRCODE_API.format( terom@4: width=size, height=size, terom@4: url=django.utils.http.urlquote(self.qrcode_url()), terom@4: ) terom@4: terom@4: def qrcode_url (self) : terom@4: return 'http://{domain}{url}'.format( terom@4: domain = get_current_site(None).domain, terom@4: url = self.get_absolute_url(), terom@17: ).upper() terom@4: terom@2: def get_absolute_url (self) : terom@2: return reverse('shorturl', args=[self.shorturl]) terom@2: terom@7: def active_item(self, now=None) : terom@7: """Currently published URLItem.""" terom@6: if now is None : terom@6: now = timezone.now() terom@6: terom@16: try : terom@16: return URLItem.objects.filter(shorturl=self, published__lt=now).order_by('-published')[0] terom@16: except IndexError : terom@16: return None terom@6: terom@7: def upcoming_item(self, now=None) : terom@7: """Following published URLItem.""" terom@7: if now is None : terom@7: now = timezone.now() terom@7: terom@16: try : terom@16: return URLItem.objects.filter(shorturl=self, published__gt=now).order_by('published')[0] terom@16: except IndexError : terom@16: return None terom@7: terom@2: def __unicode__ (self) : terom@2: return self.shorturl terom@2: terom@2: class URLItem(models.Model): terom@2: shorturl = models.ForeignKey(URL) terom@2: published = models.DateTimeField() terom@2: url = models.URLField() terom@2: terom@3: class Meta: terom@3: verbose_name = u"URL Item" terom@3: verbose_name_plural = u"URL Items" terom@3: ordering = ['published'] terom@3: terom@2: def get_absolute_url (self) : terom@2: return self.url terom@2: terom@7: def published_age (self) : terom@6: now = timezone.now() terom@6: terom@6: if now > self.published: terom@6: td = now - self.published terom@6: else : terom@6: td = self.published - now terom@6: terom@6: days, seconds = td.days, td.seconds terom@6: m, s = divmod(seconds, 60) terom@6: h, m = divmod(m, 60) terom@7: terom@9: return (self.published < now), days, "{h}h {m}m {s}s".format(h=h, m=m, s=s) terom@7: terom@7: def published_state (self) : terom@9: date = self.published.strftime("%Y-%m-%d") terom@9: published, days, age = self.published_age() terom@6: terom@9: if published and days : terom@9: return "[{date}]".format(date=date) terom@9: elif published : terom@9: return "[{age}]".format(age=age) terom@6: elif days : terom@9: return "({when})".format(when=date) terom@6: else : terom@9: return "({age})".format(age=age) terom@6: terom@2: def __unicode__ (self) : terom@9: return u"{published_state} {url}".format( terom@9: published_state=self.published_state(), terom@7: url=self.get_absolute_url(), terom@7: )