Пример #1
0
    def test_delegating_other_process(self):
        """Test delegating a call from another process
        """
        called = [0]
        called_from = []

        def target():
            """Target function"""
            called[0] += 1
            called_from.append(os.getpid())

        delegated = DelegateCall(target)

        def process_target():
            """Sub-process
            """
            delegated()

        process = multiprocessing.Process(target=process_target)
        self.assertEqual(called[0], 0)
        process.start()
        process.join()
        delegated.join()
        self.assertEqual(called[0], 1)
        self.assertEqual(called_from[0], os.getpid())
Пример #2
0
    def __init__(self,
                 filename,
                 level=logging.DEBUG,
                 no_backups=0):
        """Initializer
        """
        # Init base class
        super(MPRotLogHandler, self).__init__(level=level)

        # Check if we need to roll_over later
        roll_over_file = os.path.isfile(filename)

        # Prepare the formatter
        file_formatter = ColorFormatter(
            FILE_FORMAT, False)
        # Setup the actual handler for the log files
        self._file_handler = logging.handlers.RotatingFileHandler(
            filename=filename,
            backupCount=no_backups)
        self._file_handler.setLevel(level)
        self.setFormatter(file_formatter)

        if roll_over_file:
            self._file_handler.doRollover()

        # Emit messages in the main process
        self._delegate_emit = DelegateCall(self._file_handler.emit)
Пример #3
0
    def test_delegating_same_process(self):
        """Test delegating a call from the same process
        """
        called = [0]

        def target():
            """Target function"""
            called[0] += 1

        delegated = DelegateCall(target)
        self.assertEqual(called[0], 0)
        delegated()
        delegated.join()
        self.assertEqual(called[0], 1)
Пример #4
0
    def __init__(self,
                 console_level=logging.INFO,
                 filename=None,
                 file_level=logging.DEBUG,
                 no_backups=5):
        """Initializer

        Creates a logger that logs messages at or above the console_level
        (by default logging.INFO) to stderr. If a filename is given,
        messages at or above the file level (by default logging.DEBUG)
        will be logged to the file with the specified name. If no_backups
        is larger than 0, the file will be rotated at every call of init.
        """
        # Container and aggregator for the timings
        self.timings = OrderedDict()
        self._delegate_process_timings = DelegateCall(self._process_timings)
        super(TimingLogger, self).__init__(console_level,
                                           filename,
                                           file_level,
                                           no_backups)
Пример #5
0
    def test_delegating_exception(self):
        """Test delegating a call from the same process with an exception
        """
        called = [0]

        _buf_out = StringIO()
        buf_err = StringIO()
        with stdout_err_redirector(_buf_out, buf_err):

            def target():
                """Target function"""
                called[0] += 1
                raise RuntimeError()

            delegated = DelegateCall(target)
            self.assertEqual(called[0], 0)
            delegated()
            delegated.join()

        self.assertEqual(called[0], 1)
        self.assertRegexpMatches(buf_err.getvalue(), 'RuntimeError')