summaryrefslogtreecommitdiff
path: root/program/management/commands/importprogramslots.py
blob: b527f538d8624d82eb3a3d0eb346975f05c3f356 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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 program.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