Skip to content

Latest commit

 

History

History
130 lines (96 loc) · 4.04 KB

changelog04.md

File metadata and controls

130 lines (96 loc) · 4.04 KB

#summary Main changes from PyFileServer to WsgiDAV.

Introduction

WsgiDAV is a refactored version of PyFileServer 0.2, Copyright (c) 2005 Ho Chun Wei.
Chun gave his approval to change the license from LGPL to MIT-License for this project.

Below a list of main changes, I made during my initial refactoring.

The commits of the alpha phase are still available.

Starting with 0.4 beta, changes are logged in the packages CHANGE file.

Main changes until 0.4.alpha

  • Moved to Google Code and using MIT-License instead of LGPL (with Ho Chun Wei's agreement).
  • Fixed indentation.
  • Restructured package and renamend modules and classes.
  • Changed WSGI stack (see DEVELOPERS.txt).
    For example dir_browser is a separate middleware now.
  • Based on RFC 4918, June 2007 (which obsoletes RFC 2518)
  • Using SCRIPT_NAME and PATH_INFO instead of custom WSGI environment variables Environ["pyfileserver.mappedpath"], ...
  • !RequestResolver no longer serves OPTIONS and TRACE (now in !RequestServer). Except for `OPTIONS (*)`.
  • !RequestServer is no longer a static part of the WSGI stack, but instantiated dynamically by !RequestResolver.
  • Dropped PyXML. Instead using lxml (or xml) to parse requests.
    Using lxml.etree to build the responses.
  • Using Clark Notation throughout; no need to pass around namespace and name separately.
  • Refactored some DAV method handlers to be less deeply nested.
  • Server:
    New entry point 'run_server', using cherrypy, paste, wsgiref, if they are installed.
    Otherwise ext_wsgiutils_server is used (comes with the WsgiDAV package).
  • Added mount_path option and tested running WsgiDAV as a Pylons controller. (Stéphane Klein)
  • Converted interface to an abstract base class DAVProvider:
       DAVProvider
         + ReadOnlyFilesystemProvider
           + FilesystemProvider
    
    Replaced separate query function with davprovider.getInfoDict() This allows to request bundled information, which providers can implement more efficiently. Also an `DAVResource` object was introduced.
  • All DAV providers (aka resource abstraction layers) now use URIs with '/' instead of OS dependent file names.
    This allows for generic implementations like .getParent() and .iter() in the common base class.
    !FilesystemProvider has a new constructor argument: 'rootFolderPath', so it can perform the mapping from URI to absolute file path.
  • Changed configuration file format. For example local file path is now an argument to !FilesystemProvider.
    User_map format changed.
    Also, the config file is optional, i.e. the server runs also with command line only.
  • Property manager
    Removed propertylibrary helper functions (only !PropManager class left).
    Add property functions to davProvider getProperties() returns (name, value) tuples, where value is etree.Element or HTTPRequestException().
    setPropertyValue() accepts str or etree.Element or None (for 'remove')
    Added 'dryRun' mode.
    Store native XML
  • Lock manager
    Only storing lock root (not maintaining a list of locked resources).
    'getCheckLock' is atomic now.
  • !LockManager and !PropManager are now members of the DAV provider.
    Also, the displaypath is no longer passed around, since it always can be constructed by provider.getNormUri()
  • Added in-memory versions of !LockManager and !PropManager. Renamed the original shelve-based variants to !ShelveLockManager and !ShelvePropManager.
  • Support for `<error>` Tag and Pre-/Postcondition codes. Also `<resultdescription>`
  • easy_install'able
  • Added API documentation (epidoc)
  • Added unit tests
  • Chunked PUT action support (Stéphane Klein)
  • Improved console logging
  • Added a WebDAV provider for Mercurial repositories (experimental)
  • Added a sample WebDAV provider for generich virtual structures