Mercurial > public > sg101
annotate gpp/potd/management/commands/pick_potd.py @ 68:cce1fc3f8752
#16, GCalendar: clean up exception class. Put a try catch around the ExecuteBatch, as I saw it fail. No need to add any logging.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sun, 28 Jun 2009 18:48:08 +0000 |
parents | dbd703f7d63a |
children | ae89ba801e8b |
rev | line source |
---|---|
gremmie@1 | 1 """ |
gremmie@1 | 2 pick_potd is a custom manage.py command for the POTD application. |
gremmie@1 | 3 It is intended to be called from a cron job at midnight to pick the |
gremmie@1 | 4 new POTD. |
gremmie@1 | 5 """ |
gremmie@1 | 6 |
gremmie@1 | 7 import random |
gremmie@1 | 8 from django.core.management.base import NoArgsCommand |
gremmie@1 | 9 |
gremmie@1 | 10 from potd.models import Current |
gremmie@1 | 11 from potd.models import Sequence |
gremmie@1 | 12 from potd.models import Photo |
gremmie@1 | 13 |
gremmie@1 | 14 def get_sequence(): |
gremmie@1 | 15 try: |
gremmie@1 | 16 s = Sequence.objects.get(pk=1) |
gremmie@1 | 17 if s.seq: |
gremmie@1 | 18 return [int(x) for x in s.seq.split(',')] |
gremmie@1 | 19 except: |
gremmie@1 | 20 pass |
gremmie@1 | 21 return [] |
gremmie@1 | 22 |
gremmie@1 | 23 def new_sequence(): |
gremmie@1 | 24 the_ids = Photo.objects.values_list('id', flat=True).order_by('id') |
gremmie@1 | 25 ids = [] |
gremmie@1 | 26 for id in the_ids.iterator(): |
gremmie@1 | 27 ids.append(int(id)) |
gremmie@1 | 28 |
gremmie@1 | 29 random.shuffle(ids) |
gremmie@1 | 30 try: |
gremmie@1 | 31 s = Sequence.objects.get(pk=1) |
gremmie@1 | 32 except Sequence.DoesNotExist: |
gremmie@1 | 33 s = Sequence() |
gremmie@1 | 34 |
gremmie@1 | 35 s.seq = ','.join([str(id) for id in ids]) |
gremmie@1 | 36 s.save() |
gremmie@1 | 37 return ids |
gremmie@1 | 38 |
gremmie@1 | 39 class Command(NoArgsCommand): |
gremmie@1 | 40 help = "Chooses the next POTD. Run this command at midnight to update the POTD." |
gremmie@1 | 41 #requires_model_validation = False |
gremmie@1 | 42 |
gremmie@1 | 43 def handle_noargs(self, **options): |
gremmie@1 | 44 try: |
gremmie@1 | 45 c = Current.objects.get(pk=1) |
gremmie@1 | 46 current = c.potd.pk |
gremmie@1 | 47 except Current.DoesNotExist: |
gremmie@1 | 48 c = Current() |
gremmie@1 | 49 current = None |
gremmie@1 | 50 |
gremmie@1 | 51 seq = get_sequence() |
gremmie@1 | 52 if current is None or len(seq) == 0 or current == seq[-1]: |
gremmie@1 | 53 # time to generate a new random sequence |
gremmie@1 | 54 seq = new_sequence() |
gremmie@1 | 55 # set current to the first one in the sequence |
gremmie@1 | 56 if len(seq) > 0: |
gremmie@1 | 57 try: |
gremmie@1 | 58 c.potd = Photo.objects.get(pk=seq[0]) |
gremmie@1 | 59 c.potd.potd_count += 1 |
gremmie@1 | 60 c.potd.save() |
gremmie@1 | 61 c.save() |
gremmie@1 | 62 except: |
gremmie@1 | 63 pass |
gremmie@1 | 64 else: |
gremmie@1 | 65 # find current in the sequence, pick the next one |
gremmie@1 | 66 try: |
gremmie@1 | 67 i = seq.index(current) |
gremmie@1 | 68 c.potd = Photo.objects.get(pk=seq[i + 1]) |
gremmie@1 | 69 c.potd.potd_count += 1 |
gremmie@1 | 70 c.potd.save() |
gremmie@1 | 71 c.save() |
gremmie@1 | 72 except: |
gremmie@1 | 73 pass |
gremmie@1 | 74 |