diff options
Diffstat (limited to 'program/management/commands/importprogramslots.py')
-rw-r--r-- | program/management/commands/importprogramslots.py | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/program/management/commands/importprogramslots.py b/program/management/commands/importprogramslots.py new file mode 100644 index 0000000..86e3038 --- /dev/null +++ b/program/management/commands/importprogramslots.py @@ -0,0 +1,96 @@ +from django.core.exceptions import ObjectDoesNotExist +from django.core.management.base import NoArgsCommand +from django.utils.html import strip_tags + +from datetime import time +import MySQLdb + +from models import Show, ProgramSlot, RRule + +USER = 'helsinki' +PASSWD = 'helsinki' +DB = 'helsinki' + +RRULES = { + 0: RRule.objects.get(pk=1), + 7: RRule.objects.get(pk=3), + 14: RRule.objects.get(pk=4), + 28: RRule.objects.get(pk=5) +} + +class Command(NoArgsCommand): + help = 'Import programslots from the current program' + + def handle_noargs(self, **options): + connection = MySQLdb.connect(user=USER, passwd=PASSWD, db=DB) + cursor = connection.cursor() + + cursor.execute("""SELECT titel, beginn, ende, erster_termin, letzter_termin, rhytmus, termin +FROM sendungen +WHERE letzter_termin > current_date AND titel NOT LIKE 'Musikprogramm' AND titel NOT LIKE '%%(Wiederholung)'""") + + counter = 0 + + for titel, beginn, ende, erster_termin, letzter_termin, rhytmus, termin in cursor.fetchall(): + titel = strip_tags(titel) + + hours, seconds = divmod(beginn.seconds, 3600) + minutes, seconds = divmod(seconds, 60) + tstart = time(hour=hours, minute=minutes, second=seconds) + + hours, seconds = divmod(ende.seconds, 3600) + minutes, seconds = divmod(seconds, 60) + tend = time(hour=hours, minute=minutes, second=seconds) + + try: + rrule = RRULES[rhytmus] + try: + show = Show.objects.get(name=titel) + except ObjectDoesNotExist: + print 'show with name "%s" not found' % titel + else: + programslot = ProgramSlot(rrule=rrule, byweekday=termin, show=show, dstart=erster_termin, tstart=tstart, + tend=tend, until=letzter_termin) + try: + programslot.save() + counter += 1 + except: + pass + except KeyError: + print 'rhythmus "%i" is not supported for sendung "%s"' % (rhytmus, titel) + + cursor.execute("""SELECT titel, beginn, ende, erster_termin, letzter_termin, rhytmus, termin +FROM sendungen +WHERE letzter_termin > current_date AND titel LIKE '%%(Wiederholung)'""") + + for titel, beginn, ende, erster_termin, letzter_termin, rhytmus, termin in cursor.fetchall(): + titel = strip_tags(titel[:-15]) + + hours, seconds = divmod(beginn.seconds, 3600) + minutes, seconds = divmod(seconds, 60) + tstart = time(hour=hours, minute=minutes, second=seconds) + + hours, seconds = divmod(ende.seconds, 3600) + minutes, seconds = divmod(seconds, 60) + tend = time(hour=hours, minute=minutes, second=seconds) + + try: + rrule = RRULES[rhytmus] + try: + show = Show.objects.get(name=titel) + except ObjectDoesNotExist: + print 'show with name "%s" not found' % titel + else: + programslot = ProgramSlot(rrule=rrule, byweekday=termin, show=show, dstart=erster_termin, tstart=tstart, tend=tend, until=letzter_termin, is_repetition=True) + try: + programslot.save() + counter += 1 + except: + pass + except KeyError: + print 'rhythmus "%i" is not supported for sendung "%s"' % (rhytmus, titel) + + cursor.close() + connection.close() + + print '%i programslots imported' % counter |