revisor/base.py | 34 ++++++---------
revisor/modhub/__init__.py | 98 +++++++++++++++++++++++++++++++++++++++------
2 files changed, 101 insertions(+), 31 deletions(-)
New commits:
commit efe82349a05447c6dcd94d2a51164278292e4185
Author: noik <noik00(a)gmail.com>
Date: Thu Dec 11 17:22:42 2008 +0100
changed base.py to start modhub
and started creating a modhub which will act as a distributor for composing spins
diff --git a/revisor/base.py b/revisor/base.py
index 3e15c82..0348035 100644
--- a/revisor/base.py
+++ b/revisor/base.py
@@ -104,27 +104,21 @@ class RevisorBase:
self.log.debug(_("Running Revisor in CLI mode..."), level=1)
self.cli = revisor.cli.RevisorCLI(self)
self.cli.run()
-
elif hasattr(self.cfg,"server_mode"):
- # added hubmode
- if self.cfg.hub_mode:
- self.log.debug(_("Running Revisor in Hub mode..."), level=1)
- self.server = self.plugins.modhub
- self.server.run(base=self)
- pass
- if self.cfg.server_mode:
- self.log.debug(_("Running Revisor in RPC Server mode..."),
level=1)
- self.server = self.plugins.modserver
- self.server.run(base=self)
- elif self.cfg.gui_mode:
- self.log.debug(_("Running Revisor in GUI mode..."), level=1)
- self.gui = self.plugins.modgui
- self.gui.run(base=self)
-
- elif self.cfg.gui_mode:
- self.log.debug(_("Running Revisor in GUI mode..."), level=1)
- self.gui = self.plugins.modgui
- self.gui.run(base=self)
+ # added hubmode
+ if self.cfg.hub_mode:
+ self.log.debug(_("Running Revisor in Hub mode..."), level=1)
+ self.server = self.plugins.modhub
+ self.cfg.gui_mode = False #hack!
+ self.server.run(base=self)
+ elif self.cfg.server_mode:
+ self.log.debug(_("Running Revisor in RPC Server mode..."), level=1)
+ self.server = self.plugins.modserver
+ self.server.run(base=self)
+ elif self.cfg.gui_mode:
+ self.log.debug(_("Running Revisor in GUI mode..."), level=1)
+ self.gui = self.plugins.modgui
+ self.gui.run(base=self)
def create_logger(self):
"""Create a logger instance using
cli_options.debuglevel"""
diff --git a/revisor/modhub/__init__.py b/revisor/modhub/__init__.py
index 18a1397..4af145c 100644
--- a/revisor/modhub/__init__.py
+++ b/revisor/modhub/__init__.py
@@ -1,5 +1,3 @@
-# modhub!!
-
# Translation
from rhpl.translate import _, N_, getDefaultLangs
@@ -7,23 +5,76 @@ import revisor
import revisor.base
import revisor.cfg
+import SimpleXMLRPCServer
+import xmlrpclib
+import os
+
+#import logger.Logger
+
class RevisorHub():
+ """ Hub Mode """
def __init__(self):
+ # blaat
print "HELLO HUB!!!!!!!"
- pass
-
+
+ def do_xmlrpc(self, cfg):
+ """ Get our xmlrpc hub running. """
+ xinterface = RevisorXMLRPCInterface(cfg)
+ hub = RevisorXMLRPCServer(('', int(cfg.hub_port)))
+ hub.register_introspection_functions()
+ cfg.log.info("XMLRPC Server running on port %s" % cfg.hub_port)
+ hub.register_instance(xinterface)
+ while True:
+ try:
+ hub.serve_forever()
+ except IOError:
+ # interrupted? try to serve again
+ time.sleep(0.5)
+
def run(self, base):
print "HUB mode started!"
- pass
+ if base.cfg.fork_mode:
+ pid = os.fork()
+ self.do_xmlrpc(base.cfg)
+ else:
+ try:
+ self.do_xmlrpc(base.cfg)
+ pass
+ except KeyboardInterrupt:
+ #base.log.info("Shutting down...")
+ pass
def add_options(self, parser):
modhub_group = parser.add_option_group("Hub Options")
modhub_group.add_option( "--hub",
- dest = "hub_mode",
- action = "store_true",
- default = False,
- help = _("Use the hub mode for distributed
composing"))
+ dest = "hub_mode",
+ action = "store_true",
+ default = False,
+ help = _("Use the Hub mode for distributed
composing."))
+ modhub_group.add_option( "--hub-port",
+ dest = "hub_port",
+ action = "store",
+ default = "9321",
+ help = _("Port to start Hub mode on."),
+ metavar = "[hub-port]")
+ modhub_group.add_option("--forkhub",
+ dest = "forkhub_mode",
+ action = "store",
+ default = False,
+ help = _("Start the Hub mode and fork."),
+ metavar = "[boolean]")
+
+ #def check_options(self, cfg, cli_options):
+ # Cheater! Found a cheater!
+ #print cli_options.server_mode
+ #if cli_options.server_mode:
+ #cfg.server_mode = False
+ #cfg.hub_mode = True
+ #cfg.gui_mode = False
+ #cfg.cli_mode = False
+ #print "blaat"
+ #pass
def set_defaults(self, defaults):
#defaults.db_server = x.x.x.x
@@ -34,6 +85,31 @@ class RevisorHub():
#defaults.dbname = "revisor-hubdb"
#defaults.configfile = "blaat"
pass
+
+
+class RevisorXMLRPCInterface(object):
+ """ Functionality to expose to the XML-RPC interface.
"""
+
+ def __init__(self, cfg=None):
+ #if cfg == None:
+ # FIXME: Initialize ConfigStore or return Error
+ #pass
+ #else:
+ #self.cfg = cfg
- #def check_options(self, cfg, cli_options):
- #pass
+ #self.sessions = dict()
+ #self.next_session = 0
+ pass
+
+
+class Session(object):
+ def __init__(self, id):
+ self.id = id
+ print "Session initted & ended"
+
+
+class RevisorXMLRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer):
+ """ The actual XML-RPC Server object"""
+ def __init__(self, args):
+ self.allow_reuse_address = True
+ SimpleXMLRPCServer.SimpleXMLRPCServer.__init__(self, args)