work in progress: resource transfer via sftp, + testing code
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2733 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
f0373140fa
commit
cea87a8225
4 changed files with 37 additions and 5 deletions
18
agent/testing/test_sftp.py
Normal file
18
agent/testing/test_sftp.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
|
||||||
|
|
||||||
|
from twisted.internet import reactor
|
||||||
|
|
||||||
|
from cybertools.agent.transport.file.sftp import FileTransfer
|
||||||
|
|
||||||
|
def output(x):
|
||||||
|
print x
|
||||||
|
|
||||||
|
ft = FileTransfer('cy05.de', 22, 'scrat', '...')
|
||||||
|
|
||||||
|
d = ft.upload('text.txt', 'text.txt')
|
||||||
|
d.addCallback(output)
|
||||||
|
|
||||||
|
reactor.callLater(3, ft.close)
|
||||||
|
reactor.callLater(4, reactor.stop)
|
||||||
|
|
||||||
|
reactor.run()
|
|
@ -10,4 +10,5 @@ scheduler(name='core')
|
||||||
logger(name='default', standard=30)
|
logger(name='default', standard=30)
|
||||||
transport.remote.server = 'testing'
|
transport.remote.server = 'testing'
|
||||||
transport.remote.url = 'http://localhost:8123'
|
transport.remote.url = 'http://localhost:8123'
|
||||||
|
transport.remote.ftp.url = 'http://cy05.de'
|
||||||
|
transport.remote.ftp.user = 'scrat'
|
||||||
|
|
|
@ -56,6 +56,7 @@ class FileTransfer(protocol.ClientFactory):
|
||||||
if len(self.queue) == 1 and self.channel is not None:
|
if len(self.queue) == 1 and self.channel is not None:
|
||||||
# the channel has emptied the queue
|
# the channel has emptied the queue
|
||||||
self.channel.execute()
|
self.channel.execute()
|
||||||
|
self.deferred = d
|
||||||
return d
|
return d
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
|
@ -95,19 +96,28 @@ class SFTPChannel(channel.SSHChannel):
|
||||||
def command_upload(self):
|
def command_upload(self):
|
||||||
params = self.params
|
params = self.params
|
||||||
remotePath = params['remotePath']
|
remotePath = params['remotePath']
|
||||||
|
localPath = params['localPath']
|
||||||
|
self.localFile = open(localPath, 'rb')
|
||||||
d = self.client.openFile(remotePath,
|
d = self.client.openFile(remotePath,
|
||||||
filetransfer.FXF_WRITE | filetransfer.FXF_CREAT, {})
|
filetransfer.FXF_WRITE | filetransfer.FXF_CREAT, {})
|
||||||
print 'command_upload', params
|
print 'command_upload', params
|
||||||
d.addCallbacks(self.writeChunk, self.logError)
|
d.addCallbacks(self.writeChunk, self.logError)
|
||||||
|
|
||||||
def writeChunk(self, clientFile):
|
def writeChunk(self, remoteFile):
|
||||||
print 'writeChunk', clientFile
|
# data = self.localFile.read(chunkSize)
|
||||||
params = self.params
|
# if len(data) < chunkSize():
|
||||||
d = clientFile.writeChunk(0, 'Hello World')
|
# write rest
|
||||||
|
# addCallbacks(self.finished, self.logError)
|
||||||
|
print 'writeChunk', remoteFile
|
||||||
|
d = remoteFile.writeChunk(0, 'Hello World')
|
||||||
|
d.addCallbacks(self.writeChunk, self.logError)
|
||||||
|
|
||||||
def logError(self, reason):
|
def logError(self, reason):
|
||||||
print 'error', reason
|
print 'error', reason
|
||||||
|
|
||||||
|
def finished(self, result):
|
||||||
|
self.deferred.callback('finished')
|
||||||
|
|
||||||
|
|
||||||
# classes for managing the SSH protocol and connection
|
# classes for managing the SSH protocol and connection
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ from twisted.internet import defer
|
||||||
from zope.interface import implements
|
from zope.interface import implements
|
||||||
|
|
||||||
from cybertools.agent.system import rpcapi
|
from cybertools.agent.system import rpcapi
|
||||||
|
#from cybertools.agent.system import sftpapi
|
||||||
from cybertools.agent.base.agent import Master
|
from cybertools.agent.base.agent import Master
|
||||||
from cybertools.agent.core.agent import QueueableAgent
|
from cybertools.agent.core.agent import QueueableAgent
|
||||||
from cybertools.agent.interfaces import ITransporter
|
from cybertools.agent.interfaces import ITransporter
|
||||||
|
@ -55,6 +56,7 @@ class Transporter(QueueableAgent):
|
||||||
config = master.config
|
config = master.config
|
||||||
self.serverURL = config.transport.remote.url
|
self.serverURL = config.transport.remote.url
|
||||||
self.server = rpcapi.xmlrpc.Proxy(self.serverURL)
|
self.server = rpcapi.xmlrpc.Proxy(self.serverURL)
|
||||||
|
#self.ftpServer = FileTransfer(host, port, username, password)
|
||||||
#self.method = params[method]
|
#self.method = params[method]
|
||||||
#self.machineName = params[machineName]
|
#self.machineName = params[machineName]
|
||||||
#self.userName = params[userName]
|
#self.userName = params[userName]
|
||||||
|
@ -69,6 +71,7 @@ class Transporter(QueueableAgent):
|
||||||
"""
|
"""
|
||||||
#return self.server.callRemote('getMetadata', resource.metadata)
|
#return self.server.callRemote('getMetadata', resource.metadata)
|
||||||
self.deferred = defer.Deferred()
|
self.deferred = defer.Deferred()
|
||||||
|
# d = self.ftpServer.upload()
|
||||||
d = self.server.callRemote('getMetadata', resource.metadata)
|
d = self.server.callRemote('getMetadata', resource.metadata)
|
||||||
d.addCallback(self.transferDone)
|
d.addCallback(self.transferDone)
|
||||||
d.addErrback(self.errorHandler)
|
d.addErrback(self.errorHandler)
|
||||||
|
|
Loading…
Add table
Reference in a new issue