26 ) |
26 ) |
27 |
27 |
28 def get_absolute_url (self) : |
28 def get_absolute_url (self) : |
29 return reverse('shorturl', args=[self.shorturl]) |
29 return reverse('shorturl', args=[self.shorturl]) |
30 |
30 |
31 def get_item (self, now=None) : |
31 def active_item(self, now=None) : |
|
32 """Currently published URLItem.""" |
32 if now is None : |
33 if now is None : |
33 now = timezone.now() |
34 now = timezone.now() |
34 |
35 |
35 return URLItem.objects.filter(shorturl=self, published__lt=now).order_by('-published')[0] |
36 return URLItem.objects.filter(shorturl=self, published__lt=now).order_by('-published')[0] |
|
37 |
|
38 def upcoming_item(self, now=None) : |
|
39 """Following published URLItem.""" |
|
40 if now is None : |
|
41 now = timezone.now() |
|
42 |
|
43 return URLItem.objects.filter(shorturl=self, published__lt=now).order_by('published')[0] |
36 |
44 |
37 def __unicode__ (self) : |
45 def __unicode__ (self) : |
38 return self.shorturl |
46 return self.shorturl |
39 |
47 |
40 class URLItem(models.Model): |
48 class URLItem(models.Model): |
48 ordering = ['published'] |
56 ordering = ['published'] |
49 |
57 |
50 def get_absolute_url (self) : |
58 def get_absolute_url (self) : |
51 return self.url |
59 return self.url |
52 |
60 |
53 def published_state (self) : |
61 def published_age (self) : |
54 now = timezone.now() |
62 now = timezone.now() |
55 |
|
56 publish_date = self.published.strftime("%Y-%m-%d") |
|
57 |
63 |
58 if now > self.published: |
64 if now > self.published: |
59 td = now - self.published |
65 td = now - self.published |
60 else : |
66 else : |
61 td = self.published - now |
67 td = self.published - now |
62 |
68 |
63 print now, self.published, td |
|
64 |
|
65 days, seconds = td.days, td.seconds |
69 days, seconds = td.days, td.seconds |
66 m, s = divmod(seconds, 60) |
70 m, s = divmod(seconds, 60) |
67 h, m = divmod(m, 60) |
71 h, m = divmod(m, 60) |
68 age = "{h}h {m}m {s}s".format(h=h, m=m, s=s) |
72 |
|
73 return days, "{h}h {m}m {s}s".format(h=h, m=m, s=s) |
|
74 |
|
75 def published_state (self) : |
|
76 now = timezone.now() |
|
77 |
|
78 publish_date = self.published.strftime("%Y-%m-%d") |
|
79 |
|
80 days, age = self.published_age() |
69 |
81 |
70 if self.published < now and days : |
82 if self.published < now and days : |
71 return "Published ({date})".format(date=publish_date) |
83 return "Published ({date})".format(date=publish_date) |
72 elif self.published < now : |
84 elif self.published < now : |
73 return "Published ({age})".format(age=age) |
85 return "Published ({age})".format(age=age) |
75 return "Scheduled ({when})".format(when=publish_date) |
87 return "Scheduled ({when})".format(when=publish_date) |
76 else : |
88 else : |
77 return "Scheduled ({age})".format(age=age) |
89 return "Scheduled ({age})".format(age=age) |
78 |
90 |
79 def __unicode__ (self) : |
91 def __unicode__ (self) : |
80 return self.url |
92 days, age = self.published_age() |
|
93 |
|
94 return u"[{days}d {age}] {url}".format( |
|
95 url=self.get_absolute_url(), |
|
96 days=days, |
|
97 age=age, |
|
98 ) |