少しカスタマイズされたftpサーバーを作成し、コンソールへの印刷例外(特定のタイプの例外)を抑制する必要がありますが、サーバーに「550要求されたアクションが実行されませんでした:内部サーバーエラー」またはそのようなものをクライアントに送信させたいです。
ただし、addErrback() を使用して例外をキャッチすると、コンソールに例外は表示されませんが、クライアントは OK ステータスになります。
どうすればよいですか?
errbackハンドラーでエラーをキャッチしたら、失敗のタイプを検査し、アプリケーションの内部ロジックに基づいて、FTPエラーメッセージとしてエラーをクライアントに送信する必要があります。twisted.protocol.ftp.FTPはself.replyでこれを処理します(ERROR_CODE、 "説明")
したがって、コードは次のようになります。
from twisted.internet import ftp
MY_ERROR = ftp.REQ_ACTN_NOT_TAKEN
def failureCheck(failureInstance):
#do some magic to establish if we should reply an Error to this failure
return True
class myFTP(ftp.FTP):
def myActionX(self):
magicResult = self.doDeferredMagic()
magicResult.addCallback(self.onMagicSuccess)
magicResult.addErrback(self.onFailedMagic)
def onFailedMagic(self,failureInstance):
if failureCheck(failureInstance):
self.reply(MY_ERROR,'Add relevant failure information here')
else:
#do whatever other logic here
pass