ANN: pyftpdlib 1.0.0 released
Hi there guys, After 1 year of development and refinements I'm pleased to announce a release of pyftpdlib which appears to be the fastest FTP server out there (on UNIX at least)! See: http://code.google.com/p/pyftpdlib/wiki/Benchmarks
1.0.0 release introduces serious improvements amongst which python 3 support (finally!) and full Unicode support. Here's the major ones.
=== New IO loop and epoll() / kqueue() support ===
The IO loop, originally relying on asyncore, has been rewritten from scratch (http://code.google.com/p/pyftpdlib/source/browse/trunk/pyftpdlib/ioloop.py) and now supports epoll() on Linux and kqueue() on OSX/BSD. Also select() (Windows) and poll() pollers have been rewritten resulting in pyftpdlib being an order of magnitude faster and more scalable than ever. Read the full story here: http://code.google.com/p/pyftpdlib/issues/detail?id=203
=== Alternative concurrency model ===
It is now possible to change the default concurrency model from async (non blocking) to multiple processes / threads based, meaning you are now free to block as long as you want and support particularly slow filesystems. Switching is as easy as changing an import. More information are here: http://code.google.com/p/pyftpdlib/wiki/Tutorial#4.6_-_Changing_the_concurre...
=== Python 3 porting + full Unicode support ===
=== Logging ===
logging module is now used for logging as replacement for log(), logline() and logerror() functions which are now deprecated. Also, the whole logging infrastructure has been refactored and it is more compact and consistent. Also by default pyftpdlib logs will have colors.
=== Other improvements ===
* a new FilesystemError exception class is available in order send custom error strings to client from an AbstracteFS subclass.
* on_connect() and on_disconnect() callbacks
* FTPHandler.ftp_* methods implementing filesystem-related commands now return a meaningful value on success (tipically the path name).
* FTPServer.serve_forever() has a new handle_exit parameter which can be set to False in order to avoid handling SIGTERM/SIGINT signals.
=== Backward compatibility breakage ===
A lot of backward incompatible changes have been introduced amongst which the different import system, the different validate_authentication() signature and the fact that the filesystem class now expects Unicode strings rather than bytes. HISTORY file enlists all of them and also provides a guide on how to port your existent to this new version. http://code.google.com/p/pyftpdlib/source/browse/trunk/HISTORY?spec=svn1175&...
=== Some links ===
Home: http://code.google.com/p/pyftpdlib/ Download: http://code.google.com/p/pyftpdlib/list/downloads Tutorial: http://code.google.com/p/pyftpdlib/wiki/Tutorial Complete list of changes: http://code.google.com/p/pyftpdlib/source/browse/trunk/HISTORY
That should be all folks. I hope you'll enjoy this new version,