PyFileServer

What is PyFileServer?

PyFileServer is a WSGI web application for sharing filesystem directories over WebDAV. It comes bundled with a WSGI web server for standalone operation or can be incorporated into other WSGI-compatible web frameworks like Python Webware or Python Paste.

What is WSGI?

WSGI stands for Web Server Gateway Interface, a proposed standard interface between web servers and Python web applications or frameworks, to promote web application portability across a variety of web servers.

Python Paste, also known as WSGIKit, is a web application framework framework. It uses WSGI to create a framework-neutral set of components. It also assists with application setup and deployment.

What is WebDAV?

WebDAV stands for "Web-based Distributed Authoring and Versioning". It is a set of extensions to the HTTP protocol which allows users to collaboratively edit and manage files on remote web servers.


Update: 4th Nov 2005

What is being worked on for PyFileServer? Academia is consuming most of my time at the moment but the following are planned/on the list:

  • Clean up of the interfaces for the Property and Lock Managers. Intend to make them registerable per realm like Resource Layers instead of for the whole application.
  • A sample content managed application that where resources are placed according to modifiable properties.
  • Some emails noted various difficulties in interoperability with other applications like netdrive. Will have to add them to the test list (currently really only Windows Web Folders and cadaver)

The pyfilesync-users mailing list is being spammed a bit, for any problems, suggestions or complaints, email me directly instead.


Features

PyFileServer implements up to Class 2 of the WebDAV specification, including support for shared and exclusive write locking, and setting arbitrary dead properties. It also implements HTTP user authentication using both basic and digest schemes, HTTP single range retrievals and conditional processing headers (If_Match, If_Modified_Since, etc).

PyFileServer also allows custom components to be developed easily by having clear interfaces for:

  • Resource Abstraction Layer
    A custom abstraction layer allows the application to share resources other than files. A Filesystem Abstraction Layer, a ReadOnly Filesystem Abstraction Layer and a MySQL Abstraction Layer (sharing as resources database tables and records 1 2 3) is included in the package.
    .
  • Lock Manager
    The lock manager implements support for write locking. A developer could implement a custom component that interoperates with a file/document checkout or revision system. A generic lock manager using shelve is included in the application.
    .
  • Property Manager
    The property manager implements support for arbitrary dead properties. A developer could implement a custom database-driven component, that might perform semantic classification for files shared over the webdav server. A generic property manager using shelve is included in the application.
    .
  • Domain Controllers
    The domain controller provides the user information for authentication support. Developed components could allow requests to be authenticated against a custom user database. The package includes an additional domain controller that authenticates against a Windows NT+ domain.

PyFileServer is tested over the following WebDAV client environments:

It requires Python 2.4 or above and the PyXML library


Application Documentation

This section provides in-module and standalone documentation done in reStructuredText and compiled to html. A more comprehensive user guide is in the works.


Project Information

PyFileSync/PyFileServer is hosted at BerliOS.


Thanks

This application was developed for the Google Summer Of Code 2005 program

With thanks to:

  • Ian Bicking and Python Software Foundation, for mentoring this project
  • The helpful online commmunity on the w3c-dist-auth and litmus mailing lists, especially Julian Reschke, for help on the webdav specification
  • BerliOS for hosting this project
  • and finally, Google for organizing the Summer of Code program. Logo courtesy of Angela Byron


Author: Ho Chun Wei
Last Modified: 4 Nov 2005