class DriveDriver(Shell): """Shell to play with a repository. Actually drive the driver yourself. The conf must define the repository to use (str). Start it to learn more. """ conf = {'repository': None} def __init__(self): super(DriveDriver, self).__init__() self.driverArchitect = None self.driver = None self.d = None def afterSession(self): self.driverArchitect.stop() return 0 def beforeSession(self): import inspect from imapfw.runners.driver import DriverRunner from imapfw.architects import DriverArchitect from imapfw.edmp import SyncEmitter repositoryName = self.conf.get('repository') self.driverArchitect = DriverArchitect("%s.Driver"% repositoryName) self.driverArchitect.start() self.driver = self.driverArchitect.getEmitter() self.d = SyncEmitter(self.driver) self.register('driver') self.register('d') self.d.buildDriverFromRepositoryName(repositoryName) # Setup banner. events = [] for name, method in inspect.getmembers(DriverRunner, inspect.isfunction): if name.startswith('_') or name == 'run': continue events.append("\td.%s%s"% (name, inspect.signature(method))) banner = """ Welcome to the shell. The driver is started in a worker. Take control of if with "driver" or "d". "d" will send any event in sync mode. Ctrl+D: quit Available events: %s Notice the driver is already built with this repository."""% "\n".join(events) self.setBanner(banner)
def beforeSession(self): import inspect from imapfw.runners.driver import DriverRunner from imapfw.architects import DriverArchitect from imapfw.edmp import SyncEmitter repositoryName = self.conf.get('repository') self.driverArchitect = DriverArchitect("%s.Driver"% repositoryName) self.driverArchitect.start() self.driver = self.driverArchitect.getEmitter() self.d = SyncEmitter(self.driver) self.register('driver') self.register('d') self.d.buildDriverFromRepositoryName(repositoryName) # Setup banner. events = [] for name, method in inspect.getmembers(DriverRunner, inspect.isfunction): if name.startswith('_') or name == 'run': continue events.append("\td.%s%s"% (name, inspect.signature(method))) banner = """ Welcome to the shell. The driver is started in a worker. Take control of if with "driver" or "d". "d" will send any event in sync mode. Ctrl+D: quit Available events: %s Notice the driver is already built with this repository."""% "\n".join(events) self.setBanner(banner)
def beforeSession(self) -> None: import inspect from imapfw.runners.driver import DriverRunner from imapfw.types.repository import loadRepository from imapfw.architects import DriverArchitect from imapfw.edmp import SyncEmitter self.repository = loadRepository(self.conf.get('repository')) repositoryName = self.repository.getClassName() self.driverArchitect = DriverArchitect("%s.Driver" % repositoryName) self.driverArchitect.init() self.driverArchitect.start() self.driverArch = self.driverArchitect self.driver = self.driverArchitect.getEmitter() self.d = SyncEmitter(self.driver) self.buildDriver() self.register('repository') self.register('driverArch') self.register('driver') self.register('d') # Setup banner. events = [] for name, method in inspect.getmembers(DriverRunner, inspect.isfunction): if name.startswith('_') or name == 'run': continue events.append("- d.%s%s\n%s\n" % (name, inspect.signature(method), method.__doc__)) self.dict_events = events self.events = self._events self.register('events') banner = """ Welcome to the shell! The driver is running in a worker. Take control of it with the pre-configured emitter. It is available from both the "driver" and "d" variables. "d" will send any event in sync mode. Ctrl+D: quit Available commands: - events(): print available events for the driver. Example: >>> d.help() The driver was already built in the default beforeSession() method of this shell. """ self.setBanner(banner)