def __init__(self, config, cli_args): assert isinstance(config, ConfigProvider) assert isinstance(cli_args, QueueMagicCliArguments) self._config = config self._args = cli_args self._app = ServiceResolver(config=config.section('services')) set_logger(self._app.get_service(Logs))
class QueueMagicCli(object): def __init__(self, config, cli_args): assert isinstance(config, ConfigProvider) assert isinstance(cli_args, QueueMagicCliArguments) self._config = config self._args = cli_args self._app = ServiceResolver(config=config.section('services')) set_logger(self._app.get_service(Logs)) def _get_email(self): if self._args.should_use_stdin: log_debug('read stdin smtp message') return EmailFacade(fd=sys.stdin) else: log_debug('read "{0}" smtp message', self._args.input) return EmailFacade(file_path=self._args.input) @staticmethod def _print_email(email): log_debug('write output smtp message to stdout') email.write_to(sys.stdout) def _write_email(self, email): output = self._args.output log_debug('write output smtp message to {0}'.format(output)) with open(name=output, mode='w') as fd: email.write_to(fd) def _output_exec(self, email): log_debug('attempt to start subprocess "{0}"', self._args.output_exec) fd = StringIO() email.write_to(fd) fd.seek(0) p = Popen(args=shlex.split(self._args.output_exec), stdout=PIPE, stdin=PIPE) p.communicate(input=fd.read()) p.wait() if p.returncode != 0: log_warning('subprocess "{0}" exits with code "{1}"', None, self._args.output_exec, p.returncode) else: log_debug('subprocess terminated with no errors') return p.returncode def _get_pipeline(self, email): log_debug('building pipeline "{0}"', self._args.pipeline) svc = self._app.get_service(PipelineService) pipeline = svc.build_pipeline(name=self._args.pipeline, message=email, data=self._args.data) log_debug('pipeline building complete') return pipeline def _feed_statistics(self, pipeline): log_debug('feeding statistics') svc = self._app.get_service(Statistics) assert isinstance(svc, Statistics) svc.increment_message_number(sender=pipeline.bus.sender, recipient=pipeline.bus.recipient) svc.update_last_message_timestamp(sender=pipeline.bus.sender, recipient=pipeline.bus.recipient) log_debug('feeding statistics complete') def _send(self, email, sender, recipient): svc = self._app.get_service(SendMail) assert isinstance(svc, SendMail) return svc.send(email=email, sender=sender, recipients=[recipient]) def run(self): return_code = posix.EX_OK try: email = self._get_email() except IOError, e: log_error('Unable to fetch email', error=e) sys.exit(posix.EX_IOERR) except Exception, e: log_error('Unable to fetch email', error=e) sys.exit(posix.EX_DATAERR)