blob: f5f5cb1fa8d2743a683d9db8598b6299eeaedae1 [file] [log] [blame]
The Android Open Source Projectcf013ec2009-03-03 19:32:38 -08001#
2# Usage: Fill in the configuration variables. It will download the feed
3# for it, parse it, and print out test cases to add to the unit test.
4#
5
6EMAIL = "onoratoj@gmail.com"
7PRIVATE_COOKIE = "432802670aefa458daf036597ec8136b"
8START_DATE = ("2006","01","01")
9END_DATE = ("2009","01","01")
10
11
12
13import sys, urllib, re
14from xml.dom import minidom
15
16def fmt(n):
17 if n < 10:
18 return "0" + str(n)
19 else:
20 return str(n)
21
22def makeDate(d):
23 return d[0] + "-" + d[1] + "-" + d[2]
24
25def makeZDate(d):
26 return d[0] + d[1] + d[2] + "T000000Z"
27
28url = "http://www.google.com/calendar/feeds/onoratoj@gmail.com/private-" \
29 + PRIVATE_COOKIE + "/composite?start-min=" + makeDate(START_DATE) \
30 + "&start-max=" + makeDate(END_DATE)
31
32#data = open("out.xml")
33data = urllib.urlopen(url)
34
35DTSTART_TZID = re.compile("DTSTART;TZID=(.*):(.*)")
36DTSTART = re.compile("DTSTART:(.*)")
37DURATION = re.compile("DURATION:(.*)")
38RRULE = re.compile("RRULE:(.*)")
39TIME = re.compile("(....)-(..)-(..)T(..):(..):(..)....([+-])(..):(..)")
40TIMEZ = re.compile("(....)-(..)-(..)T(..):(..):(..)....Z")
41
42def stripTimezone(str):
43 lines = str.split("\n")
44 drop = False
45 result = []
46 for line in lines:
47 if line == "BEGIN:VTIMEZONE":
48 drop = True
49 if not drop:
50 result.append(line)
51 if line == "END:VTIMEZONE":
52 drop = False
53 return result
54
55def fixInstance(s):
56 m = TIME.match(s[0])
57 if m:
58 if m.group(7) == "+":
59 sign = -1
60 else:
61 sign = 1
62 hour = int(m.group(4)) + (sign * int(m.group(8)))
63 return m.group(1) + m.group(2) + m.group(3) + "T" + fmt(hour) \
64 + m.group(5) + m.group(6) + "Z"
65 m = TIMEZ.match(s[0])
66 if m:
67 return m.group(1) + m.group(2) + m.group(3) + "T" + m.group(4) \
68 + m.group(5) + m.group(6) + "Z"
69 return s[0]
70
71dom = minidom.parse(data)
72root = dom.documentElement
73
74entries = root.getElementsByTagName("entry")
75
76for entry in entries:
77 recurrences = entry.getElementsByTagName("gd:recurrence")
78 dtstart = ""
79 tzid = ""
80 duration = ""
81 rrule = ""
82 if len(recurrences) > 0:
83 recurrence = recurrences[0]
84 s = ""
85 for c in recurrence.childNodes:
86 s = s + c.nodeValue
87 lines = stripTimezone(s)
88 for s in lines:
89 re_dtstart = DTSTART_TZID.match(s)
90 if re_dtstart:
91 dtstart = re_dtstart.group(2)
92 tzid = re_dtstart.group(1)
93 re_dtstart = DTSTART.match(s)
94 if re_dtstart:
95 dtstart = re_dtstart.group(1)
96 re_duration = DURATION.match(s)
97 if re_duration:
98 duration = re_duration.group(1)
99 re_rrule = RRULE.match(s)
100 if re_rrule:
101 rrule = re_rrule.group(1)
102 whens = entry.getElementsByTagName("gd:when")
103 instances = []
104 for w in whens:
105 startTime = w.getAttribute("startTime")
106 endTime = w.getAttribute("endTime")
107 instances.append((startTime,endTime))
108
109 instances = map(fixInstance, instances)
110 instances.sort()
111 if dtstart != "":
112 title = ""
113 for c in entry.getElementsByTagName('title')[0].childNodes:
114 title = title + c.nodeValue
115
116 print " // " + title
117 print " test(\"" + dtstart + "\","
118 print " \"" + rrule + "\","
119 print " \"" + makeZDate(START_DATE) \
120 + "\", \"" + makeZDate(END_DATE) + "\","
121 print " new String[] {"
122 for i in instances:
123 print " \"" + i + "\","
124 print " });"
125 print
126
127