
Hi Paul - I'm very new to twisted (I've only just started using it, so I apologise if
anything I ask is seemingly obvious!). I'm looking to try and set up a FTP server which will serve a file structure and files which don't exists on the server (the file structure information is stored on cassandra, and the files are on s3). The file structure and files will also be unique to the user, so different logins will generate the file structure for that particular user, but I guess I can adress that later.
Here is a quick sketch of some of the steps ... but beware, I haven't debugged this. You'll want to subclass twisted.protocols.ftp.FTPShell with a new command interpreter class PaulsFTPShell(FTPShell): .... The you'll need to write a Realm that returns an instance of your FTP Shell: class PaulsFTPRealm(FTPRealm): """ @type anonymousRoot: L{twisted.python.filepath.FilePath} @ivar anonymousRoot: Root of the filesystem to which anonymous users will be granted access. """ implements(portal.IRealm) def __init__(self, ....) .... def requestAvatar(self, avatarId, mind, *interfaces): for iface in interfaces: if iface is IFTPShell: if avatarId is checkers.ANONYMOUS: avatar = None else: avatar = PaulsFTPShell( ...) return IFTPShell, avatar, getattr(avatar, 'logout', lambda: None) raise NotImplementedError("Only IFTPShell interface is supported by this realm") Then you'll stich it all together like this: f = FTPFactory() r = PaulsFTPRealm() p = Portal.Portal(r) p.registerChecker(...) f.portal = p Hope this helps get you started.