paste.progress – Track progress of uploads

Upload Progress Monitor

This is a WSGI middleware component which monitors the status of files being uploaded. It includes a small query application which will return a list of all files being uploaded by particular session/user.

>>> from paste.httpserver import serve
>>> from paste.urlmap import URLMap
>>> from paste.auth.basic import AuthBasicHandler
>>> from paste.debug.debugapp import SlowConsumer, SimpleApplication
>>> # from paste.progress import *
>>> realm = 'Test Realm'
>>> def authfunc(username, password):
...     return username == password
>>> map = URLMap({})
>>> ups = UploadProgressMonitor(map, threshold=1024)
>>> map['/upload'] = SlowConsumer()
>>> map['/simple'] = SimpleApplication()
>>> map['/report'] = UploadProgressReporter(ups)
>>> serve(AuthBasicHandler(ups, realm, authfunc))
serving on...

Note

This is experimental, and will change in the future.

Module Contents

class paste.progress.UploadProgressMonitor(application, threshold=None, timeout=None)

monitors and reports on the status of uploads in progress

Parameters:

application

This is the next application in the WSGI stack.

threshold

This is the size in bytes that is needed for the upload to be included in the monitor.

timeout

This is the amount of time (in seconds) that a upload remains in the monitor after it has finished.

Methods:

uploads()

This returns a list of environ dict objects for each upload being currently monitored, or finished but whose time has not yet expired.

For each request environ that is monitored, there are several variables that are stored:

paste.bytes_received

This is the total number of bytes received for the given request; it can be compared with CONTENT_LENGTH to build a percentage complete. This is an integer value.

paste.request_started

This is the time (in seconds) when the request was started as obtained from time.time(). One would want to format this for presentation to the user, if necessary.

paste.request_finished

This is the time (in seconds) when the request was finished, canceled, or otherwise disconnected. This is None while the given upload is still in-progress.

TODO: turn monitor into a queue and purge queue of finished

requests that have passed the timeout period.

class paste.progress.UploadProgressReporter(monitor)

reports on the progress of uploads for a given user

This reporter returns a JSON file (for use in AJAX) listing the uploads in progress for the given user. By default, this reporter uses the REMOTE_USER environment to compare between the current request and uploads in-progress. If they match, then a response record is formed.

match()

This member function can be overriden to provide alternative matching criteria. It takes two environments, the first is the current request, the second is a current upload.

report()

This member function takes an environment and builds a dict that will be used to create a JSON mapping for the given upload. By default, this just includes the percent complete and the request url.