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='''
'''
search='''
SELECT "DAV:displayname" FROM "%s"
'''%(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