remote transport working via test script

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2769 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2008-07-24 05:54:53 +00:00
parent bfd6191683
commit 64ccc2cc94
6 changed files with 32 additions and 53 deletions

View file

@ -24,10 +24,6 @@ $Id$
""" """
import sys import sys
print "****printing sys.path****"
for elem in sys.path:
print elem
import os import os
from twisted.internet import reactor from twisted.internet import reactor
@ -81,6 +77,6 @@ if __name__ == '__main__':
metadata01 = Metadata(dict(filename='dummy.txt')) metadata01 = Metadata(dict(filename='dummy.txt'))
res01 = Resource() res01 = Resource()
res01.metadata = metadata01 res01.metadata = metadata01
res01.path = '/dummydir/dummyfile' res01.path = 'data/file1.txt'
controller.enterJob('sample', 'sample03', params=dict(resource=res01)) controller.enterJob('sample', 'sample03', params=dict(resource=res01))
startReactor() startReactor()

View file

@ -64,7 +64,7 @@ class RPCServer(xmlrpc.XMLRPC):
# this is done AFTER the resource (like e.g. file or mail) # this is done AFTER the resource (like e.g. file or mail)
# is handed over # is handed over
pass pass
print metadata print '*** metadata', metadata
metadata = "Echo: ", metadata metadata = "Echo: ", metadata
return metadata return metadata
@ -76,4 +76,5 @@ if __name__ == '__main__':
from twisted.internet import reactor from twisted.internet import reactor
site = RPCServer() site = RPCServer()
reactor.listenTCP(8082, server.Site(site)) reactor.listenTCP(8082, server.Site(site))
print '*** listening...'
reactor.run() reactor.run()

View file

@ -7,7 +7,7 @@ from cybertools.agent.transport.file.sftp import FileTransfer
def output(x): def output(x):
print x print x
ft = FileTransfer('cy05.de', 22, 'scrat', 'pyjmfha') ft = FileTransfer('cy05.de', 22, 'scrat', '...')
d = ft.upload('d:\\text2.rtf', 'text.txt') d = ft.upload('d:\\text2.rtf', 'text.txt')
d.addCallback(output) d.addCallback(output)

View file

@ -8,9 +8,10 @@
controller(names=['core.sample']) controller(names=['core.sample'])
scheduler(name='core') 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:8082'
transport.remote.ftp.url = 'http://cy05.de' transport.remote.ftp.url = 'cy05.de'
transport.remote.ftp.user = 'scrat' transport.remote.ftp.user = 'scrat'
transport.remote.sftp = 'testing' transport.remote.ftp.password = '...'
transport.remote.sftp = 'http://cy05.de'
transport.remote.chunksize = 4096 transport.remote.chunksize = 4096

View file

@ -46,7 +46,7 @@ class FileTransfer(protocol.ClientFactory):
def upload(self, localPath, remotePath): def upload(self, localPath, remotePath):
""" Copies a file, returning a deferred. """ Copies a file, returning a deferred.
""" """
d = defer.Deferred() d = self.deferred = defer.Deferred()
# we put everything in a queue so that more than one file may # we put everything in a queue so that more than one file may
# be transferred in one connection. # be transferred in one connection.
self.queue.append(dict(deferred=d, self.queue.append(dict(deferred=d,
@ -56,7 +56,6 @@ 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):
@ -102,7 +101,6 @@ class SFTPChannel(channel.SSHChannel):
self.localFile = open(localPath, 'rb') 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
d.addCallbacks(self.writeChunk, self.logError) d.addCallbacks(self.writeChunk, self.logError)
def writeChunk(self, remoteFile): def writeChunk(self, remoteFile):
@ -123,7 +121,8 @@ class SFTPChannel(channel.SSHChannel):
def finished(self, result): def finished(self, result):
self.localFile.close() self.localFile.close()
self.remFile.close() self.remFile.close()
self.d.callback('finished') #self.d.callback('finished')
self.conn.factory.deferred.callback('finished')
# classes for managing the SSH protocol and connection # classes for managing the SSH protocol and connection

View file

@ -44,25 +44,18 @@ class Transporter(QueueableAgent):
implements(ITransporter) implements(ITransporter)
serverURL = '' port = 22
server = ''
host = port = None
method = ''
machineName = '' machineName = ''
userName = ''
password = ''
resource = None
def __init__(self, master): def __init__(self, master):
super(Transporter, self).__init__(master) super(Transporter, self).__init__(master)
config = master.config config = master.config
self.serverURL = config.transport.remote.url serverURL = config.transport.remote.url
self.server = rpcapi.xmlrpc.Proxy(self.serverURL) self.server = rpcapi.xmlrpc.Proxy(serverURL)
self.ftpServer = sftpapi.FileTransfer(self.host, self.port, self.userName, self.password) userName = config.transport.remote.ftp.user
#self.method = params[method] password = config.transport.remote.ftp.password
#self.machineName = params[machineName] host = config.transport.remote.ftp.url
#self.userName = params[userName] self.ftpServer = sftpapi.FileTransfer(host, self.port, userName, password)
#self.password = params[password]
def process(self): def process(self):
return self.transfer(self.params['resource']) return self.transfer(self.params['resource'])
@ -71,12 +64,9 @@ class Transporter(QueueableAgent):
""" Transfer the resource (an object providing IResource) """ Transfer the resource (an object providing IResource)
to the server and return a Deferred. to the server and return a Deferred.
""" """
#return self.server.callRemote('getMetadata', resource.metadata)
self.deferred = defer.Deferred() self.deferred = defer.Deferred()
#print "**** RESOURCE.PATH: ", resource.path
remoteFile = os.path.basename(resource.path) remoteFile = os.path.basename(resource.path)
d = self.ftpServer.upload(resource.path, remoteFile) d = self.ftpServer.upload(resource.path, remoteFile)
#d = self.server.callRemote('getMetadata', resource.metadata)
d.addErrback(self.errorHandler) d.addErrback(self.errorHandler)
d.addCallback(lambda result: d.addCallback(lambda result:
self.server.callRemote('getMetadata', dict(resource.metadata))) self.server.callRemote('getMetadata', dict(resource.metadata)))
@ -97,14 +87,6 @@ class Transporter(QueueableAgent):
This callback method is called when resource and metadata This callback method is called when resource and metadata
have been transferred successfully. have been transferred successfully.
""" """
#print 'transferDone:', successMessage
self.deferred.callback(result) self.deferred.callback(result)
# def process(self):
# return self.collect()
# def collect(self, filter=None):
# d = defer.succeed([])
# return d
agents.register(Transporter, Master, name='transport.remote') agents.register(Transporter, Master, name='transport.remote')