| Version: 0.6.0 - Date: 2010-01-24¶Enhancements¶Issue 68: added full FTPS (FTP over SSL/TLS) support. Issue 86: pyftpdlib now reports all ls and MDTM timestamps as GMT times, as recommended in RFC-3659.  A FTPHandler.use_gmt_times attributed has been added and can be set to False in case local times are desired instead. Issue 124: pyftpdlib now accepts command line options to configure a stand alone anonymous FTP server when running pyftpdlib with python's -m option. Issue 127: added FTPHandler.masquerade_address_map option which allows you to define multiple 1 to 1 mappings in case you run a FTP server with multiple private IP addresses behind a NAT firewall with multiple public IP addresses.  Issue 128: files and directories owner and group names and os.readlink are now resolved via AbstractedFS methods instead of in format_list(). Issue 129: added 3 new callbacks to FTPHandler class: on_incomplete_file_sent(), on_incomplete_file_received() and on_login(). Issue 130: added UnixAuthorizer and WindowsAuthorizer classes defined in the new pyftpdlib.contrib.authorizers module. Issue 131: pyftpdlib is now able to serve both IPv4 and IPv6 at the same time by using a single socket. Issue 133: AbstractedFS constructor now accepts two argumets: root and cmd_channel breaking compatibility with previous version.  Also, root and cwd attributes became properties.  The previous bug consisting in re-setting the root from the ftp handler after user login has been fixed to ease the development of subclasses. Issue 134: enabled TCP_NODELAY socket option for the FTP command channels resulting in pyftpdlib being twice faster. Issue 135: Python 2.3 support has been removed. Issue 137: added new pyftpdlib.contrib.filesystems module within UnixFilesystem class which permits the client to escape its home directory and navigate the real filesystem. Issue 138: added DTPHandler.get_elapsed_time() method which returns the transfer elapsed time in seconds. 
 Bugfixes¶Issue 120: an ActiveDTP instance is not garbage collected in case a client issuing PORT disconnects before establishing the data connection. Issue 122: a wrong variable name was used in AbstractedFS.validpath method. Issue 123: PORT command doesn't bind to correct address in case an alias is created for the local network interface. Issue 140: pathnames returned in PWD response should have double-quotes '"' escaped. 
 API changes since 0.5.2¶removed support for Python 2.3. all classes are now new-style classes. Added a new package in pyftpdlib namespace: "contrib". Modules (and classes) defined here: pyftpdlib.contrib.handlers.py (TLS_FTPHandler, TLS_FTPHandlerFactory) pyftpdlib.contrib.authorizers.py (UnixAuthorizer, WindowsAuthorizer) pyftpdlib.contrib.filesystems (UnixFilesystem) 
 AbstractedFS class: __init__ method now accepts two arguments: root and cmd_channel. root and cwd attributes are now read-only properties. 3 new methods have been added:  get_user_by_uid() get_group_by_gid() readlink() 
 FTPHandler class: new class attributes: use_gmt_times tcp_no_delay masquerade_address_map 
 new methods: on_incomplete_file_sent() on_incomplete_file_received() on_login() 
 proto_cmds class attribute has been added.  The FTPHandler class  no longer relies on ftpserver.proto_cmds global dictionary but on ftpserver.FTPHandler.proto_cmds instead. 
 FTPServer class: max_cons attribute defaults to 512 by default instead of 0 (unlimited). 
 DummyAuthorizer class: ValueError exceptions are now raised instead of AuthorizerError 
 DTPHandler class: get_elapsed_time() method has been added. 
 Migration notes¶Some of the changes introduced in 0.6.0 break compatibility with previous 0.5.x serie. In particular you should be careful in case you're using a customized file system class defining an __init__ method since AbstractedFS constructor now expects two arguments.  |