--- a/qrurls/models.py Fri Sep 06 01:36:33 2013 +0300
+++ b/qrurls/models.py Sat Sep 07 15:35:56 2013 +0300
@@ -1,5 +1,6 @@
import datetime
import hashlib
+import logging
import os.path
from django.db import models
@@ -9,6 +10,8 @@
from django.contrib.sites.models import get_current_site
from django.utils import timezone
+log = logging.getLogger('qrurls.models')
+
QRCODE_API = 'https://chart.googleapis.com/chart?cht=qr&chs={width}x{height}&chl={url}&chld=H'
IMAGES_MEDIA = 'qrurls-images'
@@ -179,6 +182,41 @@
verbose_name_plural = u"URL Items"
ordering = ['published']
+ @classmethod
+ def search (cls, shorturl=None, shorturl_id=None, item_id=None, related=()) :
+ """
+ Return the URLItem for a given shorturl, either the given specific one,
+ or the latest, from the database.
+
+ Raises URLItem.NotFound
+ """
+ # JOIN against shorturl, urlimage
+ url_item = cls.objects.select_related(*related)
+
+ if shorturl:
+ url_item = url_item.filter(shorturl__shorturl=shorturl)
+ elif shorturl_id:
+ shorturl_id = int(shorturl_id)
+ url_item = url_item.filter(shorturl__id=shorturl_id)
+ else:
+ raise cls.DoesNotExist()
+
+ # match for published items
+ now = timezone.now()
+ url_item = url_item.filter(published__lt=now).order_by('-published')
+
+ log.info("Search URLItem @ %s", now)
+
+ if item_id :
+ # specific, but still the published on
+ return url_item.get(id=int(item_id)) # raises DoesNotExist
+ else :
+ # most recent
+ try:
+ return url_item[0]
+ except IndexError:
+ raise DoesNotExist()
+
def get_absolute_url (self) :
if self.url :
return self.url