labkeyFileBrowser.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import urllib3
  2. import xml.etree.ElementTree as ET
  3. class labkeyFileBrowser:
  4. def __init__(self,net):
  5. self.net=net
  6. def GetRootUrl(self):
  7. return self.net.GetLabkeyUrl()+"/_webdav"
  8. def listRemoteDir(self,url):
  9. #input is remoteDir, result are remoteDirs
  10. #r=MethodRequest(dirUrl,method="PROPFIND")
  11. PROPFIND=u"""<?xml version="1.0" encoding="utf-8"?>\n
  12. <propfind xmlns="DAV:">\n
  13. <prop>\n
  14. <getetag/>\n
  15. </prop>\n
  16. </propfind>"""
  17. headers=urllib3.util.make_headers(basic_auth=self.net.getBasicAuth())
  18. headers["Content-Type"]='text/xml; charset="utf-8"'
  19. headers['content-length']=str(len(PROPFIND))
  20. headers['Depth']='1'
  21. #add csrf
  22. headers["X-LABKEY-CSRF"]=self.net.getCSRF()
  23. try:
  24. f=self.net.http.request('PROPFIND',url,headers=headers,body=PROPFIND)
  25. #f contains json as a return value
  26. except urllib3.exceptions.HTTPError as e:
  27. print(e)
  28. return False,dirs
  29. tree=ET.XML(f.data)
  30. rps=tree.findall('{DAV:}response')
  31. dirs=[]
  32. for r in rps:
  33. hr=r.find('{DAV:}href')
  34. dirent=hr.text
  35. #dirent=re.sub('/labkey/_webdav/','',dirent)
  36. dirent=self.net.connectionConfig['host']+dirent
  37. dirs.append(dirent)
  38. del dirs[0]
  39. return True,dirs
  40. def readFileToBuffer(self, url):
  41. return self.net.get(url)
  42. def formatPathURL(self,project,path):
  43. url=self.GetRootUrl()+'/'+project+'/@files'
  44. if len(path)==0:
  45. return url
  46. return url+'/'+path