add 'talk' package providing a common communication framework
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2923 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
10d4a15ca4
commit
e0503fea5b
12 changed files with 150 additions and 29 deletions
|
@ -53,17 +53,19 @@ def setup(configInfo=None):
|
|||
|
||||
|
||||
def setupEnvironment(config):
|
||||
# self registration of components:
|
||||
from cybertools.agent.base import agent, control, job, log, schedule
|
||||
from cybertools.agent.core import agent, control, schedule
|
||||
from cybertools.agent.control import cmdline, remote, ajaxclient
|
||||
from cybertools.agent.control import cmdline, remote
|
||||
from cybertools.agent.crawl import base, filesystem, outlook
|
||||
from cybertools.agent.transport import remote, loops
|
||||
# API registration:
|
||||
from cybertools.agent.system.windows import api
|
||||
api.setup(config)
|
||||
from cybertools.agent.system import rpcapi
|
||||
rpcapi.setup(config)
|
||||
from cybertools.agent.system import sftpapi
|
||||
sftpapi.setup(config)
|
||||
from cybertools.agent.crawl import base, filesystem, outlook
|
||||
from cybertools.agent.system import http, xmlrpc, sftp
|
||||
http.setup(config)
|
||||
xmlrpc.setup(config)
|
||||
sftp.setup(config)
|
||||
|
||||
|
||||
def startReactor():
|
||||
|
|
31
agent/system/http.py
Normal file
31
agent/system/http.py
Normal file
|
@ -0,0 +1,31 @@
|
|||
#
|
||||
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
"""
|
||||
Configuration-controlled import of HTTP communication functionality.
|
||||
|
||||
$Id: rpcapi.py
|
||||
"""
|
||||
|
||||
def setup(config):
|
||||
global listener, getPage
|
||||
if config.talk.http == 'testing':
|
||||
from cybertools.agent.testing.http import listener, getPage
|
||||
else:
|
||||
from twisted.internet import reactor as listener
|
||||
from twisted.web.client import getPage
|
|
@ -17,7 +17,7 @@
|
|||
#
|
||||
|
||||
"""
|
||||
Configuration controlled import of sftp functionality
|
||||
Configuration-controlled import of sftp functionality.
|
||||
|
||||
$Id: rpcapi.py
|
||||
"""
|
|
@ -25,6 +25,6 @@ $Id: rpcapi.py
|
|||
def setup(config):
|
||||
global xmlrpc
|
||||
if config.transport.remote.server == 'testing':
|
||||
from cybertools.agent.testing.rpcserver import RPCServer, xmlrpc
|
||||
from cybertools.agent.testing.rpcserver import xmlrpc
|
||||
else:
|
||||
from twisted.web import xmlrpc
|
23
agent/talk/README.txt
Normal file
23
agent/talk/README.txt
Normal file
|
@ -0,0 +1,23 @@
|
|||
================================================
|
||||
Agents for Job Execution and Communication Tasks
|
||||
================================================
|
||||
|
||||
($Id$)
|
||||
|
||||
>>> config = '''
|
||||
... controller(names=['core.sample'])
|
||||
... scheduler(name='core')
|
||||
... logger(name='default', standard=30)
|
||||
... talk.http = 'testing'
|
||||
... '''
|
||||
>>> from cybertools.agent.main import setup
|
||||
>>> master = setup(config)
|
||||
Starting agent application...
|
||||
Using controllers core.sample.
|
||||
|
||||
|
||||
Communication Handling
|
||||
======================
|
||||
|
||||
>>> from cybertools.agent.talk.http import Handler
|
||||
|
4
agent/talk/__init__.py
Normal file
4
agent/talk/__init__.py
Normal file
|
@ -0,0 +1,4 @@
|
|||
"""
|
||||
$Id$
|
||||
"""
|
||||
|
55
agent/talk/http.py
Normal file
55
agent/talk/http.py
Normal file
|
@ -0,0 +1,55 @@
|
|||
#
|
||||
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
"""
|
||||
Handling asynchronous and possibly asymmetric communication tasks.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from twisted.internet import defer
|
||||
from twisted.web.resource import Resource
|
||||
from twisted.web.server import Site
|
||||
from zope.interface import implements
|
||||
|
||||
from cybertools.agent.base.agent import Master
|
||||
from cybertools.agent.system.http import listener
|
||||
|
||||
|
||||
class RootResource(Resource):
|
||||
|
||||
def getChild(self, path, request):
|
||||
return CommandHandler(path)
|
||||
|
||||
|
||||
class CommandHandler(Resource):
|
||||
|
||||
def __init__(self, path):
|
||||
self.command = path
|
||||
|
||||
def render(self, request):
|
||||
return '{"message": "OK"}'
|
||||
|
||||
|
||||
class Handler(object):
|
||||
|
||||
def listen(self, port):
|
||||
return listener.listenTCP(port, Site(RootResource()))
|
||||
|
||||
def send(self, clientId, data):
|
||||
return defer.Deferred()
|
|
@ -17,24 +17,28 @@
|
|||
#
|
||||
|
||||
"""
|
||||
Controller that receives and responds to requests from a browser (AJAX) client;
|
||||
in parallel it sends informations to the client by responding to
|
||||
polling requests from the client.
|
||||
Fake testing objects/functions for HTTP communication.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from zope.interface import implements
|
||||
|
||||
from cybertools.agent.base.agent import Master
|
||||
from cybertools.agent.core.control import SampleController
|
||||
from cybertools.agent.components import controllers
|
||||
from twisted.internet.defer import Deferred, succeed
|
||||
|
||||
|
||||
class ClientController(SampleController):
|
||||
class Listener(object):
|
||||
|
||||
def setup(self):
|
||||
super(ClientController, self).setup()
|
||||
site = port = None
|
||||
|
||||
def listenTCP(self, port, site):
|
||||
self.port = port
|
||||
self.site = site
|
||||
self.resource = site.resource
|
||||
deferred = self.deferred = Deferred()
|
||||
return deferred
|
||||
|
||||
|
||||
controllers.register(ClientController, Master, name='ajaxclient')
|
||||
listener = Listener()
|
||||
|
||||
|
||||
def getPage(url, contextFactory=None, method='GET', postdata=None, **kwargs):
|
||||
return succeed('{"message": "OK"}')
|
|
@ -42,6 +42,7 @@ def test_suite():
|
|||
testSuite = unittest.TestSuite((
|
||||
unittest.makeSuite(Test),
|
||||
DocFileSuite('README.txt', optionflags=flags),
|
||||
DocFileSuite('talk/README.txt', optionflags=flags),
|
||||
DocFileSuite('crawl/README.txt', optionflags=flags),
|
||||
DocFileSuite('crawl/filesystem.txt', optionflags=flags),
|
||||
DocFileSuite('crawl/outlook.txt', optionflags=flags),
|
||||
|
|
|
@ -28,6 +28,7 @@ from twisted.internet import defer, protocol, reactor
|
|||
|
||||
CHUNKSIZE = 4096
|
||||
|
||||
|
||||
class FileTransfer(protocol.ClientFactory):
|
||||
""" Transfers files to a remote SCP/SFTP server.
|
||||
"""
|
||||
|
|
|
@ -28,8 +28,8 @@ from twisted.internet import defer
|
|||
from zope.interface import implements
|
||||
import os
|
||||
|
||||
from cybertools.agent.system import rpcapi
|
||||
from cybertools.agent.system import sftpapi
|
||||
from cybertools.agent.system import xmlrpc
|
||||
from cybertools.agent.system import sftp
|
||||
from cybertools.agent.base.agent import Master
|
||||
from cybertools.agent.core.agent import QueueableAgent
|
||||
from cybertools.agent.interfaces import ITransporter
|
||||
|
@ -51,11 +51,11 @@ class Transporter(QueueableAgent):
|
|||
super(Transporter, self).__init__(master)
|
||||
config = master.config
|
||||
serverURL = config.transport.remote.url
|
||||
self.server = rpcapi.xmlrpc.Proxy(serverURL)
|
||||
self.server = xmlrpc.xmlrpc.Proxy(serverURL)
|
||||
userName = config.transport.remote.ftp.user
|
||||
password = config.transport.remote.ftp.password
|
||||
host = config.transport.remote.ftp.url
|
||||
self.ftpServer = sftpapi.FileTransfer(host, self.port, userName, password)
|
||||
self.ftpServer = sftp.FileTransfer(host, self.port, userName, password)
|
||||
|
||||
def process(self):
|
||||
return self.transfer(self.params['resource'])
|
||||
|
|
|
@ -19,13 +19,13 @@ Agents for Job Execution and Communication Tasks
|
|||
|
||||
|
||||
Transporter
|
||||
==============
|
||||
===========
|
||||
|
||||
The agent uses Twisted's cooperative multitasking model.
|
||||
|
||||
The Transporter is used to contact an xmlrpc Server and transmit the metadata to the other
|
||||
loops system. The Transporter is derived from Queueable agent, because also here applies that only one
|
||||
item at a time is transmitted.
|
||||
The Transporter is used to contact an xmlrpc Server and transmit the metadata
|
||||
to the other loops system. The Transporter is derived from Queueable agent
|
||||
to ensure that only one item at a time is transmitted.
|
||||
|
||||
Returns a deferred that must be supplied with a callback method (and in
|
||||
most cases also an errback method).
|
||||
|
|
Loading…
Add table
Reference in a new issue