def uploadToGoogle(ics, email, password, calendar="default", reminder=30, \ forceReminder=False): """ Upload to your Google Calendar. Arguments: ics - vobject vevent object. email - string, your gcal account name password - string, your gcal password calendar - string, which calendar to upload to. reminder - integer, number of minutes to set reminder for. Default 30 forceReminder - boolean, If true, always set a reminder. Returns: True on success, None on failure """ # sucks that gdata won't take a timetuple or a isoformat :( # it seems that sometimes vobject doesn't give me a # datetime object and instead gives me a unicode string. # it'd be nice to handle that. if type(u' ') == type(ics.vevent.dtstart.value): start = time.strptime(ics.vevent.dtstart.value, "%Y%m%dT%H%M%S") start = time.strftime("%Y-%m-%dT%H:%M:%S.000Z", start) else: start = time.strftime("%Y-%m-%dT%H:%M:%S.000Z", ics.vevent.dtstart.value.utctimetuple()) if type(u' ') == type(ics.vevent.dtend.value): end = time.strptime(ics.vevent.dtend.value, "%Y%m%dT%H%M%S") end = time.strftime("%Y-%m-%dT%H:%M:%S.000Z", end) else: end = time.strftime("%Y-%m-%dT%H:%M:%S.000Z", ics.vevent.dtend.value.utctimetuple()) event = CalendarEventEntry() event.title = atom.Title(text=ics.vevent.summary.value) if getattr(ics.vevent, "description", None): event.content = atom.Content(text=ics.vevent.description.value) else: event.content = atom.Content(text="") if getattr(ics.vevent, "location", None): event.where.append(Where(value_string=ics.vevent.location.value)) else: event.where.append(Where(value_string="")) # an alarm is set, so go ahead and set a reminder if 'valarm' in ics.vevent.contents: for when in event.when: if len(when.reminder) > 0: when.reminder[0].minutes = reminder else: when.reminder.append(Reminder(minutes=reminder)) elif forceReminder: for when in event.when: when.reminder.append(Reminder(minutes=reminder)) if getattr(ics.vevent, "rrule", None): try: event.recurrence = Recurrence( text=("%s\r\n%s\r\n%s\r\n") % ("DTSTART:%s" % (time.strftime( "%Y%m%dT%H%M%S", ics.vevent.dtstart.value.utctimetuple())), "DTEND:%s" % (time.strftime( "%Y%m%dT%H%M%S", ics.vevent.dtend.value.utctimetuple())), "RRULE:%s" % (ics.vevent.rrule.value))) except Exception, e: print "could not add Recurrence to event, %s" % (str(e)) return None
def uploadToGoogle(ics, email, password, calendar="default", reminder=30, \ forceReminder=False): """ Upload to your Google Calendar. Arguments: ics - vobject vevent object. email - string, your gcal account name password - string, your gcal password calendar - string, which calendar to upload to. reminder - integer, number of minutes to set reminder for. Default 30 forceReminder - boolean, If true, always set a reminder. Returns: True on success, None on failure """ # sucks that gdata won't take a timetuple or a isoformat :( # it seems that sometimes vobject doesn't give me a # datetime object and instead gives me a unicode string. # it'd be nice to handle that. if type(u' ') == type(ics.vevent.dtstart.value): start = time.strptime(ics.vevent.dtstart.value, "%Y%m%dT%H%M%S") start = time.strftime("%Y-%m-%dT%H:%M:%S.000Z", start) else: start = time.strftime("%Y-%m-%dT%H:%M:%S.000Z", ics.vevent.dtstart.value.utctimetuple()) if type(u' ') == type(ics.vevent.dtend.value): end = time.strptime(ics.vevent.dtend.value, "%Y%m%dT%H%M%S") end = time.strftime("%Y-%m-%dT%H:%M:%S.000Z", end) else: end = time.strftime("%Y-%m-%dT%H:%M:%S.000Z", ics.vevent.dtend.value.utctimetuple()) event = CalendarEventEntry() event.title = atom.Title(text=ics.vevent.summary.value) if getattr(ics.vevent, "description", None): event.content = atom.Content(text=ics.vevent.description.value) else: event.content = atom.Content(text="") if getattr(ics.vevent, "location", None): event.where.append( Where(value_string=ics.vevent.location.value) ) else: event.where.append(Where(value_string="")) event.when.append(When(start_time=start, end_time=end)) # an alarm is set, so go ahead and set a reminder if 'valarm' in ics.vevent.contents: for when in event.when: if len(when.reminder) > 0: when.reminder[0].minutes = reminder else: when.reminder.append(Reminder(minutes=reminder)) elif forceReminder: for when in event.when: when.reminder.append(Reminder(minutes=reminder)) if getattr(ics.vevent, "rrule", None): try: event.recurrence = Recurrence(text=("%s\r\n%s\r\n%s\r\n") % ( "DTSTART;VALUE=DATE:%s" % ( time.strftime("%Y%m%d",ics.vevent.dtstart.value.utctimetuple()) ), "DTEND;VALUE=DATE:%s" % ( time.strftime("%Y%m%d",ics.vevent.dtend.value.utctimetuple()) ), "RRULE:%s" % ( ics.vevent.rrule.value ) ) ) except Exception, e: print "could not add Recurrence to event, %s" % (str(e)) return None