| #
|
| # Usage: Fill in the configuration variables. It will download the feed
|
| # for it, parse it, and print out test cases to add to the unit test.
|
| #
|
|
|
| EMAIL = "onoratoj@gmail.com"
|
| PRIVATE_COOKIE = "432802670aefa458daf036597ec8136b"
|
| START_DATE = ("2006","01","01")
|
| END_DATE = ("2009","01","01")
|
|
|
|
|
|
|
| import sys, urllib, re
|
| from xml.dom import minidom
|
|
|
| def fmt(n):
|
| if n < 10:
|
| return "0" + str(n)
|
| else:
|
| return str(n)
|
|
|
| def makeDate(d):
|
| return d[0] + "-" + d[1] + "-" + d[2]
|
|
|
| def makeZDate(d):
|
| return d[0] + d[1] + d[2] + "T000000Z"
|
|
|
| url = "http://www.google.com/calendar/feeds/onoratoj@gmail.com/private-" \
|
| + PRIVATE_COOKIE + "/composite?start-min=" + makeDate(START_DATE) \
|
| + "&start-max=" + makeDate(END_DATE)
|
|
|
| #data = open("out.xml")
|
| data = urllib.urlopen(url)
|
|
|
| DTSTART_TZID = re.compile("DTSTART;TZID=(.*):(.*)")
|
| DTSTART = re.compile("DTSTART:(.*)")
|
| DURATION = re.compile("DURATION:(.*)")
|
| RRULE = re.compile("RRULE:(.*)")
|
| TIME = re.compile("(....)-(..)-(..)T(..):(..):(..)....([+-])(..):(..)")
|
| TIMEZ = re.compile("(....)-(..)-(..)T(..):(..):(..)....Z")
|
|
|
| def stripTimezone(str):
|
| lines = str.split("\n")
|
| drop = False
|
| result = []
|
| for line in lines:
|
| if line == "BEGIN:VTIMEZONE":
|
| drop = True
|
| if not drop:
|
| result.append(line)
|
| if line == "END:VTIMEZONE":
|
| drop = False
|
| return result
|
|
|
| def fixInstance(s):
|
| m = TIME.match(s[0])
|
| if m:
|
| if m.group(7) == "+":
|
| sign = -1
|
| else:
|
| sign = 1
|
| hour = int(m.group(4)) + (sign * int(m.group(8)))
|
| return m.group(1) + m.group(2) + m.group(3) + "T" + fmt(hour) \
|
| + m.group(5) + m.group(6) + "Z"
|
| m = TIMEZ.match(s[0])
|
| if m:
|
| return m.group(1) + m.group(2) + m.group(3) + "T" + m.group(4) \
|
| + m.group(5) + m.group(6) + "Z"
|
| return s[0]
|
|
|
| dom = minidom.parse(data)
|
| root = dom.documentElement
|
|
|
| entries = root.getElementsByTagName("entry")
|
|
|
| for entry in entries:
|
| recurrences = entry.getElementsByTagName("gd:recurrence")
|
| dtstart = ""
|
| tzid = ""
|
| duration = ""
|
| rrule = ""
|
| if len(recurrences) > 0:
|
| recurrence = recurrences[0]
|
| s = ""
|
| for c in recurrence.childNodes:
|
| s = s + c.nodeValue
|
| lines = stripTimezone(s)
|
| for s in lines:
|
| re_dtstart = DTSTART_TZID.match(s)
|
| if re_dtstart:
|
| dtstart = re_dtstart.group(2)
|
| tzid = re_dtstart.group(1)
|
| re_dtstart = DTSTART.match(s)
|
| if re_dtstart:
|
| dtstart = re_dtstart.group(1)
|
| re_duration = DURATION.match(s)
|
| if re_duration:
|
| duration = re_duration.group(1)
|
| re_rrule = RRULE.match(s)
|
| if re_rrule:
|
| rrule = re_rrule.group(1)
|
| whens = entry.getElementsByTagName("gd:when")
|
| instances = []
|
| for w in whens:
|
| startTime = w.getAttribute("startTime")
|
| endTime = w.getAttribute("endTime")
|
| instances.append((startTime,endTime))
|
|
|
| instances = map(fixInstance, instances)
|
| instances.sort()
|
| if dtstart != "":
|
| title = ""
|
| for c in entry.getElementsByTagName('title')[0].childNodes:
|
| title = title + c.nodeValue
|
|
|
| print " // " + title
|
| print " test(\"" + dtstart + "\","
|
| print " \"" + rrule + "\","
|
| print " \"" + makeZDate(START_DATE) \
|
| + "\", \"" + makeZDate(END_DATE) + "\","
|
| print " new String[] {"
|
| for i in instances:
|
| print " \"" + i + "\","
|
| print " });"
|
| print
|
|
|
|
|