def generateXML(self, os): # Structure of document is: # # <DAV:sync-collection> # <DAV:sync-token>xxx</DAV:sync-token> # <DAV:sync-level>xxx</DAV:sync-level> # <DAV:prop> # <<names of each property as elements>> # </DAV:prop> # </DAV:sync-collection> # <DAV:sync-collection> element synccollection = Element(davxml.sync_collection) # Add sync-token element SubElement(synccollection, davxml.sync_token).text = self.synctoken # Add sync-token element SubElement(synccollection, davxml.sync_level).text = self.level # <DAV:prop> element prop = SubElement(synccollection, davxml.prop) if self.props: # Now add each property for propname in self.props: # Add property element taking namespace into account SubElement(prop, propname) # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(synccollection) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <DAV:propertyupdate> # <DAV:set> # <<names/values of each property as elements>> # </DAV:set> # <DAV:remove> # <<names of each property as elements>> # </DAV:remove> # </DAV:propertyupdate> # <DAV:propertyupdate> element propertyupdate = Element(davxml.propertyupdate) # <DAV:set> element if self.setprops: set = SubElement(propertyupdate, davxml.set) propel = SubElement(set, davxml.prop) for prop in self.setprops: propel.append(prop) # <DAV:remove> element if self.delprops: remove = SubElement(propertyupdate, davxml.remove) propel = SubElement(remove, davxml.prop) for prop in self.delprops: propel.append(prop) # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(propertyupdate) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <CALDAV:mkcalendar> # <DAV:prop> # <<each property as elements>> # </DAV:prop> # </CALDAV:mkcalendar> # <CALDAV:mkcalendar> element mkcalendar = Element(caldavxml.mkcalendar) # <DAV:prop> element prop = SubElement(mkcalendar, davxml.prop) # <DAV:displayname> element if self.displayname: displayname = SubElement(prop, davxml.displayname) displayname.text = self.displayname # <CalDAV:calendar-description> element if self.description: description = SubElement(prop, caldavxml.calendar_description) description.text = self.description # <CalDAV:timezone> element if self.timezone: timezone = SubElement(prop, caldavxml.calendar_timezone) timezone.text = self.timezone # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(mkcalendar) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <DAV:principal-match> # <DAV:self/> # <DAV:prop> # <<names of each property as elements>> # </DAV:prop> # </DAV:principal-match> # <DAV:principal-match> element principalmatch = Element(davxml.principal_match) # <DAV:self> element SubElement(principalmatch, davxml.self) if self.props: # <DAV:prop> element prop = SubElement(principalmatch, davxml.prop) # Now add each property for item in self.props: # Add property element taking namespace into account # Look for DAV namespace and reuse that one SubElement(prop, item) # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(principalmatch) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <CalDAV:calendar-multiget> # <DAV:prop> # <<names of each property as elements>> # </DAV:prop> # <DAV:href>...</DAV:href> # ... # </CalDAV:calendar-multiget> # <CalDAV:calendar-multiget> element multiget = Element(caldavxml.calendar_multiget) if self.props: # <DAV:prop> element prop = SubElement(multiget, davxml.prop) # Now add each property for propname in self.props: # Add property element taking namespace into account SubElement(prop, propname) # Now add each href for href in self.hrefs: # Add href elements SubElement(multiget, davxml.href).text = href # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(multiget) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <CS:invite-reply> # <DAV:href>...</DAV:href> # <CS:invite-accepted /> | <CS:invite-declined /> # <CS:hosturl>...</CS:hosturl> # <CS:in-reply-to>...</CS:in-reply-to> # </CS:invite-reply> # <CS:invite-reply> element invite_reply = Element(csxml.invite_reply) # <DAV:href> element href = SubElement(invite_reply, davxml.href) href.text = self.notification.user_uid # <CS:invite-accepted /> | <CS:invite-declined /> SubElement(invite_reply, csxml.invite_accepted if self.accepted else csxml.invite_declined) # <CS:hosturl> element hosturl = SubElement(invite_reply, csxml.hosturl) # <DAV:href> element href = SubElement(hosturl, davxml.href) href.text = self.notification.hosturl # <CS:in-reply-to> element in_reply_to = SubElement(invite_reply, csxml.in_reply_to) in_reply_to.text = self.notification.uid # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(invite_reply) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <CardDAV:addressbook-multiget> # <DAV:prop> # <<names of each property as elements>> # </DAV:prop> # <DAV:href>...</DAV:href> # ... # </CardDAV:addressbook-multiget> # <CalDAV:calendar-multiget> element multiget = Element(carddavxml.addressbook_multiget) if self.props: # <DAV:prop> element prop = SubElement(multiget, davxml.prop) # Now add each property for propname in self.props: # Add property element taking namespace into account SubElement(prop, propname) # Now add each href for href in self.hrefs: # Add href elements SubElement(multiget, davxml.href).text = href # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(multiget) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <DAV:acl> # <DAV:ace> # <S:inheritable xmlns:S="http:#jakarta.apache.org/slide/"> / <S:non-inheritable xmlns:S="http:#jakarta.apache.org/slide/"> # <DAV:principal>...</DAV:principal> # <DAV:grant>...</DAV:grant> # </DAV:ace> # ... # </DAV:acl> # <DAV:acl> element acl = Element(davxml.acl) # Do for each ACL if self.acls: for ace in self.acls: # Cannot do if change not allowed if not ace.canChange(): continue # <DAV:ace> element ace.generateACE(acl) # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(acl) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <DAV:propfind> # <DAV:allprop/> # </DAV:propfind> # <DAV:propfind> element propfind = Element(davxml.propfind) # <DAV:propname> element propfind.append(Element(davxml.allprop)) # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(propfind) xmldoc.writeUTF8(os)
def writeAccounts(self): """ Write the entire directory to the XML file. """ node = self.directory.writeXML() os = StringIO() xmldoc = BetterElementTree(node) xmldoc.writeUTF8(os) f = open(self.path, "w") if not f: print "Could not open file: %s for writing" % (self.path,) return 0 f.write(os.getvalue()) f.close() return 1
def checkXML(self, x): x = x.replace("\n", "\r\n") # Parse the XML data a = XMLDirectory() a.parseXML(XML(x)) # Generate the XML data node = a.writeXML() os = StringIO() xmldoc = BetterElementTree(node) xmldoc.writeUTF8(os) # Verify data self.assertEqual(os.getvalue(), x)
def checkXML(self, x): x = x.replace("\n", "\r\n") # Parse the XML data a = XMLRecord() a.parseXML(XML(x)) # Generate the XML data node = a.writeXML() os = StringIO() xmldoc = BetterElementTree(node) xmldoc.writeUTF8(os) # Verify data self.assertEqual(os.getvalue(), x)
def verifyXML(self, x, y=None): x = x.replace("\n", "\r\n") if y: y = y.replace("\n", "\r\n") # Parse the XML data a = ACE() a.parseACE(XML(x)) # Generate the XML data aclnode = Element(davxml.acl) a.generateACE(aclnode) os = StringIO() xmldoc = BetterElementTree(aclnode.getchildren()[0]) xmldoc.writeUTF8(os) # Verify data self.assertEqual(os.getvalue(), y if y else x)
def generateXML(self, os): # Structure of document is: # # <CardDAV:addressbook-query> # <DAV:prop> # <<names of each property as elements>> # </DAV:prop> # <CardDAV:filter>...</CardDAV:filter> # </CardDAV:addressbook-query> # <CardDAV:addressbook-query> element query = Element(carddavxml.addressbook_query) self.addProps(query) # Now add each href self.addFilterElement(query) # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(query) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <WEBDAV:mkcol> # <DAV:set> # <DAV:prop> # <DAV:resourcetype><DAV:collection/><CARDDAV:addressbook/></DAV:resourcetype> # <<each property as elements>> # </DAV:prop> # </DAV:set> # </WEBDAV:mkcol> # <CALDAV:mkcalendar> element mkcol = Element(davxml.mkcol) # <DAV:set> element set = SubElement(mkcol, davxml.set) # <DAV:prop> element prop = SubElement(set, davxml.prop) # <WebDAV:resourcetype> element resourcetype = SubElement(prop, davxml.resourcetype) SubElement(resourcetype, davxml.collection) SubElement(resourcetype, carddavxml.addressbook) # <DAV:displayname> element if self.displayname: displayname = SubElement(prop, davxml.displayname) displayname.text = self.displayname # <CardDAV:addressbook-description> element if self.description: description = SubElement(prop, carddavxml.addressbook_description) description.text = self.description # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(mkcol) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <CS:share> # <CS:remove> # <DAV:href>...</DAV:href> # </CS:remove> # </CS:share> # <CS:share> element share = Element(csxml.share) # <CS:remove> element remove = SubElement(share, csxml.remove) # <DAV:href> element href = SubElement(remove, davxml.href) href.text = self.invitee.user_uid # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(share) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <CALDAV:mkcalendar> # <DAV:set> # <DAV:prop> # <<each property as elements>> # </DAV:prop> # </DAV:set> # </CALDAV:mkcalendar> # <CALDAV:mkcalendar> element mkcalendar = Element(caldavxml.mkcalendar) # <DAV:set> element set = SubElement(mkcalendar, davxml.set) # <DAV:prop> element prop = SubElement(set, davxml.prop) # <DAV:displayname> element if self.displayname: displayname = SubElement(prop, davxml.displayname) displayname.text = self.displayname # <CalDAV:calendar-description> element if self.description: description = SubElement(prop, caldavxml.calendar_description) description.text = self.description # <CalDAV:timezone> element if self.timezone: timezone = SubElement(prop, caldavxml.calendar_timezone) timezone.text = self.timezone # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(mkcalendar) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <CS:share> # <CS:set> # <DAV:href>...</DAV:href> # <CS:summary>...</CS:summary> # <CS:read /> | <CS:read-write /> # </CS:set> # <CS:set> # <DAV:href>...</DAV:href> # <CS:summary>...</CS:summary> # <CS:read /> | <CS:read-write /> # </CS:set> # ... # </CS:share> # <CS:share> element share = Element(csxml.share) for user_uid in self.user_uids: # <CS:set> element set = SubElement(share, csxml.set) # <DAV:href> element href = SubElement(set, davxml.href) href.text = user_uid # <CS:summary> element summary = SubElement(set, csxml.summary) summary.text = self.summary # <CS:read /> | <CS:read-write /> SubElement(set, csxml.read_write if self.read_write else csxml.read) # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(share) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <CS:invite-reply> # <DAV:href>...</DAV:href> # <CS:invite-accepted /> | <CS:invite-declined /> # <CS:hosturl>...</CS:hosturl> # <CS:in-reply-to>...</CS:in-reply-to> # </CS:invite-reply> # <CS:invite-reply> element invite_reply = Element(csxml.invite_reply) # <DAV:href> element href = SubElement(invite_reply, davxml.href) href.text = self.notification.user_uid # <CS:invite-accepted /> | <CS:invite-declined /> SubElement( invite_reply, csxml.invite_accepted if self.accepted else csxml.invite_declined) # <CS:hosturl> element hosturl = SubElement(invite_reply, csxml.hosturl) # <DAV:href> element href = SubElement(hosturl, davxml.href) href.text = self.notification.hosturl # <CS:in-reply-to> element in_reply_to = SubElement(invite_reply, csxml.in_reply_to) in_reply_to.text = self.notification.uid # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(invite_reply) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <DAV:propfind> # <DAV:prop> # <<names of each property as elements>> # </DAV:prop> # </DAV:propfind> # <DAV:propfind> element propfind = Element(davxml.propfind) # <DAV:prop> element prop = Element(davxml.prop) propfind.append(prop) # Now add each property for propname in self.props: # Add property element taking namespace into account prop.append(Element(propname)) # Now we have the complete document, so write it out (no indentation) xmldoc = BetterElementTree(propfind) xmldoc.writeUTF8(os)
def generateXML(self, os): # Structure of document is: # # <DAV:lockinfo> # <DAV:lockscope> # <DAV:exclusive/> | <DAV:shared/> # </DAV:lockscope> # <DAV:locktype> # <DAV:write/> # </DAV:locktype> # <DAV:owner> # <<owner>> # </DAV:owner> # </DAV:lockinfo> # <DAV:lockinfo> element lockinfo = Element(davxml.lockinfo) # <DAV:lockscope> element lockscope = Element(davxml.lockscope) lockinfo.append(lockscope) # <DAV:exclusive/> | <DAV:shared/> element lockscope.append(Element(davxml.exclusive if self.scope == Lock.eExclusive else davxml.shared)) # <DAV:locktype> element locktype = Element(davxml.locktype) lockinfo.append(locktype) # <DAV:write/> element locktype.append(Element(davxml.write)) # <DAV:owner> element is optional if self.owner: # <DAV:owner> element owner = Element(davxml.owner) owner.text = self.owner lockinfo.append(owner) # Now we have the complete document, so write it out (no indentation) BetterElementTree(lockinfo).writeUTF8(os)