Пример #1
0
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)
Пример #2
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)
Пример #3
0
    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)