qrurls/models.py
author Tero Marttila <terom@fixme.fi>
Thu, 15 Aug 2013 01:39:18 +0300
changeset 43 3b1f1a928283
parent 41 4d38296d58a3
child 44 bbfd0adb2bc3
permissions -rw-r--r--
rename qrurls image view to item view
27
ffcffe3024f1 sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
     1
import datetime
41
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
     2
import hashlib
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
     3
import os.path
27
ffcffe3024f1 sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
     4
0
1fc671165892 django startproject/app skeleton
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
from django.db import models
41
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
     6
import django.core.files.storage
2
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
     7
from django.core.urlresolvers import reverse
4
d56f48f6c94b URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
     8
import django.utils.http
d56f48f6c94b URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
     9
from django.contrib.sites.models import get_current_site
6
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    10
from django.utils import timezone
4
d56f48f6c94b URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
    11
18
dd08de6f1fe3 user high error correction rate for qrcode
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
    12
QRCODE_API = 'https://chart.googleapis.com/chart?cht=qr&chs={width}x{height}&chl={url}&chld=H'
41
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    13
IMAGES_MEDIA = 'qrurls-images'
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    14
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    15
class SecretFileSystemStorage (django.core.files.storage.FileSystemStorage) :
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    16
    """
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    17
        Store files named by a sha1 hash of their contents.
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    18
    """
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    19
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    20
    HASH = hashlib.sha1
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    21
    
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    22
    def _hash (self, content) :
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    23
        """Compute hash for given UploadedFile (as a hex string)."""
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    24
        hash = self.HASH()
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    25
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    26
        for chunk in content.chunks() :
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    27
            hash.update(chunk)
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    28
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    29
        return hash.hexdigest()
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    30
    
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    31
    def save (self, name, content) :
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    32
        # Get the proper name for the file, as it will actually be saved.
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    33
        if name is None:
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    34
            name = content.name
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    35
        
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    36
        dirname, filename = os.path.split(name)
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    37
        basename, fileext = os.path.splitext(filename)
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    38
        
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    39
        # hash
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    40
        name = "%s/%s%s" % (dirname, self._hash(content), fileext)
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    41
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    42
        return super(SecretFileSystemStorage, self).save(name, content)
0
1fc671165892 django startproject/app skeleton
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
2
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    44
class URL(models.Model):
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    45
    shorturl = models.SlugField(unique=True)
27
ffcffe3024f1 sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    46
    publishing_schedule = models.TimeField(default=datetime.time(),
ffcffe3024f1 sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    47
            help_text="Default time to publish new URLItems")
2
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    48
3
e7d3f1a28b24 touchup admin ui
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    49
    class Meta:
12
7605af83cb14 add qrurls index
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    50
        verbose_name = u"URL Feed"
7605af83cb14 add qrurls index
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    51
        verbose_name_plural = u"URL Feeds"
3
e7d3f1a28b24 touchup admin ui
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    52
4
d56f48f6c94b URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
    53
    def qrcode_img (self, size=512) :
d56f48f6c94b URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
    54
        return QRCODE_API.format(
d56f48f6c94b URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
    55
                width=size, height=size,
d56f48f6c94b URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
    56
                url=django.utils.http.urlquote(self.qrcode_url()),
d56f48f6c94b URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
    57
        )
d56f48f6c94b URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
    58
d56f48f6c94b URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
    59
    def qrcode_url (self) :
22
28a72692b749 keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents: 21
diff changeset
    60
        return 'HTTP://{domain}{url}'.format(
28a72692b749 keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents: 21
diff changeset
    61
                domain = get_current_site(None).domain.upper(),
23
f9eadb627bb4 simplify urls
Tero Marttila <terom@paivola.fi>
parents: 22
diff changeset
    62
                url = self.get_absolute_url(),
22
28a72692b749 keep shorturl case sensitive, but warn if not uppercase
Tero Marttila <terom@paivola.fi>
parents: 21
diff changeset
    63
        )
4
d56f48f6c94b URL: show qrcode for URL in admin (using google charts)
Tero Marttila <terom@fixme.fi>
parents: 3
diff changeset
    64
2
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    65
    def get_absolute_url (self) :
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    66
        return reverse('shorturl', args=[self.shorturl])
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    67
7
8202196630d3 better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    68
    def active_item(self, now=None) :
8202196630d3 better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    69
        """Currently published URLItem."""
6
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    70
        if now is None :
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    71
            now = timezone.now()
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    72
16
523b3e9eddfa fixbug modelget item upcoming
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    73
        try :
523b3e9eddfa fixbug modelget item upcoming
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    74
            return URLItem.objects.filter(shorturl=self, published__lt=now).order_by('-published')[0]
523b3e9eddfa fixbug modelget item upcoming
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    75
        except IndexError :
523b3e9eddfa fixbug modelget item upcoming
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    76
            return None
6
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    77
27
ffcffe3024f1 sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    78
    def upcoming_item (self, now=None) :
7
8202196630d3 better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    79
        """Following published URLItem."""
8202196630d3 better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    80
        if now is None :
8202196630d3 better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    81
            now = timezone.now()
8202196630d3 better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    82
16
523b3e9eddfa fixbug modelget item upcoming
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    83
        try :
523b3e9eddfa fixbug modelget item upcoming
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    84
            return URLItem.objects.filter(shorturl=self, published__gt=now).order_by('published')[0]
523b3e9eddfa fixbug modelget item upcoming
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    85
        except IndexError :
523b3e9eddfa fixbug modelget item upcoming
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    86
            return None
7
8202196630d3 better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    87
27
ffcffe3024f1 sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    88
    def last_item (self) :
ffcffe3024f1 sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    89
        """The last URLItem available."""
ffcffe3024f1 sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    90
ffcffe3024f1 sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    91
        try :
ffcffe3024f1 sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    92
            return URLItem.objects.filter(shorturl=self).order_by('-published')[0]
ffcffe3024f1 sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    93
        except IndexError :
ffcffe3024f1 sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    94
            return None
ffcffe3024f1 sane defaults for published in urlitems inline form
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    95
2
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    96
    def __unicode__ (self) :
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    97
        return self.shorturl
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    98
28
d1733c82c278 migration for previous commit
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    99
class URLImage(models.Model):
41
4d38296d58a3 use sha1 names for image storage
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   100
    image = models.ImageField(upload_to=IMAGES_MEDIA, storage=SecretFileSystemStorage())
40
5eefe5a294dc qrurl image title
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
   101
    title = models.CharField(max_length=1024)
30
d0f56303d8de URLImage
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
   102
    uploaded = models.DateTimeField(auto_now_add=True)
d0f56303d8de URLImage
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
   103
d0f56303d8de URLImage
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
   104
    class Meta:
d0f56303d8de URLImage
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
   105
        verbose_name = u"URL Image"
d0f56303d8de URLImage
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
   106
        verbose_name_plural = u"URL Images"
d0f56303d8de URLImage
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
   107
        ordering = ['uploaded']
d0f56303d8de URLImage
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
   108
32
82eae853e240 tie in URLImage to URLItem
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   109
    def get_absolute_url (self) :
82eae853e240 tie in URLImage to URLItem
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   110
        return self.image.url
82eae853e240 tie in URLImage to URLItem
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   111
30
d0f56303d8de URLImage
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
   112
    def __unicode__ (self) :
d0f56303d8de URLImage
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
   113
        return self.image.name
28
d1733c82c278 migration for previous commit
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
   114
2
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   115
class URLItem(models.Model):
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   116
    shorturl = models.ForeignKey(URL)
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   117
    published = models.DateTimeField()
32
82eae853e240 tie in URLImage to URLItem
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   118
82eae853e240 tie in URLImage to URLItem
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   119
    # either-or
82eae853e240 tie in URLImage to URLItem
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   120
    url = models.URLField(blank=True) # populated from image
82eae853e240 tie in URLImage to URLItem
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   121
    image = models.ForeignKey(URLImage, null=True, blank=True)
2
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   122
    
3
e7d3f1a28b24 touchup admin ui
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   123
    class Meta:
e7d3f1a28b24 touchup admin ui
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   124
        verbose_name = u"URL Item"
e7d3f1a28b24 touchup admin ui
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   125
        verbose_name_plural = u"URL Items"
e7d3f1a28b24 touchup admin ui
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   126
        ordering = ['published']
e7d3f1a28b24 touchup admin ui
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   127
2
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   128
    def get_absolute_url (self) :
43
3b1f1a928283 rename qrurls image view to item view
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   129
        if self.url :
3b1f1a928283 rename qrurls image view to item view
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   130
            return self.url
35
acc1a366fa7c move URLItem save() override to just get_absolute_url(), since we won't have an item_id at save() time when adding
Tero Marttila <terom@fixme.fi>
parents: 33
diff changeset
   131
        else :
43
3b1f1a928283 rename qrurls image view to item view
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   132
            return reverse('shorturl_item', kwargs=dict(shorturl=self.shorturl, item_id=self.id))
2
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   133
    
7
8202196630d3 better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   134
    def published_age (self) :
6
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   135
        now = timezone.now()
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   136
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   137
        if now > self.published:
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   138
            td = now - self.published
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   139
        else :
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   140
            td = self.published - now
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   141
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   142
        days, seconds = td.days, td.seconds
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   143
        m, s = divmod(seconds, 60)
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   144
        h, m = divmod(m, 60)
7
8202196630d3 better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   145
9
ccb1736fba1a consistent published_state prefix format
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   146
        return (self.published < now), days, "{h}h {m}m {s}s".format(h=h, m=m, s=s)
7
8202196630d3 better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   147
8202196630d3 better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   148
    def published_state (self) :
9
ccb1736fba1a consistent published_state prefix format
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   149
        date = self.published.strftime("%Y-%m-%d")
ccb1736fba1a consistent published_state prefix format
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   150
        published, days, age = self.published_age()
6
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   151
9
ccb1736fba1a consistent published_state prefix format
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   152
        if published and days :
ccb1736fba1a consistent published_state prefix format
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   153
            return "[{date}]".format(date=date)
ccb1736fba1a consistent published_state prefix format
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   154
        elif published :
ccb1736fba1a consistent published_state prefix format
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   155
            return "[{age}]".format(age=age)
6
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   156
        elif days :
9
ccb1736fba1a consistent published_state prefix format
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   157
            return "({when})".format(when=date)
6
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   158
        else :
9
ccb1736fba1a consistent published_state prefix format
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   159
            return "({age})".format(age=age)
6
e821a59bf3a7 show published state for url items
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   160
2
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   161
    def __unicode__ (self) :
9
ccb1736fba1a consistent published_state prefix format
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   162
        return u"{published_state} {url}".format(
ccb1736fba1a consistent published_state prefix format
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   163
                published_state=self.published_state(),
7
8202196630d3 better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   164
                url=self.get_absolute_url(),
8202196630d3 better reporting of active/upcoming items
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   165
        )
32
82eae853e240 tie in URLImage to URLItem
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   166