Home | History | Annotate | Download | only in CalendarProvider
      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 (at] 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 
    128