def test_level(self):
        with LoggerCapture(log,
                           level=logging.INFO) as capturer, LoggerCapture():
            log.debug('Hidden')
            log.info('Printed 1')
            log.warn('Printed 2')

        self.assertEqual(capturer.log.getvalue(), 'Printed 1\nPrinted 2\n')
    def test_basic(self):
        with OutputCapture() as capturer:
            log.info('Hidden')
            log.warn('Printed')
            sys.stdout.write('stdout\n')
            sys.stderr.write('stderr\n')

        self.assertEqual(capturer.webkitcorepy.log.getvalue(), 'Printed\n')
        self.assertEqual(capturer.stdout.getvalue(), 'stdout\n')
        self.assertEqual(capturer.stderr.getvalue(), 'stderr\n')
    def test_multiple_entry(self):
        with OutputCapture() as captured:
            sys.stdout.write('Line 1\n')
            log.warn('Log 1')
            with captured:
                sys.stdout.write('Line 2\n')
                log.warn('Log 2')

        self.assertEqual(captured.webkitcorepy.log.getvalue(),
                         'Log 1\nLog 2\n')
        self.assertEqual(captured.stdout.getvalue(), 'Line 1\nLine 2\n')
Beispiel #4
0
    def __exit__(self, *args, **kwargs):
        if not self.queue:
            TaskPool.Process.working = False
            try:
                if self._teardown_args[0]:
                    self._teardown_args[0](*self._teardown_args[1],
                                           **self._teardown_args[2])
            finally:
                TaskPool.Process.queue = None
                TaskPool.Process.name = None
            return

        from six import reraise
        try:
            inflight = sys.exc_info()

            for worker in self.workers:
                if worker.is_alive():
                    worker.terminate()

            with Timeout(seconds=self.grace_period):
                try:
                    while self._started:
                        self.queue.receive()(self)
                except Exception:
                    if inflight[1]:
                        log.critical(
                            'Some workers failed to gracefully shut down, but in-flight exception taking precedence'
                        )
                        reraise(*inflight)
                    raise self.Exception(
                        'Some workers failed to gracefully shut down')

        finally:
            for worker in self.workers:
                if not worker.is_alive():
                    continue

                if sys.version_info >= (3, 7):
                    worker.kill()
                elif hasattr(signal, 'SIGKILL'):
                    try:
                        os.kill(worker.pid, signal.SIGKILL)
                    except OSError as e:
                        log.warn('Failed to terminate worker ' +
                                 str(worker.pid) + ' with error ' + str(e))
                else:
                    worker.terminate()

            self.queue.close()
            self.queue = None
            self.workers = []
Beispiel #5
0
        def __init__(self,
                     args,
                     bufsize=None,
                     executable=None,
                     stdin=None,
                     stdout=None,
                     stderr=None,
                     preexec_fn=None,
                     close_fds=True,
                     shell=False,
                     cwd=None,
                     env=None,
                     universal_newlines=None,
                     startupinfo=None,
                     creationflags=0,
                     restore_signals=True,
                     start_new_session=False,
                     pass_fds=(),
                     encoding=None,
                     errors=None,
                     text=None):

            super(Popen, self).__init__(args,
                                        bufsize=bufsize,
                                        cwd=cwd,
                                        stdin=stdin,
                                        stdout=stdout,
                                        stderr=stderr)

            if pass_fds and not close_fds:
                log.warn("pass_fds overriding close_fds.")

            for arg in args:
                if not isinstance(arg, (str, bytes, os.PathLike)):
                    raise TypeError(
                        'expected {}, {} or os.PathLike object, not {}',
                        str,
                        bytes,
                        type(arg),
                    )

            self.args = args
            self.encoding = encoding
            self.errors = errors

            if (text is not None and universal_newlines is not None
                    and bool(universal_newlines) != bool(text)):
                raise subprocess.SubprocessError(
                    'Cannot disambiguate when both text and universal_newlines are supplied but different. Pass one or the other.'
                )

            self.text_mode = encoding or errors or text or universal_newlines

            if self.stdin is not None and self.text_mode:
                self.stdin = io.TextIOWrapper(self.stdin,
                                              write_through=True,
                                              line_buffering=(bufsize == 1),
                                              encoding=encoding,
                                              errors=errors)
            if self.stdout is not None and self.text_mode:
                self.stdout = io.TextIOWrapper(self.stdout,
                                               encoding=encoding,
                                               errors=errors)
                self._stdout_type = str
            if self.stderr is not None and self.text_mode:
                self.stderr = io.TextIOWrapper(self.stderr,
                                               encoding=encoding,
                                               errors=errors)
                self._stderr_type = str
    def test_basic(self):
        with LoggerCapture(log) as capturer, LoggerCapture():
            log.info('Hidden')
            log.warn('Printed')

        self.assertEqual(capturer.log.getvalue(), 'Printed\n')