diff gpp/potd/management/commands/pick_potd.py @ 1:dbd703f7d63a

Initial import of sg101 stuff from private repository.
author gremmie
date Mon, 06 Apr 2009 02:43:12 +0000
parents
children ae89ba801e8b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gpp/potd/management/commands/pick_potd.py	Mon Apr 06 02:43:12 2009 +0000
@@ -0,0 +1,74 @@
+"""
+pick_potd is a custom manage.py command for the POTD application. 
+It is intended to be called from a cron job at midnight to pick the
+new POTD.
+"""
+
+import random
+from django.core.management.base import NoArgsCommand
+
+from potd.models import Current
+from potd.models import Sequence
+from potd.models import Photo
+
+def get_sequence():
+    try:
+        s = Sequence.objects.get(pk=1)
+        if s.seq:
+            return [int(x) for x in s.seq.split(',')]
+    except:
+        pass
+    return []
+
+def new_sequence():
+    the_ids = Photo.objects.values_list('id', flat=True).order_by('id')
+    ids = []
+    for id in the_ids.iterator():
+        ids.append(int(id))
+
+    random.shuffle(ids)
+    try:
+        s = Sequence.objects.get(pk=1)
+    except Sequence.DoesNotExist:
+        s = Sequence()
+
+    s.seq = ','.join([str(id) for id in ids])
+    s.save()
+    return ids
+
+class Command(NoArgsCommand):
+    help = "Chooses the next POTD. Run this command at midnight to update the POTD."
+    #requires_model_validation = False
+
+    def handle_noargs(self, **options):
+        try:
+            c = Current.objects.get(pk=1)
+            current = c.potd.pk
+        except Current.DoesNotExist:
+            c = Current()
+            current = None
+
+        seq = get_sequence()
+        if current is None or len(seq) == 0 or current == seq[-1]:
+            # time to generate a new random sequence
+            seq = new_sequence()
+            # set current to the first one in the sequence
+            if len(seq) > 0:
+                try:
+                    c.potd = Photo.objects.get(pk=seq[0])
+                    c.potd.potd_count += 1
+                    c.potd.save()
+                    c.save()
+                except:
+                    pass
+        else:
+            # find current in the sequence, pick the next one
+            try:
+                i = seq.index(current)
+                c.potd = Photo.objects.get(pk=seq[i + 1])
+                c.potd.potd_count += 1
+                c.potd.save()
+                c.save()
+            except:
+                pass
+