playpauseandstop / Flask Dropbox
Programming Languages
============= Flask-Dropbox
.. image:: https://travis-ci.org/playpauseandstop/Flask-Dropbox.png?branch=master :target: https://travis-ci.org/playpauseandstop/Flask-Dropbox
.. image:: https://pypip.in/v/Flask-Dropbox/badge.png :target: https://crate.io/packages/Flask-Dropbox
Dropbox Python SDK support for Flask applications.
Requirements
-
Python <http://www.python.org/>
_ 2.6 or 2.7 -
Flask <http://flask.pocoo.org/>
_ 0.8 or higher -
Dropbox Python SDK <http://pypi.python.org/pypi/dropbox>
_ 1.4 or higher
Installation
::
$ pip install Flask-Dropbox
License
Flask-Dropbox
is licensed under the BSD License <https://github.com/playpauseandstop/Flask-Dropbox/blob/master/LICENSE>
_.
Configuration
SECRET_KEY
REQUIRED. As token would be stored in Flask's session <http://flask.pocoo.org/docs/quickstart/#sessions>
_ instance, you need to
configure secret key for your application.
DROPBOX_KEY
REQUIRED. App key from Dropbox developer site.
DROPBOX_SECRET
REQUIRED. Secret key from Dropbox developer site.
DROPBOX_ACCESS_TYPE
REQUIRED. Should be 'dropbox'
or 'app_folder'
as configured for
your app.
DROPBOX_CALLBACK_URL
By default, you don't need to provide this setting, cause Flask-Dropbox
will setup callback URL automaticly usign current host and type of request,
but if you don't trust us, you could to rewrite this setting manually.
DROPBOX_CALLBACK_TEMPLATE
Template to be used for showing errors while trying to process oAuth callback
from Dropbox API. By default: 'dropbox/callback.html'
.
Next boolean vars could be sent to the template:
-
error_oauth_token
- Dropbox API didn't return oAuth token. -
error_not_equal_tokens
- oAuth token from Dropbox API is not equal to request token stored in Flask session. -
error_response
- Dropbox API returnsErrorResponse
instance. Also actual exception aserror
var would be sent to the template too.
DROPBOX_LOGIN_REDIRECT
Page to redirect to after user successfully logged in with Dropbox account. By
default: /
.
DROPBOX_LOGOUT_REDIRECT
Page to redirect to after user logged out from authenticated Dropbox session.
By default: /
.
DROPBOX_CACHE_STORAGE
.. versionadded:: 0.3
Where to place account info, Dropbox client and Dropbox session instances. In
0.2 and lower all this info stored in flask_dropbox.Dropbox
instance, which
isn't thread safe, but from 0.3 all these values stored to flask.g
. If you
need custom storage you can override this setting with object or string which
would be imported.
Usage
app.py
::
from flask import Flask
from flask.ext.dropbox import Dropbox, DropboxBlueprint
import settings
app = Flask(__name__)
app.config.from_object(settings)
dropbox = Dropbox(app)
dropbox.register_blueprint(url_prefix='/dropbox')
settings.py
::
SECRET_KEY = 'some-secret-key'
DROPBOX_KEY = 'dropbox-app-key'
DROPBOX_SECRET = 'dropbox-app-secret'
DROPBOX_ACCESS_TYPE = 'app_folder'
views.py
::
from flask import url_for, redirect, request
from werkzeug import secure_filename
from app import app, dropbox
@app.route('/')
def home():
return u'Click <a href="%s">here</a> to login with Dropbox.' % \
dropbox.login_url
@app.route('/success/<path:filename>')
def success(filename):
return u'File successfully uploaded as /%s' % filename
@app.route('/upload', methods=('GET', 'POST'))
def upload():
if not dropbox.is_authenticated:
return redirect(url_for('home'))
if request.method == 'POST':
file_obj = request.files['file']
if file_obj:
client = dropbox.client
filename = secure_filename(file.filename)
# Actual uploading process
result = client.put_file('/' + filename, file_obj.read())
path = result['path'].lstrip('/')
return redirect(url_for('success', filename=path))
return u'<form action="" method="post">' \
u'<input name="file" type="file">' \
u'<input type="submit" value="Upload">' \
u'</form>'
Bugs, feature requests?
If you found some bug in Flask-Dropbox
library, please, add new issue to
the project's GitHub issues <https://github.com/playpauseandstop/Flask-Dropbox/issues>
_.
ChangeLog
0.3
- Flask 0.10 support
- Store account info, Dropbox client and session in thread-safe
flask.g
storage instead offlask_dropbox.Dropbox
instance - Introduce
DROPBOX_CACHE_STORAGE
setting
0.2
- Add
init_app
method toDropbox
extension class. - Do not send
dropbox
instance for initialization ofDropboxBlueprint
class. - Use
current_app.extensions['dropbox']
statement in views for getting initializedDropbox
instance.
0.1.5
- Add
register_blueprint
shortcut to initializeDropboxBlueprint
with default values in one line. - Move
Dropbox
class fromflask.ext.dropbox.utils
toflask.ext.dropbox.extension
module. But mainly, it wouldn't affected to your code if you usedfrom flask.ext.dropbox import Dropbox
statements.
0.1.4
- Add
dropbox
library as install requirement insetup.py
. - Update project short description.
0.1.3
- Fix handling templates while installing via setup.py
0.1.2
- Add support of Dropbox SDK 1.4.1
0.1.1
- Check that access token is the instance of
oauth.OAuthToken
class if it exists in session.
0.1
- Initial release.