def testCalendar(self): c = Calendar(self.caldav, name="Yep", parent = self.principal, id = testcal_id).save() assert_not_equal(c.url, None) # TODO: fail #props = c.get_properties([dav.DisplayName(),]) #assert_equal("Yep", props[dav.DisplayName.tag]) c.set_properties([dav.DisplayName("hooray"),]) props = c.get_properties([dav.DisplayName(),]) assert_equal(props[dav.DisplayName.tag], "hooray") print c cc = Calendar(self.caldav, name="Yep", parent = self.principal).save() assert_not_equal(cc.url, None) cc.delete() e = Event(self.caldav, data = ev1, parent = c).save() assert_not_equal(e.url, None) print e, e.data ee = Event(self.caldav, url = url.make(e.url), parent = c) ee.load() assert_equal(e.instance.vevent.uid, ee.instance.vevent.uid) r = c.date_search(datetime(2006,7,13,17,00,00), datetime(2006,7,15,17,00,00)) assert_equal(e.instance.vevent.uid, r[0].instance.vevent.uid) for e in r: print e.data assert_equal(len(r), 1) all = c.events() print all assert_equal(len(all), 1) e2 = Event(self.caldav, data = ev2, parent = c).save() assert_not_equal(e.url, None) tmp = c.event("*****@*****.**") assert_equal(e2.instance.vevent.uid, tmp.instance.vevent.uid) r = c.date_search(datetime(2006,7,13,17,00,00), datetime(2006,7,15,17,00,00)) for e in r: print e.data assert_equal(len(r), 1) e.data = ev2 e.save() r = c.date_search(datetime(2006,7,13,17,00,00), datetime(2006,7,15,17,00,00)) for e in r: print e.data assert_equal(len(r), 1) e.instance = e2.instance e.save() r = c.date_search(datetime(2006,7,13,17,00,00), datetime(2006,7,15,17,00,00)) for e in r: print e.data assert_equal(len(r), 1)
def testBackwardCompatibility(self): """ Tobias Brox has done some API changes - but this thing should still be backward compatible. """ if not 'backwards_compatibility_url' in self.server_params: return caldav = DAVClient(self.server_params['backwards_compatibility_url']) principal = Principal(caldav, self.server_params['backwards_compatibility_url']) c = Calendar(caldav, name="Yep", parent = principal, id = testcal_id).save() assert_not_equal(c.url, None) c.set_properties([dav.DisplayName("hooray"),]) props = c.get_properties([dav.DisplayName(),]) assert_equal(props[dav.DisplayName.tag], "hooray") cc = Calendar(caldav, name="Yep", parent = principal).save() assert_not_equal(cc.url, None) cc.delete() e = Event(caldav, data = ev1, parent = c).save() assert_not_equal(e.url, None) ee = Event(caldav, url = url.make(e.url), parent = c) ee.load() assert_equal(e.instance.vevent.uid, ee.instance.vevent.uid) r = c.date_search(datetime(2006,7,13,17,00,00), datetime(2006,7,15,17,00,00)) assert_equal(e.instance.vevent.uid, r[0].instance.vevent.uid) assert_equal(len(r), 1) all = c.events() assert_equal(len(all), 1) e2 = Event(caldav, data = ev2, parent = c).save() assert_not_equal(e.url, None) tmp = c.event("*****@*****.**") assert_equal(e2.instance.vevent.uid, tmp.instance.vevent.uid) r = c.date_search(datetime(2007,7,13,17,00,00), datetime(2007,7,15,17,00,00)) assert_equal(len(r), 1) e.data = ev2 e.save() r = c.date_search(datetime(2007,7,13,17,00,00), datetime(2007,7,15,17,00,00)) for e in r: print e.data assert_equal(len(r), 1) e.instance = e2.instance e.save() r = c.date_search(datetime(2007,7,13,17,00,00), datetime(2007,7,15,17,00,00)) for e in r: print e.data assert_equal(len(r), 1)
def testDateSearch(self): """ ## ref https://github.com/python-caldav/caldav/issues/133 """ xml = """<xml><multistatus xmlns="DAV:"> <response> <href>/principals/calendar/[email protected]/963/43B060B3-A023-48ED-B9E7-6FFD38D5073E.ics</href> <propstat> <prop/> <status>HTTP/1.1 200 OK</status> </propstat> <propstat> <prop> <calendar-data xmlns="urn:ietf:params:xml:ns:caldav"/> <expand xmlns="urn:ietf:params:xml:ns:caldav"/> </prop> <status>HTTP/1.1 404 Not Found</status> </propstat> </response> <response> <href>/principals/calendar/[email protected]/963/114A4E50-8835-42E1-8185-8A97567B5C1A.ics</href> <propstat> <prop/> <status>HTTP/1.1 200 OK</status> </propstat> <propstat> <prop> <calendar-data xmlns="urn:ietf:params:xml:ns:caldav"/> <expand xmlns="urn:ietf:params:xml:ns:caldav"/> </prop> <status>HTTP/1.1 404 Not Found</status> </propstat> </response> <response> <href>/principals/calendar/[email protected]/963/C20A8820-7156-4DD2-AD1D-17105D923145.ics</href> <propstat> <prop/> <status>HTTP/1.1 200 OK</status> </propstat> <propstat> <prop> <calendar-data xmlns="urn:ietf:params:xml:ns:caldav"/> <expand xmlns="urn:ietf:params:xml:ns:caldav"/> </prop> <status>HTTP/1.1 404 Not Found</status> </propstat> </response> </multistatus></xml> """ client = MockedDAVClient(xml) calendar = Calendar( client, url='/principals/calendar/[email protected]/963/') results = calendar.date_search(datetime(2021, 2, 1), datetime(2021, 2, 7)) assert_equal(len(results), 3)
def get_all_events(self, calendar: Calendar, start: datetime = None, end: datetime = None): """Get all events from nextcloud calendar. If the start is None the calendar returns all events. If the start and endtime are not None, we are getting all events from this time period. Args: calendar : The nextcloud calendar start: Optional; Search starttime for the events. If not set we get all events. Defaults to None. end: Optional; Search endtime for the events. Defaults to None. Returns: list: Returns a list with the events from the calendar. """ all_events = [] if start is None: return calendar.events() event_date = calendar.date_search(start=start, end=end) for event in event_date: event_start = event.instance.vevent.dtstart.value # for all day events if not isinstance(event_start, datetime): event.instance.vevent.dtstart.value = datetime.combine(event_start, datetime.min.time()) # Mycroft needs full lenght. pylint: disable=line-too-long if event.instance.vevent.dtstart.value.astimezone(self.local_tz) >= start.astimezone(self.local_tz): # Mycroft needs full lenght. pylint: disable=line-too-long all_events.append(event) if end is not None: all_events = [i for i in all_events if i.instance.vevent.dtstart.value.astimezone(self.local_tz) <= end.astimezone(self.local_tz)] # Mycroft needs full lenght. pylint: disable=line-too-long all_events.sort(key=lambda event: event.instance.vevent.dtstart.value.astimezone(self.local_tz)) # Mycroft needs full lenght. pylint: disable=line-too-long return all_events
def testBackwardCompatibility(self): """ Tobias Brox has done some API changes - but this thing should still be backward compatible. """ if not 'backwards_compatibility_url' in self.server_params: return caldav = DAVClient(self.server_params['backwards_compatibility_url']) principal = Principal( caldav, self.server_params['backwards_compatibility_url']) c = Calendar(caldav, name="Yep", parent=principal, id=testcal_id).save() assert_not_equal(c.url, None) c.set_properties([ dav.DisplayName("hooray"), ]) props = c.get_properties([ dav.DisplayName(), ]) assert_equal(props[dav.DisplayName.tag], "hooray") cc = Calendar(caldav, name="Yep", parent=principal).save() assert_not_equal(cc.url, None) cc.delete() e = Event(caldav, data=ev1, parent=c).save() assert_not_equal(e.url, None) ee = Event(caldav, url=url.make(e.url), parent=c) ee.load() assert_equal(e.instance.vevent.uid, ee.instance.vevent.uid) r = c.date_search(datetime(2006, 7, 13, 17, 00, 00), datetime(2006, 7, 15, 17, 00, 00)) assert_equal(e.instance.vevent.uid, r[0].instance.vevent.uid) assert_equal(len(r), 1) all = c.events() assert_equal(len(all), 1) e2 = Event(caldav, data=ev2, parent=c).save() assert_not_equal(e.url, None) tmp = c.event("*****@*****.**") assert_equal(e2.instance.vevent.uid, tmp.instance.vevent.uid) r = c.date_search(datetime(2007, 7, 13, 17, 00, 00), datetime(2007, 7, 15, 17, 00, 00)) assert_equal(len(r), 1) e.data = ev2 e.save() r = c.date_search(datetime(2007, 7, 13, 17, 00, 00), datetime(2007, 7, 15, 17, 00, 00)) for e in r: print(e.data) assert_equal(len(r), 1) e.instance = e2.instance e.save() r = c.date_search(datetime(2007, 7, 13, 17, 00, 00), datetime(2007, 7, 15, 17, 00, 00)) for e in r: print(e.data) assert_equal(len(r), 1)
def testCalendar(self): c = Calendar(self.caldav, name="Yep", parent=self.principal, id=testcal_id).save() assert_not_equal(c.url, None) # TODO: fail #props = c.get_properties([DAVDisplayName(),]) #assert_equal("Yep", props[DAVDisplayName.tag]) c.set_properties([ dav.DisplayName("hooray"), ]) props = c.get_properties([ dav.DisplayName(), ]) assert_equal(props[dav.DisplayName.tag], "hooray") print c cc = Calendar(self.caldav, name="Yep", parent=self.principal).save() assert_not_equal(cc.url, None) cc.delete() e = Event(self.caldav, data=ev1, parent=c).save() assert_not_equal(e.url, None) print e, e.data ee = Event(self.caldav, url=url.make(e.url), parent=c) ee.load() assert_equal(e.instance.vevent.uid, ee.instance.vevent.uid) r = c.date_search(datetime(2006, 7, 13, 17, 00, 00), datetime(2006, 7, 15, 17, 00, 00)) assert_equal(e.instance.vevent.uid, r[0].instance.vevent.uid) for e in r: print e.data assert_equal(len(r), 1) all = c.events() assert_equal(len(all), 1) e2 = Event(self.caldav, data=ev2, parent=c).save() assert_not_equal(e.url, None) tmp = c.event("*****@*****.**") assert_equal(e2.instance.vevent.uid, tmp.instance.vevent.uid) r = c.date_search(datetime(2006, 7, 13, 17, 00, 00), datetime(2006, 7, 15, 17, 00, 00)) for e in r: print e.data assert_equal(len(r), 1) e.data = ev2 e.save() r = c.date_search(datetime(2006, 7, 13, 17, 00, 00), datetime(2006, 7, 15, 17, 00, 00)) for e in r: print e.data assert_equal(len(r), 1)