Hello community, here is the log from the commit of package python-logzero for openSUSE:Factory checked in at 2018-03-11 15:25:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-logzero (Old) and /work/SRC/openSUSE:Factory/.python-logzero.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-logzero" Sun Mar 11 15:25:35 2018 rev:4 rq:585153 version:1.4.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-logzero/python-logzero.changes 2018-01-01 22:31:01.252324823 +0100 +++ /work/SRC/openSUSE:Factory/.python-logzero.new/python-logzero.changes 2018-03-11 15:25:37.942395016 +0100 @@ -1,0 +2,6 @@ +Fri Mar 2 19:24:24 UTC 2018 - sebix+novell....@sebix.at + +- update to version 1.4.0: + * Allow Disabling stderr Output (PR 83) + +------------------------------------------------------------------- Old: ---- logzero-1.3.1.tar.gz New: ---- logzero-1.4.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-logzero.spec ++++++ --- /var/tmp/diff_new_pack.0PUmkT/_old 2018-03-11 15:25:38.654369475 +0100 +++ /var/tmp/diff_new_pack.0PUmkT/_new 2018-03-11 15:25:38.654369475 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-logzero # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %bcond_without test Name: python-logzero -Version: 1.3.1 +Version: 1.4.0 Release: 0 Summary: A logging module for Python License: MIT ++++++ logzero-1.3.1.tar.gz -> logzero-1.4.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/logzero-1.3.1/HISTORY.rst new/logzero-1.4.0/HISTORY.rst --- old/logzero-1.3.1/HISTORY.rst 2017-09-14 11:38:23.000000000 +0200 +++ new/logzero-1.4.0/HISTORY.rst 2018-03-02 18:02:56.000000000 +0100 @@ -2,6 +2,11 @@ History ======= +1.3.1 (2018-03-02) +------------------ +* Allow Disabling stderr Output (`PR 83 <https://github.com/metachris/logzero/pull/83>`_) + + 1.3.0 (2017-07-19) ------------------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/logzero-1.3.1/PKG-INFO new/logzero-1.4.0/PKG-INFO --- old/logzero-1.3.1/PKG-INFO 2017-09-14 11:38:45.000000000 +0200 +++ new/logzero-1.4.0/PKG-INFO 2018-03-02 18:06:06.000000000 +0100 @@ -1,11 +1,12 @@ Metadata-Version: 1.1 Name: logzero -Version: 1.3.1 +Version: 1.4.0 Summary: Robust and effective logging for Python 2 and 3 Home-page: https://github.com/metachris/logzero Author: Chris Hager Author-email: ch...@linuxuser.at License: MIT license +Description-Content-Type: UNKNOWN Description: ======= logzero ======= @@ -183,6 +184,11 @@ History ======= + 1.3.1 (2018-03-02) + ------------------ + * Allow Disabling stderr Output (`PR 83 <https://github.com/metachris/logzero/pull/83>`_) + + 1.3.0 (2017-07-19) ------------------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/logzero-1.3.1/docs/index.rst new/logzero-1.4.0/docs/index.rst --- old/logzero-1.3.1/docs/index.rst 2017-09-14 11:38:23.000000000 +0200 +++ new/logzero-1.4.0/docs/index.rst 2018-03-02 18:02:56.000000000 +0100 @@ -76,7 +76,7 @@ # These log messages are sent to the console logger.debug("hello") logger.info("info") - logger.warn("warn") + logger.warning("warning") logger.error("error") # This is how you'd log an exception @@ -156,6 +156,9 @@ # Set a logfile (all future log messages are also saved there) logzero.logfile("/tmp/logfile.log") + # Set a logfile (all future log messages are also saved there), but disable the default stderr logging + logzero.logfile("/tmp/logfile.log", disableStderrLogger=True) + # You can also set a different loglevel for the file handler logzero.logfile("/tmp/logfile.log", loglevel=logging.ERROR) @@ -182,11 +185,15 @@ from logzero import setup_logger logger1 = setup_logger(name="mylogger1", logfile="/tmp/test-logger1.log", level=logging.INFO) logger2 = setup_logger(name="mylogger2", logfile="/tmp/test-logger2.log", level=logging.INFO) + logger3 = setup_logger(name="mylogger3", logfile="/tmp/test-logger3.log", level=logging.INFO, disableStderrLogger=True) # By default, logging logger1.info("info for logger 1") logger2.info("info for logger 2") + # log to a file only, excluding the default stderr logger + logger3.info("info for logger 3") + Adding custom handlers (eg. SysLogHandler) ------------------------------------------ @@ -231,7 +238,7 @@ logger.debug("hello") logger.info("info") - logger.warn("warn") + logger.warning("warning") logger.error("error") You can reconfigure the default logger globally with `logzero.setup_default_logger(..) <#i-logzero-setup-default-logger>`_. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/logzero-1.3.1/logzero/__init__.py new/logzero-1.4.0/logzero/__init__.py --- old/logzero-1.3.1/logzero/__init__.py 2017-09-14 11:38:23.000000000 +0200 +++ new/logzero-1.4.0/logzero/__init__.py 2018-03-02 18:02:56.000000000 +0100 @@ -34,6 +34,7 @@ See the documentation for more information: https://logzero.readthedocs.io """ +import functools import os import sys import logging @@ -47,7 +48,7 @@ __author__ = """Chris Hager""" __email__ = 'ch...@linuxuser.at' -__version__ = '1.3.1' +__version__ = '1.4.0' # Python 2+3 compatibility settings for logger bytes_type = bytes @@ -83,7 +84,7 @@ colorama_init() -def setup_logger(name=None, logfile=None, level=logging.DEBUG, formatter=None, maxBytes=0, backupCount=0, fileLoglevel=None): +def setup_logger(name=None, logfile=None, level=logging.DEBUG, formatter=None, maxBytes=0, backupCount=0, fileLoglevel=None, disableStderrLogger=False): """ Configures and returns a fully configured logger instance, no hassles. If a logger with the specified name already exists, it returns the existing instance, @@ -107,6 +108,7 @@ :arg int maxBytes: Size of the logfile when rollover should occur. Defaults to 0, rollover never occurs. :arg int backupCount: Number of backups to keep. Defaults to 0, rollover never occurs. :arg int fileLoglevel: Minimum `logging-level <https://docs.python.org/2/library/logging.html#logging-levels>`_ for the file logger (is not set, it will use the loglevel from the ``level`` argument) + :arg bool disableStderrLogger: Should the default stderr logger be disabled. Defaults to False. :return: A fully configured Python logging `Logger object <https://docs.python.org/2/library/logging.html#logger-objects>`_ you can use with ``.debug("msg")``, etc. """ _logger = logging.getLogger(name or __name__) @@ -114,27 +116,31 @@ _logger.setLevel(level) # Reconfigure existing handlers - has_stream_handler = False + stderr_stream_handler = None for handler in list(_logger.handlers): - if isinstance(handler, logging.StreamHandler): - has_stream_handler = True - - if isinstance(handler, logging.FileHandler) and hasattr(handler, LOGZERO_INTERNAL_LOGGER_ATTR): - # Internal FileHandler needs to be removed and re-setup to be able - # to set a new logfile. - _logger.removeHandler(handler) - continue + if hasattr(handler, LOGZERO_INTERNAL_LOGGER_ATTR): + if isinstance(handler, logging.FileHandler): + # Internal FileHandler needs to be removed and re-setup to be able + # to set a new logfile. + _logger.removeHandler(handler) + continue + elif isinstance(handler, logging.StreamHandler): + stderr_stream_handler = handler # reconfigure handler handler.setLevel(level) handler.setFormatter(formatter or LogFormatter()) - if not has_stream_handler: - stream_handler = logging.StreamHandler() - setattr(stream_handler, LOGZERO_INTERNAL_LOGGER_ATTR, True) - stream_handler.setLevel(level) - stream_handler.setFormatter(formatter or LogFormatter()) - _logger.addHandler(stream_handler) + # remove the stderr handler (stream_handler) if disabled + if disableStderrLogger: + if stderr_stream_handler is not None: + _logger.removeHandler(stderr_stream_handler) + elif stderr_stream_handler is None: + stderr_stream_handler = logging.StreamHandler() + setattr(stderr_stream_handler, LOGZERO_INTERNAL_LOGGER_ATTR, True) + stderr_stream_handler.setLevel(level) + stderr_stream_handler.setFormatter(formatter or LogFormatter()) + _logger.addHandler(stderr_stream_handler) if logfile: rotating_filehandler = RotatingFileHandler(filename=logfile, maxBytes=maxBytes, backupCount=backupCount) @@ -285,7 +291,7 @@ return repr(s) -def setup_default_logger(logfile=None, level=logging.DEBUG, formatter=None, maxBytes=0, backupCount=0): +def setup_default_logger(logfile=None, level=logging.DEBUG, formatter=None, maxBytes=0, backupCount=0, disableStderrLogger=False): """ Deprecated. Use `logzero.loglevel(..)`, `logzero.logfile(..)`, etc. @@ -304,9 +310,10 @@ :arg Formatter formatter: `Python logging Formatter object <https://docs.python.org/2/library/logging.html#formatter-objects>`_ (by default uses the internal LogFormatter). :arg int maxBytes: Size of the logfile when rollover should occur. Defaults to 0, rollover never occurs. :arg int backupCount: Number of backups to keep. Defaults to 0, rollover never occurs. + :arg bool disableStderrLogger: Should the default stderr logger be disabled. Defaults to False. """ global logger - logger = setup_logger(name=LOGZERO_DEFAULT_LOGGER, logfile=logfile, level=level, formatter=formatter) + logger = setup_logger(name=LOGZERO_DEFAULT_LOGGER, logfile=logfile, level=level, formatter=formatter, disableStderrLogger=disableStderrLogger) return logger @@ -375,7 +382,7 @@ _formatter = formatter -def logfile(filename, formatter=None, mode='a', maxBytes=0, backupCount=0, encoding=None, loglevel=None): +def logfile(filename, formatter=None, mode='a', maxBytes=0, backupCount=0, encoding=None, loglevel=None, disableStderrLogger=False): """ Setup logging to file (using a `RotatingFileHandler <https://docs.python.org/2/library/logging.handlers.html#rotatingfilehandler>`_ internally). @@ -399,11 +406,15 @@ :arg int backupCount: Number of backups to keep. Defaults to 0, rollover never occurs. :arg string encoding: Used to open the file with that encoding. :arg int loglevel: Set a custom loglevel for the file logger, else uses the current global loglevel. + :arg bool disableStderrLogger: Should the default stderr logger be disabled. Defaults to False. """ # Step 1: If an internal RotatingFileHandler already exists, remove it for handler in list(logger.handlers): - if isinstance(handler, RotatingFileHandler) and hasattr(handler, LOGZERO_INTERNAL_LOGGER_ATTR): - logger.removeHandler(handler) + if hasattr(handler, LOGZERO_INTERNAL_LOGGER_ATTR): + if isinstance(handler, RotatingFileHandler): + logger.removeHandler(handler) + elif isinstance(handler, logging.StreamHandler) and disableStderrLogger: + logger.removeHandler(handler) # Step 2: If wanted, add the RotatingFileHandler now if filename: @@ -421,6 +432,7 @@ def log_function_call(func): + @functools.wraps(func) def wrap(*args, **kwargs): args_str = ", ".join([str(arg) for arg in args]) kwargs_str = ", ".join(["%s=%s" % (key, kwargs[key]) for key in kwargs]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/logzero-1.3.1/logzero.egg-info/PKG-INFO new/logzero-1.4.0/logzero.egg-info/PKG-INFO --- old/logzero-1.3.1/logzero.egg-info/PKG-INFO 2017-09-14 11:38:45.000000000 +0200 +++ new/logzero-1.4.0/logzero.egg-info/PKG-INFO 2018-03-02 18:06:06.000000000 +0100 @@ -1,11 +1,12 @@ Metadata-Version: 1.1 Name: logzero -Version: 1.3.1 +Version: 1.4.0 Summary: Robust and effective logging for Python 2 and 3 Home-page: https://github.com/metachris/logzero Author: Chris Hager Author-email: ch...@linuxuser.at License: MIT license +Description-Content-Type: UNKNOWN Description: ======= logzero ======= @@ -183,6 +184,11 @@ History ======= + 1.3.1 (2018-03-02) + ------------------ + * Allow Disabling stderr Output (`PR 83 <https://github.com/metachris/logzero/pull/83>`_) + + 1.3.0 (2017-07-19) ------------------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/logzero-1.3.1/setup.cfg new/logzero-1.4.0/setup.cfg --- old/logzero-1.3.1/setup.cfg 2017-09-14 11:38:45.000000000 +0200 +++ new/logzero-1.4.0/setup.cfg 2018-03-02 18:06:06.000000000 +0100 @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.3.1 +current_version = 1.4.0 commit = True tag = True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/logzero-1.3.1/setup.py new/logzero-1.4.0/setup.py --- old/logzero-1.3.1/setup.py 2017-09-14 11:38:23.000000000 +0200 +++ new/logzero-1.4.0/setup.py 2018-03-02 18:02:56.000000000 +0100 @@ -13,7 +13,7 @@ setup( name='logzero', - version='1.3.1', + version='1.4.0', description="Robust and effective logging for Python 2 and 3", long_description=readme + '\n\n' + history, author="Chris Hager", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/logzero-1.3.1/tests/test_logzero.py new/logzero-1.4.0/tests/test_logzero.py --- old/logzero-1.3.1/tests/test_logzero.py 2017-09-14 11:38:23.000000000 +0200 +++ new/logzero-1.4.0/tests/test_logzero.py 2018-03-02 18:02:56.000000000 +0100 @@ -11,6 +11,7 @@ import logging import logzero +import pytest def test_write_to_logfile_and_stderr(capsys): @@ -141,41 +142,46 @@ temp.close() -def test_default_logger(): +def test_default_logger(disableStdErrorLogger=False): """ Default logger should work and be able to be reconfigured. """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: - logzero.setup_default_logger(logfile=temp.name) + logzero.setup_default_logger(logfile=temp.name, disableStderrLogger=disableStdErrorLogger) logzero.logger.debug("debug1") # will be logged # Reconfigure with loglevel INFO - logzero.setup_default_logger(logfile=temp.name, level=logging.INFO) + logzero.setup_default_logger(logfile=temp.name, level=logging.INFO, disableStderrLogger=disableStdErrorLogger) logzero.logger.debug("debug2") # will not be logged logzero.logger.info("info1") # will be logged # Reconfigure with a different formatter log_format = '%(color)s[xxx]%(end_color)s %(message)s' formatter = logzero.LogFormatter(fmt=log_format) - logzero.setup_default_logger(logfile=temp.name, level=logging.INFO, formatter=formatter) + logzero.setup_default_logger(logfile=temp.name, level=logging.INFO, formatter=formatter, disableStderrLogger=disableStdErrorLogger) logzero.logger.info("info2") # will be logged with new formatter logzero.logger.debug("debug3") # will not be logged with open(temp.name) as f: content = f.read() - assert "] debug1" in content - assert "] debug2" not in content - assert "] info1" in content - assert "xxx] info2" in content - assert "] debug3" not in content + test_default_logger_output(content) finally: temp.close() +@pytest.mark.skip(reason="not a standalone test") +def test_default_logger_output(content): + assert "] debug1" in content + assert "] debug2" not in content + assert "] info1" in content + assert "xxx] info2" in content + assert "] debug3" not in content + + def test_setup_logger_reconfiguration(): """ Should be able to reconfigure without loosing custom handlers @@ -252,3 +258,32 @@ finally: temp.close() + + +def test_log_function_call(): + @logzero.log_function_call + def example(): + """example doc""" + pass + + assert example.__name__ == "example" + assert example.__doc__ == "example doc" + + +def test_default_logger_logfile_only(capsys): + """ + Run the ``test_default_logger`` with ``disableStdErrorLogger`` set to ``True`` and + confirm that no data is written to stderr + """ + test_default_logger(disableStdErrorLogger=True) + out, err = capsys.readouterr() + assert err == '' + + +def test_default_logger_stderr_output(capsys): + """ + Run the ``test_default_logger`` and confirm that the proper data is written to stderr + """ + test_default_logger() + out, err = capsys.readouterr() + test_default_logger_output(err)