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@4: QRCODE_API = 'https://chart.googleapis.com/chart?cht=qr&chs={width}x{height}&chl={url}' terom@0: terom@2: class URL(models.Model): terom@2: shorturl = models.SlugField(unique=True) terom@2: terom@3: class Meta: terom@3: verbose_name = u"URL" terom@3: verbose_name_plural = u"URLs" 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@4: ) terom@4: terom@2: def get_absolute_url (self) : terom@2: return reverse('shorturl', args=[self.shorturl]) terom@2: terom@6: def get_item (self, now=None) : terom@6: if now is None : terom@6: now = timezone.now() terom@6: terom@6: return URLItem.objects.filter(shorturl=self, published__lt=now).order_by('-published')[0] terom@6: 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@6: def published_state (self) : terom@6: now = timezone.now() terom@6: terom@6: publish_date = self.published.strftime("%Y-%m-%d") 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: print now, self.published, td 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@6: age = "{h}h {m}m {s}s".format(h=h, m=m, s=s) terom@6: terom@6: if self.published < now and days : terom@6: return "Published ({date})".format(date=publish_date) terom@6: elif self.published < now : terom@6: return "Published ({age})".format(age=age) terom@6: elif days : terom@6: return "Scheduled ({when})".format(when=publish_date) terom@6: else : terom@6: return "Scheduled ({age})".format(age=age) terom@6: terom@2: def __unicode__ (self) : terom@2: return self.url