Source code for pyquickhelper.filehelper.ftp_mock
"""
Mock FTP classes.
:githublink:`%|py|5`
"""
from ..loghelper.flog import noLOG
from .ftp_transfer import TransferFTP
[docs]class MockTransferFTP(TransferFTP):
"""
mock :class:`TransferFTP <pyquickhelper.filehelper.ftp_transfer.TransferFTP>`
:githublink:`%|py|12`
"""
[docs] def __init__(self, ftps='FTP', fLOG=noLOG):
"""
:param ftps: protocol
:param fLOG: logging function
:githublink:`%|py|18`
"""
TransferFTP.__init__(self, None, "login", "password", ftps=ftps)
self._store = {}
[docs] def run_command(self, command, *args, **kwargs):
"""
Mock method :meth:`run_command <pyquickhelper.filehelper.ftp_transfer.TransferFTP.run_commnad>`
:githublink:`%|py|25`
"""
if command == self._ftp.mlsd and args == ('.',):
return [('setup.py', {'name': 'setup.py'})]
elif command == self._ftp.cwd and args == ('.',):
return None
elif command == self._ftp.pwd and len(args) == 0:
return "."
elif command == self._ftp.cwd and args == ('..',):
return None
elif command == self._ftp.storbinary and args[0] == 'STOR test_transfer_ftp.py':
self._store[args[0]] = args
return None
elif command == self._ftp.retrbinary and args[0] == 'RETR test_transfer_ftp.py':
b = self._store[args[0].replace("RETR", "STOR")][1]
return b'ee'
elif command == self._ftp.cwd and args == ('backup',):
self._store[args[0]] = args
return None
elif command == self._ftp.storbinary and args[0] == 'STOR setup.py':
self._store[args[0]] = args
return None
elif command == self._ftp.retrbinary and args[0] == 'RETR setup.py':
b = self._store[args[0].replace("RETR", "STOR")][1]
s = b.getbuffer()
args[1](s)
return len(s)
else:
raise Exception("command='{0}'\nargs={1}".format(command, args))