The library has seen success, being used by famous projects like Google Chromium, Bazaar VCS and included in Debian, Fedora and FreeBSD package repositories.
Developers can easily write asynchronous FTP servers with Python code.
pyftpdlib is currently the most complete RFC-959 FTP server implementation available for the Python programming language.
Here are some key features of "pyftpdlib":
· Entirely written in pure Python, no third party modules are used. It works on any system where select( ) or poll( ) is available.
· Extremely flexible system of "authorizers" able to manage both "virtual" and "real" users on on both Windows and UNIX.
· Works with Python 2.4, 2.5, 2.6 and 2.7.
· Support for FTPS (FTP over TLS/SSL). New in 0.6.0
· Native support for virtual users and virtual filesystem.
· Support for recent FTP commands like MLSD and MLST (RFC-3659).
· Support for FXP, site-to-site transfers.
· Support for IPv6 (RFC-2428).
· NAT/Firewall support with PASV/EPSV passive mode connections.
· Bandwidth throttling.
· Support for resumed transfers.
· Per-user permissions configurability.
· Maximum connections limit.
· Per-source-IP limits.
· Configurable idle timeouts for both control and data channels.
· Compact: main library is distributed as a single stand-alone module (ftpserver.py).
Requirements:
· Python 2.4 up to 2.7
What's New in This Release: [ read full changelog ]
Enhancements:
· Uploads (from server to client) on UNIX are now from 2x (Linux) to 3x (OSX) faster because of sendfile(2) system call usage.
· AbstractedFS "root" and "cwd" are no longer read-only properties but can be set via setattr().
· Added FTPHandler.logerror() method. It can be overridden to provide more information (e.g. username) when logging exception tracebacks.
· Added support for SITE CHMOD command (change file mode).
· setuptools is now used in setup.py
· Added anti flood script in demo directory.
· Added CallEvery class to call a function every x seconds.
· Pass Debian licenscheck tool.
Bug fixes:
· Data connection must be closed before sending 226/426 reply. This was against RFC-959 and was causing problems with older FTP clients.
· MLSD 'unique' fact can provide the same value for files having a similar device/inode but that in fact are different.
· (FTPS) SSL shutdown() is not invoked for the control connection.
· FEAT erroneously reports MLSD. (patch by Andrew Scheller)
· (FTPS) an exception on send() can cause server to crash (DoS).
· Fixed some typos returned on HELP.
Major API changes since 0.6.0:
· New FTPHandler.use_sendfile attribute.
· FTPServer.serve_forever() is a classmethod.
· AbstractedFS root and cwd properties can now be set via setattr().
· New CallLater class.
· New FTPHandler.on_login_failed(username, password) method.
· New FTPHandler.logerror(msg) method.
· New FTPHandler.log_exception(instance) method.