123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import urllib3
- import xml.etree.ElementTree as ET
- class labkeyFileBrowser:
- def __init__(self,net):
- self.net=net
- def GetRootUrl(self):
- return self.net.GetLabkeyUrl()+"/_webdav"
-
- def listRemoteDir(self,url):
- #input is remoteDir, result are remoteDirs
- #r=MethodRequest(dirUrl,method="PROPFIND")
- PROPFIND=u"""<?xml version="1.0" encoding="utf-8"?>\n
- <propfind xmlns="DAV:">\n
- <prop>\n
- <getetag/>\n
- </prop>\n
- </propfind>"""
- headers=urllib3.util.make_headers(basic_auth=self.net.getBasicAuth())
- headers["Content-Type"]='text/xml; charset="utf-8"'
- headers['content-length']=str(len(PROPFIND))
- headers['Depth']='1'
- #add csrf
- headers["X-LABKEY-CSRF"]=self.net.getCSRF()
- try:
- f=self.net.http.request('PROPFIND',url,headers=headers,body=PROPFIND)
- #f contains json as a return value
- except urllib3.exceptions.HTTPError as e:
- print(e)
- return False,dirs
-
- tree=ET.XML(f.data)
- rps=tree.findall('{DAV:}response')
- dirs=[]
- for r in rps:
- hr=r.find('{DAV:}href')
- dirent=hr.text
- #dirent=re.sub('/labkey/_webdav/','',dirent)
- dirent=self.net.connectionConfig['host']+dirent
- dirs.append(dirent)
- del dirs[0]
- return True,dirs
- def readFileToBuffer(self, url):
- return self.net.get(url)
-
- def formatPathURL(self,project,path):
- url=self.GetRootUrl()+'/'+project+'/@files'
- if len(path)==0:
- return url
- return url+'/'+path
-
|