class MiddlewareHelper(object): implements(IHelper) def __init__(self, middleware_class): self._vumi_helper = VumiApiHelper() self._msg_helper = GoMessageHelper() self.middleware_class = middleware_class self._middlewares = [] generate_proxies(self, self._vumi_helper) generate_proxies(self, self._msg_helper) def setup(self): return self._vumi_helper.setup(setup_vumi_api=False) @inlineCallbacks def cleanup(self): for mw in self._middlewares: yield mw.teardown_middleware() yield self._vumi_helper.cleanup() @inlineCallbacks def create_middleware(self, config=None, middleware_class=None, name='dummy_middleware'): worker_helper = self._vumi_helper.get_worker_helper() dummy_worker = yield worker_helper.get_worker( ToyWorker, self.mk_config({})) config = self.mk_config(config or {}) if middleware_class is None: middleware_class = self.middleware_class mw = middleware_class(name, config, dummy_worker) self._middlewares.append(mw) yield mw.setup_middleware() returnValue(mw)
class MiddlewareHelper(object): implements(IHelper) def __init__(self, middleware_class): self._vumi_helper = VumiApiHelper() self._msg_helper = GoMessageHelper() self.middleware_class = middleware_class self._middlewares = [] generate_proxies(self, self._vumi_helper) generate_proxies(self, self._msg_helper) def setup(self): return self._vumi_helper.setup(setup_vumi_api=False) @inlineCallbacks def cleanup(self): for mw in self._middlewares: yield mw.teardown_middleware() yield self._vumi_helper.cleanup() @inlineCallbacks def create_middleware(self, config=None, middleware_class=None, name='dummy_middleware'): worker_helper = self._vumi_helper.get_worker_helper() dummy_worker = yield worker_helper.get_worker(ToyWorker, self.mk_config({})) config = self.mk_config(config or {}) if middleware_class is None: middleware_class = self.middleware_class mw = middleware_class(name, config, dummy_worker) self._middlewares.append(mw) yield mw.setup_middleware() returnValue(mw)
class AppWorkerHelper(object): implements(IHelper) def __init__(self, worker_class, **msg_helper_args): self._worker_class = worker_class self.vumi_helper = VumiApiHelper() self._app_helper = ApplicationHelper( self._conversation_type(), self.vumi_helper) self.msg_helper = GoMessageHelper(**msg_helper_args) self.transport_name = self.msg_helper.transport_name self.worker_helper = self.vumi_helper.get_worker_helper( self.transport_name) self.dispatch_helper = MessageDispatchHelper( self.msg_helper, self.worker_helper) # Proxy methods from our helpers. generate_proxies(self, self._app_helper) generate_proxies(self, self.msg_helper) generate_proxies(self, self.worker_helper) generate_proxies(self, self.dispatch_helper) def _worker_name(self): return self._worker_class.worker_name def _conversation_type(self): # This is a guess based on worker_name. # TODO: We need a better way to do this, probably involving either the # conversation definition or go.config. return self._worker_name().rpartition('_')[0].decode('utf-8') def setup(self): return self.vumi_helper.setup(setup_vumi_api=False) def cleanup(self): return self.vumi_helper.cleanup() @inlineCallbacks def get_app_worker(self, config=None, start=True): # Note: We assume that this is called exactly once per test. config = self.vumi_helper.mk_config(config or {}) config.setdefault('worker_name', self._worker_name()) config.setdefault('transport_name', self.msg_helper.transport_name) worker = yield self.get_worker(self._worker_class, config, start) # Set up our other bits of helper. self.vumi_helper.set_vumi_api(worker.vumi_api) self.msg_helper.mdb = worker.vumi_api.mdb returnValue(worker) @inlineCallbacks def start_conversation(self, conversation): assert self._get_pending_commands() == [], ( "Found pending commands while starting conversation, aborting.") yield conversation.start() yield self.dispatch_commands_to_app() @inlineCallbacks def stop_conversation(self, conversation): assert self._get_pending_commands() == [], ( "Found pending commands while stopping conversation, aborting.") yield conversation.stop_conversation() yield self.dispatch_commands_to_app() def _get_pending_commands(self): return self.worker_helper.get_dispatched('vumi', 'api', VumiApiCommand) @inlineCallbacks def dispatch_commands_to_app(self): pending_commands = self._get_pending_commands() self.worker_helper._clear_dispatched('vumi', 'api') for command in pending_commands: yield self.worker_helper.dispatch_raw( "%s.control" % (self._worker_name(),), command) @inlineCallbacks def dispatch_command(self, command, *args, **kw): cmd = VumiApiCommand.command( self._worker_name(), command, *args, **kw) yield self.worker_helper.dispatch_raw('vumi.api', cmd) yield self.dispatch_commands_to_app() def get_published_metrics(self, worker): metrics = [] for metric_msg in self.worker_helper.get_dispatched_metrics(): for name, _aggs, data in metric_msg: for _time, value in data: metrics.append((name, value)) return metrics def get_dispatched_app_events(self): return self.worker_helper.get_dispatched('vumi', 'event', VumiApiEvent)
class AppWorkerHelper(object): implements(IHelper) def __init__(self, worker_class, **msg_helper_args): self._worker_class = worker_class self.vumi_helper = VumiApiHelper() self._app_helper = ApplicationHelper(self._conversation_type(), self.vumi_helper) self.msg_helper = GoMessageHelper(**msg_helper_args) self.transport_name = self.msg_helper.transport_name self.worker_helper = self.vumi_helper.get_worker_helper( self.transport_name) self.dispatch_helper = MessageDispatchHelper(self.msg_helper, self.worker_helper) # Proxy methods from our helpers. generate_proxies(self, self._app_helper) generate_proxies(self, self.msg_helper) generate_proxies(self, self.worker_helper) generate_proxies(self, self.dispatch_helper) def _worker_name(self): return self._worker_class.worker_name def _conversation_type(self): # This is a guess based on worker_name. # TODO: We need a better way to do this, probably involving either the # conversation definition or go.config. return self._worker_name().rpartition('_')[0].decode('utf-8') def setup(self): return self.vumi_helper.setup(setup_vumi_api=False) def cleanup(self): return self.vumi_helper.cleanup() @inlineCallbacks def get_app_worker(self, config=None, start=True): # Note: We assume that this is called exactly once per test. config = self.vumi_helper.mk_config(config or {}) config.setdefault('worker_name', self._worker_name()) config.setdefault('transport_name', self.msg_helper.transport_name) worker = yield self.get_worker(self._worker_class, config, start) # Set up our other bits of helper. self.vumi_helper.set_vumi_api(worker.vumi_api) self.msg_helper.mdb = worker.vumi_api.mdb returnValue(worker) @inlineCallbacks def start_conversation(self, conversation): assert self._get_pending_commands() == [], ( "Found pending commands while starting conversation, aborting.") yield conversation.start() yield self.dispatch_commands_to_app() @inlineCallbacks def stop_conversation(self, conversation): assert self._get_pending_commands() == [], ( "Found pending commands while stopping conversation, aborting.") yield conversation.stop_conversation() yield self.dispatch_commands_to_app() def _get_pending_commands(self): return self.worker_helper.get_dispatched('vumi', 'api', VumiApiCommand) @inlineCallbacks def dispatch_commands_to_app(self): pending_commands = self._get_pending_commands() self.worker_helper._clear_dispatched('vumi', 'api') for command in pending_commands: yield self.worker_helper.dispatch_raw( "%s.control" % (self._worker_name(), ), command) @inlineCallbacks def dispatch_command(self, command, *args, **kw): cmd = VumiApiCommand.command(self._worker_name(), command, *args, **kw) yield self.worker_helper.dispatch_raw('vumi.api', cmd) yield self.dispatch_commands_to_app() def get_published_metrics(self, worker): metrics = [] for metric_msg in self.worker_helper.get_dispatched_metrics(): for name, _aggs, data in metric_msg: for _time, value in data: metrics.append((name, value)) return metrics def get_dispatched_app_events(self): return self.worker_helper.get_dispatched('vumi', 'event', VumiApiEvent)