예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
파일: views.py 프로젝트: Markinhos/Drawer
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
예제 #4
0
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']
예제 #5
0
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
예제 #6
0
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
예제 #7
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
예제 #9
0
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
예제 #10
0
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