Login

dropbox integration

Author:
ivarne
Posted:
March 14, 2012
Language:
Python
Version:
Not specified
Tags:
dropbox cloud-storage
Score:
0 (after 0 ratings)

This is a simple module for use with django to make a per user dropbox access simple

Requirements: standard django authentication django sessions enabeled * dropbox python api

easy_install dropbox

To use this dropbox module you have to add the following configuration to your settings.py file

DROPBOX_SETTINGS = { 'app_key' : "insert key", 'app_secret' : "insert secret", 'type' : "app_folder", }

and of course to include it in INSTALLED_APPS

INSTALLED_APPS = ( ..., 'django_dropbox', )

to make a table to store personal access tokens for your users run

python manage.py syncdb

In your views you can import the dropbox_user_required decorator to mark views that should recive the named parameter dropbox_client ` from django_dropbox.decorator import dropbox_user_required

@dropbox_user_required def myViewFunk(request, ..., dropbox_client): file = ... dropbox_client.put_file(file) `

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
"""
django view methods to interact with the dropbox api
"""


from dropbox import client, session
from dropbox.rest import ErrorResponse
from oauth.oauth import OAuthToken

from django.http import HttpResponseRedirect
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpResponse

from models import DropboxExtra


DROPBOX_REQUEST_SESSION_KEY = 'dropbox_request_token3' # random temp storage name

def _saveUserToken(user, token):
    try:
        d = user.django_dropbox
    except:
        d = DropboxExtra()
        d.user = user
    d.dropbox_token = token
    d.save()

def _dropboxConnect(request,sess):
    request_token = sess.obtain_request_token()
    request.session[DROPBOX_REQUEST_SESSION_KEY] = request_token
    url = sess.build_authorize_url(request_token,request.build_absolute_uri())
    return HttpResponseRedirect(url)


def dropbox_user_required(funk):
    @login_required
    def _dropbox_wrap(request, *args, **kwargs):
        _keys = settings.DROPBOX_SETTINGS
        sess = session.DropboxSession(_keys['app_key'], _keys['app_secret'],_keys['type'])
        try:
            if request.session.has_key(DROPBOX_REQUEST_SESSION_KEY):
                sess.token = sess.obtain_access_token(request.session.pop(DROPBOX_REQUEST_SESSION_KEY))
                _saveUserToken( request.user, sess.token )
            else:
                token = request.user.django_dropbox.dropbox_token
                sess.token =  OAuthToken.from_string(token)
            c = client.DropboxClient(sess)
        except ObjectDoesNotExist:
            return _dropboxConnect(request, sess)
        try:
            return funk(request, *args, dropbox_client=c, **kwargs)
        except ErrorResponse, e:
            if e.status == 401:
                _dropboxConnect(request, sess)# re authentication needed
            else:
                raise e # let django log the exception that the usier did not handle

    return _dropbox_wrap


## and to store personal dropbox access tocens you need

# -*- coding: utf-8 -*-
from django.db import models

from django.contrib.auth.models import User

class DropboxExtra(models.Model):
    user = models.OneToOneField(User,related_name="django_dropbox")
    dropbox_token = models.CharField(max_length=256)
    

More like this

  1. View Permission Decorator Helper by jgeewax 6 years, 10 months ago
  2. Simple Plone Migration by msm-art 7 years, 3 months ago
  3. Custom model field for Frame or Box by binishkaspar 4 years, 2 months ago
  4. FieldAccessForm (per-field user access for forms derived from models) by Killarny 6 years, 6 months ago
  5. FieldsetForm by Ciantic 8 years ago

Comments

Please login first before commenting.