import win32com
import win32com.client
#depth: 0=immediate depth,1=w/children,infinity=all the way down
def return_dav(dav,dav_response=''):
if dav.status > 299:
raise 'webdav error',str(dav.status)+':'+dav.statusText
if dav_response=='dav': return dav
elif dav_response=='xml': return dav.responseXML
#by default return text
return dav.responseText
def search_request(url,request,logon='',passwd='',depth=1):
dav = win32com.client.Dispatch('Microsoft.XMLHTTP')
dav.open('SEARCH',url, 0,logon, passwd)
dav.setRequestHeader("Content-type:", "text/xml")
dav.setRequestHeader("depth", depth)
dav.setRequestHeader("Translate", "f")
dav.send(request)
return return_dav(dav)
def propfind(url,request,logon='',passwd='',depth=1):
dav = win32com.client.Dispatch('Microsoft.XMLHTTP')
dav.open('PROPFIND',url, 0,logon, passwd)
dav.setRequestHeader("Content-type:", "text/xml")
dav.setRequestHeader("depth", depth)
dav.setRequestHeader("Translate", "f")
dav.send(request)
return return_dav(dav)
def delete(url='',logon='',passwd=''):
dav = win32com.client.Dispatch('Microsoft.XMLHTTP')
dav.open('DELETE',url, 0,logon, passwd)
dav.send()
return return_dav(dav)
#create a collection
def mkcol(url='',logon='',passwd=''):
dav = win32com.client.Dispatch('Microsoft.XMLHTTP')
dav.open('MKCOL',url,0)
dav.setRequestHeader('Content-Type:','text/xml')
dav.send()
return return_dav(dav)
url='http://server/exchange/username/inbox/test'
pfind='''<?xml version="1.0" ?>
<D:propfind xmlns:D='DAV:' xmlns:m='urn:schemas:httpmail:'>
<D:prop> <m:from/> <m:to/> <m:subject/> </D:prop>
</D:propfind>'''
search='''<?xml version="1.0"?>
<D:searchrequest xmlns:D = "DAV:" >
<D:sql>SELECT "DAV:displayname" FROM "%s"</D:sql>
</D:searchrequest>
'''%(url)
#may need to provide username and password
print propfind(url,pfind)
print search_request(url,search)
mkcol(url+'/test3') #make a folder
delete(url+'/test3') #remove a folder