fix vfs methods as dropbox has changed them

This commit is contained in:
Rob Weber
2017-11-08 11:13:45 -06:00
parent 3a01170425
commit 0b12c42474

View File

@@ -7,7 +7,8 @@ import zipfile
import zlib import zlib
import os import os
import sys import sys
from dropbox import client import dropbox
from dropbox.files import WriteMode
from pydrive.drive import GoogleDrive from pydrive.drive import GoogleDrive
from authorizers import DropboxAuthorizer,GoogleDriveAuthorizer from authorizers import DropboxAuthorizer,GoogleDriveAuthorizer
@@ -134,16 +135,18 @@ class DropboxFileSystem(Vfs):
sys.exit() sys.exit()
def listdir(self,directory): def listdir(self,directory):
directory = self._fix_slashes(directory)
if(self.client != None and self.exists(directory)): if(self.client != None and self.exists(directory)):
files = [] files = []
dirs = [] dirs = []
metadata = self.client.metadata(directory) metadata = self.client.files_list_folder(directory)
for aFile in metadata['contents']: for aFile in metadata.entries:
if(aFile['is_dir']): if(isinstance(aFile,dropbox.files.FolderMetadata)):
dirs.append(utils.encode(aFile['path'][len(directory):])) dirs.append(utils.encode(aFile.name))
else: else:
files.append(utils.encode(aFile['path'][len(directory):])) files.append(utils.encode(aFile.name))
return [dirs,files] return [dirs,files]
else: else:
@@ -153,8 +156,7 @@ class DropboxFileSystem(Vfs):
def mkdir(self,directory): def mkdir(self,directory):
directory = self._fix_slashes(directory) directory = self._fix_slashes(directory)
if(self.client != None): if(self.client != None):
if(not self.exists(directory)): #sort of odd but always return true, folder create is implicit with file upload
self.client.file_create_folder(directory)
return True return True
else: else:
return False return False
@@ -169,7 +171,7 @@ class DropboxFileSystem(Vfs):
self.rmdir(aDir) self.rmdir(aDir)
#finally remove the root directory #finally remove the root directory
self.client.file_delete(directory) self.client.files_delete(directory)
return True return True
else: else:
@@ -179,16 +181,21 @@ class DropboxFileSystem(Vfs):
aFile = self._fix_slashes(aFile) aFile = self._fix_slashes(aFile)
if(self.client != None and self.exists(aFile)): if(self.client != None and self.exists(aFile)):
self.client.file_delete(aFile) self.client.files_delete(aFile)
return True return True
else: else:
return False return False
def exists(self,aFile): def exists(self,aFile):
aFile = self._fix_slashes(aFile) aFile = self._fix_slashes(aFile)
if(self.client != None): if(self.client != None):
#can't list root metadata
if(aFile == ''):
return True
try: try:
meta_data = self.client.metadata(aFile) meta_data = self.client.files_get_metadata(aFile)
#if we make it here the file does exist #if we make it here the file does exist
return True return True
except: except:
@@ -202,7 +209,7 @@ class DropboxFileSystem(Vfs):
if(self.client != None): if(self.client != None):
f = open(source,'rb') f = open(source,'rb')
try: try:
response = self.client.put_file(dest,f,True) response = self.client.files_upload(f.read(),dest,mode=WriteMode('overwrite'))
return True return True
except: except:
#if we have an exception retry #if we have an exception retry
@@ -217,16 +224,18 @@ class DropboxFileSystem(Vfs):
def get_file(self,source,dest): def get_file(self,source,dest):
if(self.client != None): if(self.client != None):
#write the file locally #write the file locally
out = open(dest,'wb') f = self.client.files_download_to_file(dest,source)
f = self.client.get_file(source).read()
out.write(f)
out.close()
return True return True
else: else:
return False return False
def _fix_slashes(self,filename): def _fix_slashes(self,filename):
return filename.replace('\\','/') result = filename.replace('\\','/')
if(result == '/'):
result = ""
return result
class GoogleDriveFilesystem(Vfs): class GoogleDriveFilesystem(Vfs):