def testCalendar(self): """ Principal.calendar() and CalendarSet.calendar() should create Calendar objects without initiating any communication with the server. Calendar.event() should create Event object without initiating any communication with the server. DAVClient.__init__ also doesn't do any communication Principal.__init__ as well, if the principal_url is given Principal.calendar_home_set needs to be set or the server will be queried """ client = DAVClient(url="http://*****:*****@calendar.example:80/") principal = Principal(client, "http://*****:*****@calendar.example:80/me/") principal.calendar_home_set = "http://*****:*****@calendar.example:80/me/calendars/" ## calendar_home_set is actually a CalendarSet object assert(isinstance(principal.calendar_home_set, CalendarSet)) calendar1 = principal.calendar(name="foo", cal_id="bar") calendar2 = principal.calendar_home_set.calendar(name="foo", cal_id="bar") assert_equal(calendar1.url, calendar2.url) assert_equal(calendar1.url, "http://calendar.example:80/me/calendars/bar") ## principal.calendar_home_set can also be set to an object ## This should be noop principal.calendar_home_set = principal.calendar_home_set calendar1 = principal.calendar(name="foo", cal_id="bar") assert_equal(calendar1.url, calendar2.url) ## When building a calendar from a relative URL and a client, the relative URL should be appended to the base URL in the client calendar1 = Calendar(client, 'someoneelse/calendars/main_calendar') calendar2 = Calendar(client, 'http://*****:*****@calendar.example:80/someoneelse/calendars/main_calendar') assert_equal(calendar1.url, calendar2.url)
def testProxy(self): c = DAVClient(principal_url, proxy) p = Principal(c, principal_url) assert_not_equal(len(p.calendars()), 0) c = DAVClient(principal_url, proxy_noport) p = Principal(c, principal_url) assert_not_equal(len(p.calendars()), 0)
def testAbsoluteURL(self): """Version 0.7.0 does not handle responses with absolute URLs very well, ref https://github.com/python-caldav/caldav/pull/103""" ## none of this should initiate any communication client = DAVClient(url='http://cal.example.com/') principal = Principal(client=client, url='http://cal.example.com/home/bernard/') ## now, ask for the calendar_home_set, but first we need to mock up client.propfind mocked_response = mock.MagicMock() mocked_response.status_code = 207 mocked_response.reason = 'multistatus' mocked_response.headers = {} mocked_response.content = """ <xml> <d:multistatus xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav"> <d:response> <d:href>http://cal.example.com/home/bernard/</d:href> <d:propstat> <d:prop> <c:calendar-home-set> <d:href>http://cal.example.com/home/bernard/calendars/</d:href> </c:calendar-home-set> </d:prop> <d:status>HTTP/1.1 200 OK</d:status> </d:propstat> </d:response> </d:multistatus> </xml>""" mocked_davresponse = DAVResponse(mocked_response) client.propfind = mock.MagicMock(return_value=mocked_davresponse) bernards_calendars = principal.calendar_home_set assert_equal(bernards_calendars.url, URL('http://cal.example.com/home/bernard/calendars/'))
def principal(self): """ Convenience method, it gives a bit more object-oriented feel to write client.principal() than Principal(client). This method returns a :class:`caldav.Principal` object, with higher-level methods for dealing with the principals calendars. """ return Principal(self)
def testCalendar(self): """ Principal.calendar() and CalendarSet.calendar() should create Calendar objects without initiating any communication with the server. Calendar.event() should create Event object without initiating any communication with the server. DAVClient.__init__ also doesn't do any communication Principal.__init__ as well, if the principal_url is given Principal.calendar_home_set needs to be set or the server will be queried """ cal_url = "http://*****:*****@calendar.example:80/" client = DAVClient(url=cal_url) principal = Principal(client, cal_url + "me/") principal.calendar_home_set = cal_url + "me/calendars/" # calendar_home_set is actually a CalendarSet object assert (isinstance(principal.calendar_home_set, CalendarSet)) calendar1 = principal.calendar(name="foo", cal_id="bar") calendar2 = principal.calendar_home_set.calendar(name="foo", cal_id="bar") calendar3 = principal.calendar(cal_id="bar") assert_equal(calendar1.url, calendar2.url) assert_equal(calendar1.url, calendar3.url) assert_equal(calendar1.url, "http://calendar.example:80/me/calendars/bar/") # principal.calendar_home_set can also be set to an object # This should be noop principal.calendar_home_set = principal.calendar_home_set calendar1 = principal.calendar(name="foo", cal_id="bar") assert_equal(calendar1.url, calendar2.url) # When building a calendar from a relative URL and a client, # the relative URL should be appended to the base URL in the client calendar1 = Calendar(client, 'someoneelse/calendars/main_calendar') calendar2 = Calendar( client, 'http://*****:*****@calendar.example:80/someoneelse/calendars/main_calendar' ) assert_equal(calendar1.url, calendar2.url)
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 testSSL(self): c = DAVClient(principal_url_ssl) p = Principal(c, principal_url_ssl) assert_not_equal(len(p.calendars()), 0)
def setup(self): self.caldav = DAVClient(principal_url) self.principal = Principal(self.caldav, principal_url)
class TestCalDAV: def setup(self): self.caldav = DAVClient(principal_url) self.principal = Principal(self.caldav, principal_url) def teardown(self): p = url.make(self.principal.url) path = url.join(p, testcal_id) cal = Calendar(self.caldav, name="Yep", parent = self.principal, url = path) cal.delete() def testSSL(self): c = DAVClient(principal_url_ssl) p = Principal(c, principal_url_ssl) assert_not_equal(len(p.calendars()), 0) def testProxy(self): c = DAVClient(principal_url, proxy) p = Principal(c, principal_url) assert_not_equal(len(p.calendars()), 0) c = DAVClient(principal_url, proxy_noport) p = Principal(c, principal_url) assert_not_equal(len(p.calendars()), 0) def testPrincipal(self): assert_equal(url.make(self.principal.url), principal_url) collections = self.principal.calendars() for c in collections: assert_equal(c.__class__.__name__, "Calendar") 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 testFilters(self): filter = cdav.Filter()\ .append(cdav.CompFilter("VCALENDAR")\ .append(cdav.CompFilter("VEVENT")\ .append(cdav.PropFilter("UID")\ .append([cdav.TextMatch("pouet", negate = True)])))) print filter crash = cdav.CompFilter() value = None try: value = str(crash) except: pass if value is not None: raise Exception("This should have crashed") def testObjects(self): o = DAVObject(self.caldav) failed = False try: o.save() except: failed = True assert_equal(failed, True)
def testProxy(self): c = DAVClient(principal_url, proxy) p = Principal(c, principal_url) assert_not_equal(len(p.calendars()), 0)
class TestCalDAV: def setup(self): self.caldav = DAVClient(principal_url) self.principal = Principal(self.caldav, principal_url) def teardown(self): p = url.make(self.principal.url) path = url.join(p, testcal_id) cal = Calendar(self.caldav, name="Yep", parent=self.principal, url=path) cal.delete() #def testSSL(self): # c = DAVClient(principal_url_ssl) # # the demo ssl url doesn't actually work... # p = Principal(c, principal_url_ssl) # assert_not_equal(len(p.calendars()), 0) def testProxy(self): c = DAVClient(principal_url, proxy) p = Principal(c, principal_url) assert_not_equal(len(p.calendars()), 0) def testPrincipal(self): assert_equal(url.make(self.principal.url), principal_url) collections = self.principal.calendars() for c in collections: assert_equal(c.__class__.__name__, "Calendar") 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) def testFilters(self): filter = cdav.Filter()\ .append(cdav.CompFilter("VCALENDAR")\ .append(cdav.CompFilter("VEVENT")\ .append(cdav.PropFilter("UID")\ .append([cdav.TextMatch("pouet", negate = True)])))) print filter crash = cdav.CompFilter() value = None try: value = str(crash) except: pass if value is not None: raise Exception("This should have crashed")