Poulda — a simple file upload service

Poulda is a simple file upload web service. It comes from a need I have to receive large files from friends and family who would not be bothered to use FTP or anything more complex than a web browser interface. Amongst its features are such diverse elements as:

Source
https://github.com/dbaty/poulda
PyPI
http://pypi.python.org/pypi/Poulda
Latest version
0.9

Requirements

Poulda requires Python 2.7.

If you use Nginx, you should use the Upload Progress module. If you do not use this module, Nginx will read the entirety of the uploaded file before passing on to the WSGI server, which obviously defeats the purpose of this application. For further details about the support for this module, see the related section below.

If you do not use the aforementioned Nginx module, you need an RDBMS. SQLite will do very well unless you expect a large number of simultaneous users (in which case you may want to think twice anyway, since Poulda has not been developed and tested to scale up).

Installation

  1. It is highly recommended that you install Poulda in a virtual environment. Once you have one, you may install Poulda and its dependencies with (note the extra requirement):

    $ easy_install Poulda[db]

    If you use the Nginx Upload Progress module, you need not the database-related Python packages, so the following line will pull the minimum requirements:

    $ easy_install Poulda
  2. Download the development WSGI configuration file and make appropriate changes (see the Configuration section below). The source repository also provides a more production-ready configuration file.
  3. Install Waitress (or use your preferred WSGI server and tweak the WSGI configuration file):

    $ easy_install Waitress
  4. And finally start the application:

    $ pserve production.ini

Configuration

The WSGI configuration file should be modified to fit your system and your needs:

poulda.accounts

A space (or new line) separated list of user accounts. Each user account is composed by the login, followed by a colon, followed by the password. Passwords must not contain the space character.

Examples:

poulda.accounts = jsmith:secret jane.doe:mYp3ssWord
poulda.accounts = jsmith:secret
                  jane.doe:mYp3ssWord
poulda.db_url

The database connection string.

Examples:

poulda.db_url = sqlite:///%(here)s/Poulda.db
poulda.db_url = postgresql://poulda:secret@localhost/poulda

This directive is ignored if poulda.nginx_upload_progress is enabled.

poulda.enabled

The string "true" if you wish to enable the service. If any other value is provided, all pages will show a message that indicates that the service is disabled (and users will not be able to do anything).

poulda.nginx_upload_progress

The string "true" if you use Nginx Upload Progress module. If any other value is provided, the support will be disabled.

poulda.secret

A secret string that will be used to encrypt authentication tokens.

poulda.upload_dir

The path to the directory where uploaded files will be stored.

Support for Nginx Upload Progress

Once you have the Nginx Upload Progress module installed, you must first enable it in the WSGI configuration as stated above. Also, your Nginx configuration file should be modified. See below for an example (the context being an http section).

# This line is required by the module.
upload_progress uploads 1m;

upstream poulda {
  # Our upstream application, in this example served by uWSGI on
  # a UNIX socket. 
  server unix:/var/www/exemple.com/var/uwsgi.sock;
}

server {
  # The usual stanza.
  listen        80;
  server_name   exemple.com;

  # The default value is set to 1Mb.
  client_max_body_size 500M;

  location /static/ {
    alias       /var/www/exemple.com/static/;
  }

  # This section is required.
  location ^~ /progress {
    upload_progress_json_output;
    report_uploads    uploads;
  }

  location / {
    # Those two lines are because we use uWSGI. YMMV.  
    uwsgi_pass          poulda;
    include             uwsgi_params;
    # This one is required, though.
    track_uploads       uploads 30s;
  }
}

For further details about the directives, see the documentation of the Nginx Upload Progress module.

The inevitable screenshots

home page upload page

Meta

Poulda is hosted on GitHub. Feel free to report bugs and contribute there.

Poulda is based on the Pyramid web framework.

Poulda is written by Damien Baty and is licenced under the 3-clause BSD license.

List of releases of Poulda

Poulda 0.9 (2012-02-17)

Poulda 0.8 (2012-02-16)

First public release.