128 lines
3.8 KiB
Python
128 lines
3.8 KiB
Python
|
#
|
||
|
# 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
|
||
|
|
||
|
|