You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
3.8 KiB

#
# 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