Skip to main content

WSGI-compatible HTTP interface to Dropbox

Project description

dropboxwsgi is a Python package that provides a WSGI application that implements an HTTP interface into the Dropbox API. This package includes a server application, also called dropboxwsgi, that runs the WSGI application from the command line.

This is useful in situations where you’d like to serve a web site out of your Dropbox, either to the world or in a private network. Compare this to the current solution of linking the Dropbox desktop client on your server and serving out of your Dropbox folder.

This package also contains a caching middleware that will cache data from the Dropbox API onto the local disk (or whatever storage implementation you provide) to eliminate redundant data transfer between your server and Dropbox.

By the way, this package also supports Python 3. Yay!

Installation

Installation is easy and fun:

$ python setup.py install

Features

  • Supports standard HTTP caching headers (ETag, Last-Modified) and logic

  • Optional automatically generated directory listings

  • “index.html” file support

  • Caching middleware (in dropboxwsgi.caching)

  • Supports Python 2.5+, 3+, PyPy

  • Automatically uses gevent if available

Server Application Usage

dropboxwsgi is both a server application and a library. Let’s try using it on the command line first:

$ cat <<EOF > config.ini
[Credentials]
consumer_key = <your_dropbox_api_key>
consumer_secret = <your_dropbox_api_secret>
access_type = app_folder

[Server]
http_root = http://localhost:8080
listen = 8080
EOF
$ dropboxwsgi -c config.ini -l info
Server is running; using wsgiref server

Pretty simple. Now point your browser to http://localhost:8080/. If you want to run this in production I recommend using the gevent WSGI server and using nginx as frontend proxy.

Library Usage

WSGI applications, like dropboxwsgi, have the benefit of being able to run in a variety of server environments. App Engine and Heroku come to mind but running it on your own VPS works too. Let’s try it using the reference WSGI implementation included with Python:

#!/usr/bin/python

from wsgiref.simple_server import make_server
from dropboxwsgi.dropboxwsgi import make_app, MemoryCredStorage

config = dict(http_root="http://localhost:8080",
              consumer_key="<your dropbox api key",
              consumer_secret="<your dropbox api secret>",
              access_type"dropbox or app_folder")

app = make_app(config, MemoryCredStorage())

make_server("", 8080, app).serve_forever()

The vanilla WSGI application provides the standard HTTP caching headers (both ETag and Last-Modified) but otherwise doesn’t litter the HTTP header space. This makes it so you can layer as much middleware as you want between the application and the server.

Extensibility

If I haven’t stressed it already enough quite yet, let me try once more. There are dozens of middleware packages available for WSGI and even more proxy servers that speak HTTP. Extending dropboxwsgi is simply a matter of hooking things together. Do you want a caching Dropbox-backed server with HTTP auth? Squid + nginx + dropboxwsgi solves your problem. The possibilities are endless!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dropboxwsgi-1.0.1.tar.gz (14.6 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page