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:
helmutm 2008-07-02 15:51:58 +00:00
parent f0373140fa
commit cea87a8225
4 changed files with 37 additions and 5 deletions

View 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()

View file

@ -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'

View file

@ -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

View file

@ -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)