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"""\n \n \n \n \n """ 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