def insertCaldavCollection(username, password, collectionName): url = makeURL(username, password, None); client = caldav.DAVClient(url) principal = caldav.Principal(client, url) caldav.Collection(client, parent=principal, id=collectionName, name=collectionName).save() #calendar.set_properties([ cdav.Calendar(), cdav.CalendarData(),cdav.CalendarDescription("calDesc")]) return make_response("ok", 200)
def removeCaldavCollection(username, password, collectionName): url = makeURL(username, password, collectionName); client = caldav.DAVClient(url) principal = caldav.Principal(client, url) calendars = principal.calendars() if len(calendars) == 0: return make_response(jsonify( { 'error': 'collection not found!' } ), 404) calendars[0].delete(); return make_response("ok", 200)
def removeCaldavEvent(username, password, collectionName, calendarName, eventID): url = makeURL(username, password, collectionName, calendarName); client = caldav.DAVClient(url) principal = caldav.Principal(client, url) calendars = principal.calendars() if len(calendars) == 0: return make_response(jsonify( { 'error': 'calendar not found!' } ), 404) try: calendars[0].event(eventID).delete() except error.NotFoundError: return make_response(jsonify( { 'error': 'event uid: \'' + eventID + '\' not found!' } ), 404) return make_response("ok", 200)
def insertCaldavEvent(username, password, collectionName, calendarName,data): url = makeURL(username, password, collectionName, calendarName) client = caldav.DAVClient(url) principal = caldav.Principal(client, url) calendars = principal.calendars() if len(calendars) == 0: return make_response(jsonify( { 'error': 'calendar not found!' } ), 404) eventData = makeEventFromJson(data) caldav.Event(client, data = eventData, parent = calendars[0]).save(); return make_response("ok", 200)
def getCaldavEvents(username, password, collectionName=None, calendarName=None , dateStart=None, dateEnd=None): url = makeURL(username, password, collectionName, calendarName); client = caldav.DAVClient(url) principal = caldav.Principal(client, url) try: calendars = principal.calendars() except error.AuthorizationError: return make_response(jsonify({ 'error': 'Authentication failed' }), 401) result = {} result['eventList'] = {} for calendar in calendars: fullName = calendar.get_properties(props=[dav.Href()], depth=10)['{DAV:}href'] if fullName[-1] == '/': basename = os.path.basename(fullName[:-1]) else: basename = os.path.basename(fullName) result['eventList'][basename] = [] if dateStart: events = calendar.date_search(dateStart, dateEnd) else: events = calendar.events() for event in events: event.load(); propMap = event.get_properties(props=availableProps, depth=200) # event.instance.vevent.uid.value result['eventList'][basename].append({}) result['eventList'][basename][-1]["uid"] = event.instance.vevent.uid.value for prop in availableProps: if prop.tag in propMap: result['eventList'][basename][-1][prop.serviceName] = propMap[prop.tag] if Location().tag in propMap: result['eventList'][basename][-1][Location().serviceName] = propMap[Location().tag] if Summary().tag in propMap: result['eventList'][basename][-1][Summary().serviceName] = propMap[Summary().tag] # result['eventList'][basename][-1][Dtstart().serviceName] if Dtstart().tag in propMap: date = datetime.strptime(propMap[Dtstart().tag][:-3], '%Y-%m-%d %H:%M:%S') tempDateMap = {} tempDateMap["year"] = str(date.year) tempDateMap["month"] = str(date.month) if len(str(date.month)) == 2 else "0" + str(date.month) tempDateMap["day"] = str(date.day) if len(str(date.day)) == 2 else "0" + str(date.day) tempDateMap["hour"] = str(date.hour) if len(str(date.hour)) == 2 else "0" + str(date.hour) tempDateMap["minute"] = str(date.minute) if len(str(date.minute)) == 2 else "0" + str(date.minute) tempDateMap["second"] = str(date.second) if len(str(date.second)) == 2 else "0" + str(date.second) tempDateMap["timezone"] = "WET" result['eventList'][basename][-1][Dtstart().serviceName] = tempDateMap # print event.data if RRule().tag in propMap: rruleString = propMap[RRule().tag] if rruleString: rruleMap = {} for param in rruleString.split(";"): (name, value) = param.split("=") rruleMap[name.lower()] = value result['eventList'][basename][-1][RRule().serviceName] = rruleMap if Description().tag in propMap: result['eventList'][basename][-1][Description().serviceName] = propMap[Description().tag] try: (weeks, days, hours, minutes) = weeks_days_hours_minutes(event.instance.vevent.duration.value) result['eventList'][basename][-1][Duration().serviceName] = {} # str(event.instance.vevent) result['eventList'][basename][-1][Duration().serviceName]["week"] = str(weeks) result['eventList'][basename][-1][Duration().serviceName]["day"] = str(days) result['eventList'][basename][-1][Duration().serviceName]["hour"] = str(hours) result['eventList'][basename][-1][Duration().serviceName]["minute"] = str(minutes) except: pass return make_response(jsonify(result), 200)