codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#!/usr/bin/env python """Justin Giorgi, Robert Straitt 12/31/12 File: main.py Scope: Initialization and registration of all core modules and configured mods. Changelog: No changes Status: Complete within scope of current requirements. Testing: No tests, extensive testing necessary. """ # Standard library imports from os import getcwd from ConfigParser import SafeConfigParser as ConfigParser # Installed extension imports from circuits import Component, Debugger # Local imports from core import core from mods import mods from environment import Environment # Exception(s) class ConfigurationError(Exception): pass class Main(Component): """Main class responsible for importing and loading all core classes as well as enabled mods. No other tasks performed. """ def __init__(self, config): super(Main, self).__init__() # Prepare environment self.env = Environment(config) # Load core (core is a list of core modules to load) for C in core: c = C(self.env) c.register(self) # Load enabled mods (mods is a dict of modname to mod) for m in mods: if self.env.config.has_option("mods", m) and \ self.env.config.getboolean("mods", m): m = mods[m](self.env) m.register(self) def init(config="infocream.conf", cwd=getcwd()): # Parse config conf = ConfigParser() conf.read(config) # Init debugger if required components = [] ret = [] # Check for config errors if conf.getboolean("run", "multiprocess") and conf.getboolean("run", "thread"): raise ConfigurationError("Multiprocessing and threading are mutually " "exclusive.") # Run in daemon? if conf.getboolean("run", "daemon"): print "Initializing Daemonizer..." components.append(Daemon("infocream.pid", path=cwd, stdin="stdin.txt", stdout="stdout.txt", stderr="stderr.txt")) # Run Debugger? if conf.getboolean("run", "debug"): print "Initializing Debugger..." d = Debugger() components.append(d) ret.append(d) else: ret.append(None) # Startup main print "Initializing system..." m = Main(conf) components.append(m) ret.append(m) print "System components loaded." # Initialize everything print "Preparing environment..." components.reverse() # run first item as root root = components.pop() for comp in components: comp.register(root) # Run in thread or multiprocess? if conf.getboolean("run", "thread"): print "Configuring for interactive operations..." go = root.start ret.append(True) elif conf.getboolean("run", "multiprocess"): print "Preparing for multiprocessing..." def initprocesses(): processes = conf.getint("run", "processes") for x in range(1, processes): root.start(process=True) root.run() go = initprocesses ret.append(False) else: "Configuring for single processes, non-interactive operation..." go = root.run ret.append(False) # Run the system print "System loaded successfully. Executing Main loop." go() # Return return tuple(ret) # If run independently initialize automagically if __name__ == "__main__": d, m, thread = init() if thread: print "Ready for interactive operations."
Private
[
?
]
Run code
Submit