예제 #1
0
    def test_print_timings_correct(self):
        """Test timing is about right
        """
        buf = io.StringIO()

        # Nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        log.initialize()
        # Still, nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        for _ in range(3):
            with log.timed("Foo", level=logging.FATAL):
                time.sleep(0.01)

        with stdout_redirector(buf):
            log.print_timings()

        # Should print correct stats
        self.assertRegexpMatches(buf.getvalue(), r'\'Foo\'')
        self.assertRegexpMatches(buf.getvalue(), r'3 times')
        self.assertRegexpMatches(buf.getvalue(), r'total = 0.03')
        self.assertRegexpMatches(buf.getvalue(), r'median = 0.01')

        log.close()
        # Correct timings should be logged three times
        self.assertRegexpMatches(self.log_stream.getvalue(), r'Foo')
        self.assertEqual(len(re.findall(r'Foo',
                                        self.log_stream.getvalue())), 3)
        self.assertRegexpMatches(self.log_stream.getvalue(), r'took 0.01')
        self.assertEqual(len(re.findall(r'took 0.01',
                                        self.log_stream.getvalue())), 3)
예제 #2
0
    def test_print_timings_correct(self):
        """Test timing is about right
        """
        buf = io.StringIO()

        # Nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        log.initialize()
        # Still, nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        for _ in range(3):
            with log.timed("Foo", level=logging.FATAL):
                time.sleep(0.01)

        with stdout_redirector(buf):
            log.print_timings()

        # Should print correct stats
        self.assertRegexpMatches(buf.getvalue(), r'\'Foo\'')
        self.assertRegexpMatches(buf.getvalue(), r'3 times')
        self.assertRegexpMatches(buf.getvalue(), r'total = 0.03')
        self.assertRegexpMatches(buf.getvalue(), r'median = 0.01')

        log.close()
        # Correct timings should be logged three times
        self.assertRegexpMatches(self.log_stream.getvalue(), r'Foo')
        self.assertEqual(len(re.findall(r'Foo',
                                        self.log_stream.getvalue())), 3)
        self.assertRegexpMatches(self.log_stream.getvalue(), r'took 0.01')
        self.assertEqual(len(re.findall(r'took 0.01',
                                        self.log_stream.getvalue())), 3)
예제 #3
0
def logging_context():
    """Initialize and close the logger based on the configuration
    """
    # Get options related to logging
    verbosity = conf['pyexperiment.verbosity']
    log_to_file = conf['pyexperiment.log_to_file']
    if (((isinstance(log_to_file, str) and log_to_file == 'True')
         or (isinstance(log_to_file, bool) and log_to_file))):
        log_filename = conf['pyexperiment.log_filename']
    else:
        log_filename = None
    log_file_verbosity = conf['pyexperiment.log_file_verbosity']
    rotate_n_logs = int(conf['pyexperiment.rotate_n_logs'])

    # Setup the logger for the configuration
    log.initialize(console_level=verbosity,
                   filename=log_filename,
                   file_level=log_file_verbosity,
                   no_backups=rotate_n_logs)

    # Give control back, but catch exceptions
    try:
        yield
    except Exception as err:
        # Reraise exception after the logger is closed
        raise err
    finally:
        log.close()
예제 #4
0
def logging_context():
    """Initialize and close the logger based on the configuration
    """
    # Get options related to logging
    verbosity = conf['pyexperiment.verbosity']
    log_to_file = conf['pyexperiment.log_to_file']
    if (((isinstance(log_to_file, str) and log_to_file == 'True')
         or (isinstance(log_to_file, bool) and log_to_file))):
        log_filename = conf['pyexperiment.log_filename']
    else:
        log_filename = None
    log_file_verbosity = conf['pyexperiment.log_file_verbosity']
    rotate_n_logs = int(conf['pyexperiment.rotate_n_logs'])

    # Setup the logger for the configuration
    log.initialize(console_level=verbosity,
                   filename=log_filename,
                   file_level=log_file_verbosity,
                   no_backups=rotate_n_logs)

    # Give control back, but catch exceptions
    try:
        yield
    except Exception as err:
        # Reraise exception after the logger is closed
        raise err
    finally:
        log.close()
예제 #5
0
 def test_setup_without_seaborn(self):
     """Test setup mentions missing seaborn
     """
     with mock.patch.dict('sys.modules', {'seaborn': None}):
         log_stream = StringIO()
         Logger.CONSOLE_STREAM_HANDLER = logging.StreamHandler(log_stream)
         log.reset_instance()
         log.initialize()
         plot.setup_plotting()
         self.assertRegexpMatches(log_stream.getvalue(),
                                  r'Cannot import seaborn')
예제 #6
0
 def test_setup_without_seaborn(self):
     """Test setup mentions missing seaborn
     """
     with mock.patch.dict('sys.modules', {'seaborn': None}):
         log_stream = StringIO()
         Logger.CONSOLE_STREAM_HANDLER = logging.StreamHandler(log_stream)
         log.reset_instance()
         log.initialize()
         plot.setup_plotting()
         self.assertRegexpMatches(log_stream.getvalue(),
                                  r'Cannot import seaborn')
예제 #7
0
    def test_pre_init_logger(self):
        """Test that logging before initializing the logger works
        """
        log.fatal("Test")

        # Nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        log.initialize()

        # Something should be logged here
        self.assertNotEqual(len(self.log_stream.getvalue()), 0)
예제 #8
0
    def test_pre_init_logger(self):
        """Test that logging before initializing the logger works
        """
        log.fatal("Test")

        # Nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        log.initialize()

        # Something should be logged here
        self.assertNotEqual(len(self.log_stream.getvalue()), 0)
예제 #9
0
    def test_file_logger_writes_to_file(self):
        """Test logging to file writes something to the log file
        """
        with tempfile.NamedTemporaryFile() as temp:
            log.initialize(filename=temp.name, no_backups=0)
            log.fatal("Test")
            log.close()

            # Make sure file exists
            self.assertTrue(os.path.isfile(temp.name))

            lines = temp.readlines()
            # There should be exactly one line in the file now
            self.assertEqual(len(lines), 1)
예제 #10
0
    def test_info_console_logging(self):
        """Test the most basic console logging at the fatal level
        """
        log.initialize(console_level=logging.FATAL)
        log.info("Test")
        log.close()
        # Something should be logged
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        log.initialize(console_level=logging.DEBUG)
        log.info("Test")
        log.close()
        # Something should be logged
        self.assertNotEqual(len(self.log_stream.getvalue()), 0)
예제 #11
0
    def test_info_console_logging(self):
        """Test the most basic console logging at the fatal level
        """
        log.initialize(console_level=logging.FATAL)
        log.info("Test")
        log.close()
        # Something should be logged
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        log.initialize(console_level=logging.DEBUG)
        log.info("Test")
        log.close()
        # Something should be logged
        self.assertNotEqual(len(self.log_stream.getvalue()), 0)
예제 #12
0
    def test_basic_console_logging(self):
        """Test the most basic console logging at the debug level
        """
        log.initialize(console_level=logging.DEBUG)
        log.debug("Test string: %s, int: %s, float: %f",
                  'bla',
                  12,
                  3.14)
        log.close()

        self.assertNotEqual(len(self.log_stream.getvalue()), 0)
        self.assertRegexpMatches(
            self.log_stream.getvalue(),
            r'Test string: bla, int: 12, float: 3.14')
예제 #13
0
    def test_timing_logger_logs(self):
        """Test timing code logs a message
        """
        # Nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        log.initialize()
        # Still, nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        with log.timed(level=logging.FATAL):
            _ = 1 + 1
        log.close()
        # Something should be logged
        self.assertNotEqual(len(self.log_stream.getvalue()), 0)
예제 #14
0
    def test_timing_logger_logs(self):
        """Test timing code logs a message
        """
        # Nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        log.initialize()
        # Still, nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        with log.timed(level=logging.FATAL):
            _ = 1 + 1
        log.close()
        # Something should be logged
        self.assertNotEqual(len(self.log_stream.getvalue()), 0)
예제 #15
0
    def test_basic_functionality(self):
        """Test the basic function of the TargetCreator
        """
        log_stream = io.StringIO()
        Logger.CONSOLE_STREAM_HANDLER = logging.StreamHandler(log_stream)
        log.reset_instance()
        log.initialize(console_level=logging.DEBUG)

        queue = multiprocessing.Queue()
        target_fun = TargetCreator(lambda: None, queue, 'bla')
        target_fun()

        # Should have logged running
        self.assertNotEqual(len(log_stream.getvalue()), 0)
        self.assertRegexpMatches(log_stream.getvalue(), r'Running bla')
        self.assertTrue(queue.get())
예제 #16
0
    def test_basic_functionality(self):
        """Test the basic function of the TargetCreator
        """
        log_stream = io.StringIO()
        Logger.CONSOLE_STREAM_HANDLER = logging.StreamHandler(log_stream)
        log.reset_instance()
        log.initialize(console_level=logging.DEBUG)

        queue = multiprocessing.Queue()
        target_fun = TargetCreator(lambda: None, queue, 'bla')
        target_fun()

        # Should have logged running
        self.assertNotEqual(len(log_stream.getvalue()), 0)
        self.assertRegexpMatches(log_stream.getvalue(), r'Running bla')
        self.assertTrue(queue.get())
예제 #17
0
    def test_file_logger_writes_to_file(self):
        """Test logging to file writes something to the log file
        """
        with tempfile.NamedTemporaryFile() as temp:
            log.initialize(filename=temp.name, no_backups=0)
            log.fatal("Test: %f", 3.1415)
            log.close()

            # Make sure file exists
            self.assertTrue(os.path.isfile(temp.name))

            lines = temp.readlines()
            # There should be exactly one line in the file now
            self.assertEqual(len(lines), 1)

            # The content should match the logged message
            self.assertRegexpMatches(str(lines[0]), r'Test: 3.1415')
예제 #18
0
def init_log():
    """Initialize the logger based on the configuration
    """
    # Get options related to logging
    verbosity = conf['pyexperiment.verbosity']
    log_to_file = conf['pyexperiment.log_to_file']
    if (((isinstance(log_to_file, str) and log_to_file == 'True')
         or (isinstance(log_to_file, bool) and log_to_file))):
        log_filename = conf['pyexperiment.log_filename']
    else:
        log_filename = None
    log_file_verbosity = conf['pyexperiment.log_file_verbosity']
    rotate_n_logs = int(conf['pyexperiment.rotate_n_logs'])

    # Setup the logger for the configuration
    log.initialize(console_level=verbosity,
                   filename=log_filename,
                   file_level=log_file_verbosity,
                   no_backups=rotate_n_logs)
예제 #19
0
    def test_file_logger_logs_exception(self):
        """Test logging to file logs exception info
        """
        with tempfile.NamedTemporaryFile() as temp:
            log.initialize(filename=temp.name, no_backups=0)
            try:
                raise RuntimeError()
            except RuntimeError:
                log.exception('Exception...')
            log.close()

            # Make sure file exists
            self.assertTrue(os.path.isfile(temp.name))

            lines = temp.readlines()
            # There should be exactly more than one line in the file now
            self.assertTrue(len(lines) > 1)

            # The content should match the logged message
            self.assertRegexpMatches(str(lines[0]), r'Exception')
예제 #20
0
    def test_print_timings_complains(self):
        """Test timing code complains if there are no timings
        """
        buf = io.StringIO()

        # Nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        log.initialize()
        # Still, nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        with stdout_redirector(buf):
            log.print_timings()

        # Something should be printed
        self.assertNotEqual(len(buf.getvalue()), 0)
        self.assertRegexpMatches(buf.getvalue(), r'No timings stored')

        log.close()

        # Nothing should be logged
        self.assertEqual(len(self.log_stream.getvalue()), 0)
예제 #21
0
    def test_raises_exception(self):
        """Test the TargetCreator with a function that raises an exception
        """
        def target():
            """Test function
            """
            raise RuntimeError("bla")

        log_stream = io.StringIO()
        Logger.CONSOLE_STREAM_HANDLER = logging.StreamHandler(log_stream)
        log.reset_instance()
        log.initialize(console_level=logging.DEBUG)

        queue = multiprocessing.Queue()
        target_fun = TargetCreator(target, queue, 'bla')
        self.assertRaises(RuntimeError, target_fun)

        # Should have logged running
        self.assertNotEqual(len(log_stream.getvalue()), 0)
        self.assertRegexpMatches(log_stream.getvalue(), r'Running bla')
        self.assertRegexpMatches(log_stream.getvalue(),
                                 r'Error in sub-process')
        self.assertRegexpMatches(log_stream.getvalue(), r'RuntimeError: bla')
        self.assertTrue(queue.get())
예제 #22
0
    def test_print_timings_prints(self):
        """Test timing code and printing really prints a message
        """
        buf = io.StringIO()

        # Nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        log.initialize()
        # Still, nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        with log.timed(level=logging.FATAL):
            _ = 1 + 1

        with stdout_redirector(buf):
            log.print_timings()

        # Something should be printed
        self.assertNotEqual(len(buf.getvalue()), 0)

        log.close()
        # Something should be logged
        self.assertNotEqual(len(self.log_stream.getvalue()), 0)
예제 #23
0
    def test_raises_exception(self):
        """Test the TargetCreator with a function that raises an exception
        """
        def target():
            """Test function
            """
            raise RuntimeError("bla")

        log_stream = io.StringIO()
        Logger.CONSOLE_STREAM_HANDLER = logging.StreamHandler(log_stream)
        log.reset_instance()
        log.initialize(console_level=logging.DEBUG)

        queue = multiprocessing.Queue()
        target_fun = TargetCreator(target, queue, 'bla')
        self.assertRaises(RuntimeError, target_fun)

        # Should have logged running
        self.assertNotEqual(len(log_stream.getvalue()), 0)
        self.assertRegexpMatches(log_stream.getvalue(), r'Running bla')
        self.assertRegexpMatches(log_stream.getvalue(),
                                 r'Error in sub-process')
        self.assertRegexpMatches(log_stream.getvalue(), r'RuntimeError: bla')
        self.assertTrue(queue.get())
예제 #24
0
    def test_print_timings_prints(self):
        """Test timing code and printing really prints a message
        """
        buf = io.StringIO()

        # Nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        log.initialize()
        # Still, nothing should be logged yet
        self.assertEqual(len(self.log_stream.getvalue()), 0)

        with log.timed(level=logging.FATAL):
            _ = 1 + 1

        with stdout_redirector(buf):
            log.print_timings()

        # Something should be printed
        self.assertNotEqual(len(buf.getvalue()), 0)

        log.close()
        # Something should be logged
        self.assertNotEqual(len(self.log_stream.getvalue()), 0)