show published state for url items
authorTero Marttila <terom@fixme.fi>
Mon, 15 Jul 2013 03:02:49 +0300
changeset 6 e821a59bf3a7
parent 5 8c15ae21309f
child 7 8202196630d3
show published state for url items
qrurls/admin.py
qrurls/models.py
qrurls/views.py
--- a/qrurls/admin.py	Mon Jul 15 02:43:35 2013 +0300
+++ b/qrurls/admin.py	Mon Jul 15 03:02:49 2013 +0300
@@ -31,8 +31,9 @@
 
 class URLItemAdmin (admin.ModelAdmin) :
     list_display = (
-        'shorturl', 'published', 'get_absolute_url',
+        'shorturl', 'get_absolute_url', 'published_state',
     )
+    readonly_fields = ('published_state',)
     fieldsets = (
         ("Publishing", {
             'fields': ('shorturl', 'published', ),
--- a/qrurls/models.py	Mon Jul 15 02:43:35 2013 +0300
+++ b/qrurls/models.py	Mon Jul 15 03:02:49 2013 +0300
@@ -2,6 +2,7 @@
 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}'
 
@@ -27,6 +28,12 @@
     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
 
@@ -43,5 +50,31 @@
     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
--- a/qrurls/views.py	Mon Jul 15 02:43:35 2013 +0300
+++ b/qrurls/views.py	Mon Jul 15 03:02:49 2013 +0300
@@ -1,5 +1,4 @@
 from django.http import HttpResponse, HttpResponseRedirect, Http404
-from django.utils import timezone
 
 from qrurls.models import URL, URLItem
 
@@ -12,8 +11,7 @@
 
     try :
         # most recent
-        now = timezone.now()
-        url_item = URLItem.objects.filter(shorturl=url, published__lt=now).order_by('-published')[0]
+        url_item = url.get_item()
     except IndexError :
         raise Http404()