Сообщить об ошибке.

Класс FTPHandler() модуля pyftpdlib в Python

Использование событий событий FTP-сервера

Класс pyftpdlib.handlers.FTPHandler(conn, server) реализует интерпретатор протокола FTP-сервера (см. RFC-959), обрабатывая команды, полученные от клиента по каналу управления, путем вызова соответствующего метода этой команде. Например, для полученной команды "MKD pathname" вызывается метод .ftp_MKD() с pathname в качестве аргумента).

Вся соответствующая информация о сеансе хранится в переменных экземпляра. Аргументы conn - это базовый экземпляр объекта сокета вновь установленного соединения, server - это экземпляр класса pyftpdlib.servers.FTPServer. Базовое использование просто требует создания экземпляра класса FTPHandler и указания, какой экземпляр авторизатора он будет использовать:

>>> from pyftpdlib.handlers import FTPHandler
>>> from pyftpdlib.authorizers import DummyAuthorizer
>>> handler = FTPHandler
>>> authorizer = DummyAuthorizer()
>>> authorizer.add_anonymous(homedir='/somedir')
>>> handler.authorizer = authorizer

Через подклассы FTPHandler() можно использовать обратные вызовы на какие то действия пользователя.

Небольшой пример, который показывает, как это сделать:

from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
from pyftpdlib.authorizers import DummyAuthorizer

class MyHandler(FTPHandler):
    def on_connect(self):
        print (f'Connected {self.remote_ip}:{self.remote_port}')

    def on_disconnect(self):
        # сделать что-нибудь, когда клиент отключается
        pass

    def on_login(self, username):
        # сделать что-нибудь, когда пользователь войдет в систему
        pass

    def on_logout(self, username):
        # сделать что-нибудь, когда пользователь выйдет из системы
        pass

    def on_file_sent(self, file):
        # сделать что-нибудь, когда файл был отправлен
        pass

    def on_file_received(self, file):
        # сделать что-нибудь, когда файл был получен
        pass

    def on_incomplete_file_sent(self, file):
        # сделать что-нибудь, когда файл частично отправлен
        pass

    def on_incomplete_file_received(self, file):
        # удалить частично загруженные файлы
        import os
        os.remove(file)

def main():
    authorizer = DummyAuthorizer()
    authorizer.add_user('user', '12345', homedir='.', perm='elradfmwMT')
    authorizer.add_anonymous(homedir='.')

    handler = MyHandler
    handler.authorizer = authorizer
    server = FTPServer(('', 2121), handler)
    server.serve_forever()

if __name__ == "__main__":
    main()