def tracks(): token = get_access_token() client = DropboxClient(token) files = client.metadata('iTunes/iTunes Media/Music/Jay-Z/Magna Carta... Holy Grail')['contents'] for f in files: if f['is_dir']: continue f['media'] = client.media(f['path']) return jsonify(data=files)
class DropBoxStorage(Storage): """DropBox Storage class for Django pluggable storage system.""" def __init__(self, oauth2_access_token=setting('DROPBOX_OAUTH2_TOKEN')): if oauth2_access_token is None: raise ImproperlyConfigured("You must configure a token auth at" "'settings.DROPBOX_OAUTH2_TOKEN'.") self.client = DropboxClient(oauth2_access_token) def delete(self, name): self.client.file_delete(name) def exists(self, name): try: return bool(self.client.metadata(name)) except ErrorResponse: return False def listdir(self, path): directories, files = [], [] metadata = self.client.metadata(path) for entry in metadata['contents']: if entry['is_dir']: directories.append(entry['path']) else: files.append(entry['path']) return directories, files def size(self, name): metadata = self.client.metadata(name) return metadata['bytes'] def modified_time(self, name): metadata = self.client.metadata(name) mod_time = datetime.strptime(metadata['modified'], DATE_FORMAT) return mod_time def accessed_time(self, name): metadata = self.client.metadata(name) acc_time = datetime.strptime(metadata['client_mtime'], DATE_FORMAT) return acc_time def url(self, name): media = self.client.media(name) return media['url'] def _open(self, name, mode='rb'): remote_file = DropBoxFile(name, self) return remote_file def _save(self, name, content): self.client.put_file(name, content) return name def _read(self, name, num_bytes=None): data = self.client.get_file(name) return data.read(num_bytes)
def get_dropbox_file(request): if request.method == 'GET': user_profile = UserProfile.objects.get(user = request.user) drop_client = DropboxClient(user_profile.dropbox_profile.access_token['key']) res = drop_client.media(request.GET.get('path')) req = urllib2.urlopen(res[u'url']) file = req.read() res = _setCacheHeaders(file,req.headers.type) return res
class DropboxStorage(Storage): def __init__(self, *args, **kwargs): self.client = DropboxClient(settings.DROPBOX_ACCESS_TOKEN) self.location = kwargs.get('location', settings.MEDIA_ROOT) def path(self, name): return safe_join(self.location, name) def created_time(self, name): raise NotImplementedError def exists(self, name): try: return isinstance(self.client.metadata(self.path(name)), dict) except: return False def get_available_name(self, name): raise NotImplementedError def get_valid_name(self, name): raise NotImplementedError def listdir(self, path): meta = self.client.metadata(self.path(path)) directories, files = [], [] for entry in meta['contents']: name = os.path.basename(entry['path']) if entry['is_dir']: directories.append(name) else: files.append(name) return (directories, files) def modified_time(self, name): raise NotImplementedError def open(self, name, mode='rb'): return self.client.get_file(self.path(name)) def save(self, name, content, max_length=None): raise NotImplementedError def size(self, name): return self.client.metadata(self.path(name)).bytes def url(self, name): return self.client.media(self.path(name))['url']
class DropboxStorage(object): calibre_db_path = '/%s/metadata.db' % settings.DROPBOX_CALIBRE_DIR dropbox_cursor_key = 'dropbox_cursor' def __init__(self): session = DropboxSession(settings.DROPBOX_CONSUMER_KEY, settings.DROPBOX_CONSUMER_SECRET, settings.DROPBOX_ACCESS_TYPE, locale=None) session.set_token(settings.DROPBOX_ACCESS_TOKEN, settings.DROPBOX_ACCESS_TOKEN_SECRET) self.client = DropboxClient(session) def get_url(self, path, share=False): try: if share: result = self.client.share(path, short_url=False) return result['url'] + '?dl=1' return self.client.media(path).get('url') except ErrorResponse: pass def get_file(self, path): try: return self.client.get_file(path) except ErrorResponse: pass def sync_db(self): calibre_db = self.client.get_file(self.calibre_db_path) with open(settings.DATABASES['calibre']['NAME'], 'wb') as f: f.write(calibre_db.read()) def need_update(self): delta = self.client.delta(cursor=cache.get(self.dropbox_cursor_key), path_prefix=self.calibre_db_path) cache.set(self.dropbox_cursor_key, delta['cursor'], timeout=None) return len(delta['entries']) > 0
def dropbox_file_view(request): """ The view for files/folders in a dropbox account """ try: token = UserProfile.objects.get(user=request.user).dropbox_token if not token: # Checks for existence of token messages.add_message(request, messages.ERROR, 'You have not connected with a Dropbox account yet.') return render(request, 'website/dashboard.html') # Initiate a client session and get root contents of Dropbox client = DropboxClient(token) root_contents = client.metadata('/')['contents'] for data in root_contents: if not data['is_dir']: data['url'] = client.media(data['path'])['url'] context = {'root_contents': root_contents} return render(request, 'website/dropbox/fileview.html', context) except Exception, e: messages.add_message(request, messages.ERROR, 'Error accessing Dropbox files') print str(e) return render(request, 'website/dropbox/fileview.html')
class cloudfiles_nb(object): def __init__(self, api_type, keys): self.api_type = api_type if api_type == 'aws': from boto.s3.connection import S3Connection aws_key, aws_secret = keys self.conn = S3Connection(aws_key, aws_secret) elif api_type == 'dropbox': from dropbox.client import DropboxClient from dropbox.session import DropboxSession access_token = keys self.uploaded_files = {} self.client = DropboxClient(access_token) self.base_dir = 'workdocs-cloudfiles' self.folders_list = [p['path'].replace('/%s/' %self.base_dir, '')\ for p in self.client.metadata(self.base_dir)['contents']] self.upload_file_res = {} def initialize_folder(self, folder_name): if self.api_type == 'aws': self.bucket = self.conn.create_bucket(folder_name) self.folder_name = folder_name elif self.api_type == 'dropbox': self.thisfolder = '%s/%s' % (self.base_dir, folder_name) if folder_name in self.folders_list: print 'folder already exists' res = None else: print 'creating folder' res = self.client.file_create_folder(self.thisfolder) # do something for error return res def upload_file(self, filepath): if self.api_type == 'aws': from boto.s3.key import Key filename = filepath.split('/')[-1] k = Key(self.bucket) k.key = filename k.set_contents_from_filename(filepath) k.set_acl('public-read') if '.png' in k.key: k.set_metadata('Contet-Type', 'image/png') elif self.api_type == 'dropbox': f = open(filepath, 'r') filename = filepath.split('/')[-1] newfile = '%s/%s' % (self.thisfolder, filename) # if filename alread exists, delate and replace #filecheck = self.client.search(self.thisfolder, filename) #if filecheck: del_res = self.client.file_delete(newfile) res = self.client.put_file(newfile, f, overwrite=True) return res def get_file_link(self, filename): if self.api_type == 'aws': thiskey = self.bucket.get_key(filename) res = 'https://%s.s3.amazonaws.com/%s' % (self.bucket.name, filename) # something for error return res elif self.api_type == 'dropbox': res = self.client.media('%s/%s' % (self.thisfolder, filename))['url'] # something for error return res def get_nbviewer_link(self, filename): file_link = self.get_file_link(filename) nbv_pfx = 'http://nbviewer.ipython.org/urls' res = nbv_pfx + '/' + file_link.replace('https://', '') return res def get_slideviewer_link(self, filename): file_link = self.get_file_link(filename) sv_pfx = 'https://slideviewer.herokuapp.com/urls' res = sv_pfx + '/' + file_link.replace('https://', '') return res
class DropBoxStorage(Storage): """DropBox Storage class for Django pluggable storage system.""" def __init__(self, oauth2_access_token=None, root_path=None): oauth2_access_token = oauth2_access_token or setting('DROPBOX_OAUTH2_TOKEN') self.root_path = root_path or setting('DROPBOX_ROOT_PATH', '/') if oauth2_access_token is None: raise ImproperlyConfigured("You must configure a token auth at" "'settings.DROPBOX_OAUTH2_TOKEN'.") self.client = DropboxClient(oauth2_access_token) def _full_path(self, name): if name == '/': name = '' return safe_join(self.root_path, name).replace('\\', '/') def delete(self, name): self.client.file_delete(self._full_path(name)) def exists(self, name): try: return bool(self.client.metadata(self._full_path(name))) except ErrorResponse: return False def listdir(self, path): directories, files = [], [] full_path = self._full_path(path) metadata = self.client.metadata(full_path) for entry in metadata['contents']: entry['path'] = entry['path'].replace(full_path, '', 1) entry['path'] = entry['path'].replace('/', '', 1) if entry['is_dir']: directories.append(entry['path']) else: files.append(entry['path']) return directories, files def size(self, name): metadata = self.client.metadata(self._full_path(name)) return metadata['bytes'] def modified_time(self, name): metadata = self.client.metadata(self._full_path(name)) mod_time = datetime.strptime(metadata['modified'], DATE_FORMAT) return mod_time def accessed_time(self, name): metadata = self.client.metadata(self._full_path(name)) acc_time = datetime.strptime(metadata['client_mtime'], DATE_FORMAT) return acc_time def url(self, name): media = self.client.media(self._full_path(name)) return media['url'] def _open(self, name, mode='rb'): remote_file = DropBoxFile(self._full_path(name), self) return remote_file def _save(self, name, content): self.client.put_file(self._full_path(name), content) return name
class cloudfiles_nb(object): def __init__(self, api_type, keys): self.api_type = api_type if api_type == "aws": from boto.s3.connection import S3Connection aws_key, aws_secret = keys self.conn = S3Connection(aws_key, aws_secret) elif api_type == "dropbox": from dropbox.client import DropboxClient from dropbox.session import DropboxSession access_token = keys self.uploaded_files = {} self.client = DropboxClient(access_token) self.base_dir = "workdocs-cloudfiles" self.folders_list = [ p["path"].replace("/%s/" % self.base_dir, "") for p in self.client.metadata(self.base_dir)["contents"] ] self.upload_file_res = {} def initialize_folder(self, folder_name): if self.api_type == "aws": self.bucket = self.conn.create_bucket(folder_name) self.folder_name = folder_name elif self.api_type == "dropbox": self.thisfolder = "%s/%s" % (self.base_dir, folder_name) if folder_name in self.folders_list: print "folder already exists" res = None else: print "creating folder" res = self.client.file_create_folder(self.thisfolder) # do something for error return res def upload_file(self, filepath): if self.api_type == "aws": from boto.s3.key import Key filename = filepath.split("/")[-1] k = Key(self.bucket) k.key = filename k.set_contents_from_filename(filepath) k.set_acl("public-read") if ".png" in k.key: k.set_metadata("Contet-Type", "image/png") elif self.api_type == "dropbox": f = open(filepath, "r") filename = filepath.split("/")[-1] newfile = "%s/%s" % (self.thisfolder, filename) # if filename alread exists, delate and replace # filecheck = self.client.search(self.thisfolder, filename) # if filecheck: del_res = self.client.file_delete(newfile) res = self.client.put_file(newfile, f, overwrite=True) return res def get_file_link(self, filename): if self.api_type == "aws": thiskey = self.bucket.get_key(filename) res = "https://%s.s3.amazonaws.com/%s" % (self.bucket.name, filename) # something for error return res elif self.api_type == "dropbox": res = self.client.media("%s/%s" % (self.thisfolder, filename))["url"] # something for error return res def get_nbviewer_link(self, filename): file_link = self.get_file_link(filename) nbv_pfx = "http://nbviewer.ipython.org/urls" res = nbv_pfx + "/" + file_link.replace("https://", "") return res def get_slideviewer_link(self, filename): file_link = self.get_file_link(filename) sv_pfx = "https://slideviewer.herokuapp.com/urls" res = sv_pfx + "/" + file_link.replace("https://", "") return res