def handle(self, *args, **options): # bind host and port host_port = options.get('host_port') if host_port: host, _port = host_port.split(':', 1) port = int(_port) else: host = utils.get_settings_value('FTPSERVER_HOST') or '127.0.0.1' port = utils.get_settings_value('FTPSERVER_PORT') or 21 timeout = options['timeout'] \ or utils.get_settings_value('FTPSERVER_TIMEOUT') # passive ports _passive_ports = options['passive-ports'] \ or utils.get_settings_value('FTPSERVER_PASSIVE_PORTS') if _passive_ports: try: passive_ports = utils.parse_ports(_passive_ports) except (TypeError, ValueError): raise CommandError("Invalid passive ports: {}".format( options['passive-ports'])) else: passive_ports = None # masquerade address masquerade_address = options['masquerade-address'] \ or utils.get_settings_value('FTPSERVER_MASQUERADE_ADDRESS') # file access user file_access_user = options['file-access-user'] \ or utils.get_settings_value('FTPSERVER_FILE_ACCESS_USER') # certfile certfile = options['certfile'] \ or utils.get_settings_value('FTPSERVER_CERTFILE') # keyfile keyfile = options['keyfile'] \ or utils.get_settings_value('FTPSERVER_KEYFILE') # sendfile sendfile = options['sendfile'] \ or utils.get_settings_value('FTPSERVER_SENDFILE') # daemonize daemonize = options['daemonize'] \ or utils.get_settings_value('FTPSERVER_DAEMONIZE') if daemonize: daemonize_options = utils.get_settings_value( 'FTPSERVER_DAEMONIZE_OPTIONS') or {} become_daemon(**daemonize_options) # write pid to file pidfile = options['pidfile'] \ or utils.get_settings_value('FTPSERVER_PIDFILE') if pidfile: with open(pidfile, 'w') as f: f.write(str(os.getpid())) # select handler class if certfile or keyfile: if hasattr(handlers, 'TLS_FTPHandler'): handler_class = ( utils.get_settings_value('FTPSERVER_TLSHANDLER') ) or handlers.TLS_FTPHandler else: # unsupported raise CommandError( "Can't import OpenSSL. Please install pyOpenSSL.") else: handler_class = ( utils.get_settings_value('FTPSERVER_HANDLER') ) or handlers.FTPHandler authorizer_class = utils.get_settings_value('FTPSERVER_AUTHORIZER') \ or FTPAccountAuthorizer filesystem_class = utils.get_settings_value('FTPSERVER_FILESYSTEM') \ or None # setup server server = self.make_server( server_class=FTPServer, handler_class=handler_class, authorizer_class=authorizer_class, filesystem_class=filesystem_class, host_port=(host, port), file_access_user=file_access_user, timeout=timeout, passive_ports=passive_ports, masquerade_address=masquerade_address, certfile=certfile, keyfile=keyfile, sendfile=sendfile) # start server quit_command = 'CTRL-BREAK' if sys.platform == 'win32' else 'CONTROL-C' sys.stdout.write(( "Django version {version_dj}, using settings '{settings}'\n" "pyftpdlib version {version_ftp}\n" "Quit the server with {quit_command}.\n").format( version_dj=get_version(), version_ftp=pyftpdlib.__ver__, settings=settings.SETTINGS_MODULE, quit_command=quit_command)) server.serve_forever()
def _callFUT(self, name): from django_ftpserver.utils import get_settings_value return get_settings_value(name)