GitXplorerGitXplorer
p

Flask-Dropbox

public
64 stars
10 forks
15 issues

Commits

List of commits on branch master.
Unverified
bfc59c64a6a55b50cacb9b362ed520c50705778a

Fixes to bring back Dropbox SDK 1.4 version support.

pplaypauseandstop committed 12 years ago
Unverified
2e0116ca3c61df2b55a47dac74908175c5aa9fb9

Update badges in README.

pplaypauseandstop committed 12 years ago
Unverified
87c8ed9c168dacf22482407087e5e1f59d96dbeb

Bump version number.

pplaypauseandstop committed 12 years ago
Unverified
6b47e593388147c7f1a776dfcb6339cb74143e36

Update readme and authors list.

pplaypauseandstop committed 12 years ago
Unverified
0973710124f3df453064bc8671f5f5dea0fc75ab

Fix tests.

pplaypauseandstop committed 12 years ago
Unverified
a2a8d1f5071856a20e7e49de2ccb2c146c58998d

Show message on callback template page when cannot read valid token from request.

pplaypauseandstop committed 12 years ago

README

The README file for this repository.

============= 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 returns ErrorResponse instance. Also actual exception as error 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="https://raw.githubusercontent.com/playpauseandstop/Flask-Dropbox/master/%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 of flask_dropbox.Dropbox instance
  • Introduce DROPBOX_CACHE_STORAGE setting

0.2

  • Add init_app method to Dropbox extension class.
  • Do not send dropbox instance for initialization of DropboxBlueprint class.
  • Use current_app.extensions['dropbox'] statement in views for getting initialized Dropbox instance.

0.1.5

  • Add register_blueprint shortcut to initialize DropboxBlueprint with default values in one line.
  • Move Dropbox class from flask.ext.dropbox.utils to flask.ext.dropbox.extension module. But mainly, it wouldn't affected to your code if you used from flask.ext.dropbox import Dropbox statements.

0.1.4

  • Add dropbox library as install requirement in setup.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.