Flask-Dropbox
Flask-Dropbox copied to clipboard
Dropbox Python SDK support for Flask applications
============= 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.7Flask <http://flask.pocoo.org/>_ 0.8 or higherDropbox 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 returnsErrorResponseinstance. Also actual exception aserrorvar 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.gstorage instead offlask_dropbox.Dropboxinstance - Introduce
DROPBOX_CACHE_STORAGEsetting
0.2
- Add
init_appmethod toDropboxextension class. - Do not send
dropboxinstance for initialization ofDropboxBlueprintclass. - Use
current_app.extensions['dropbox']statement in views for getting initializedDropboxinstance.
0.1.5
- Add
register_blueprintshortcut to initializeDropboxBlueprintwith default values in one line. - Move
Dropboxclass fromflask.ext.dropbox.utilstoflask.ext.dropbox.extensionmodule. But mainly, it wouldn't affected to your code if you usedfrom flask.ext.dropbox import Dropboxstatements.
0.1.4
- Add
dropboxlibrary 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.OAuthTokenclass if it exists in session.
0.1
- Initial release.