The Android Open Source Project | b558dec | 2008-10-21 07:00:00 -0700 | [diff] [blame] | 1 | #
|
| 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 |
|
| 6 | EMAIL = "onoratoj@gmail.com"
|
| 7 | PRIVATE_COOKIE = "432802670aefa458daf036597ec8136b"
|
| 8 | START_DATE = ("2006","01","01")
|
| 9 | END_DATE = ("2009","01","01")
|
| 10 |
|
| 11 |
|
| 12 |
|
| 13 | import sys, urllib, re
|
| 14 | from xml.dom import minidom
|
| 15 |
|
| 16 | def fmt(n):
|
| 17 | if n < 10:
|
| 18 | return "0" + str(n)
|
| 19 | else:
|
| 20 | return str(n)
|
| 21 |
|
| 22 | def makeDate(d):
|
| 23 | return d[0] + "-" + d[1] + "-" + d[2]
|
| 24 |
|
| 25 | def makeZDate(d):
|
| 26 | return d[0] + d[1] + d[2] + "T000000Z"
|
| 27 |
|
| 28 | url = "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")
|
| 33 | data = urllib.urlopen(url)
|
| 34 |
|
| 35 | DTSTART_TZID = re.compile("DTSTART;TZID=(.*):(.*)")
|
| 36 | DTSTART = re.compile("DTSTART:(.*)")
|
| 37 | DURATION = re.compile("DURATION:(.*)")
|
| 38 | RRULE = re.compile("RRULE:(.*)")
|
| 39 | TIME = re.compile("(....)-(..)-(..)T(..):(..):(..)....([+-])(..):(..)")
|
| 40 | TIMEZ = re.compile("(....)-(..)-(..)T(..):(..):(..)....Z")
|
| 41 |
|
| 42 | def 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 |
|
| 55 | def 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 |
|
| 71 | dom = minidom.parse(data)
|
| 72 | root = dom.documentElement
|
| 73 |
|
| 74 | entries = root.getElementsByTagName("entry")
|
| 75 |
|
| 76 | for 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 |
|