[Python-checkins] r42074 - python/trunk/Lib/logging/config.py

Neal Norwitz nnorwitz at gmail.com
Tue Jan 17 06:12:13 CET 2006


What's the point of checking if not len(somelist)?  Why not just do if
not somelist (ie, drop the len())?  There were a bunch of cases of
this I noticed in the code below.  Search for here.

n
--

On 1/16/06, vinay.sajip <python-checkins at python.org> wrote:
> Author: vinay.sajip
> Date: Mon Jan 16 22:28:37 2006
> New Revision: 42074
>
> Modified:
>    python/trunk/Lib/logging/config.py
> Log:
> Refactoring for fileConfig. Contributed by Shane Hathaway.
>
> Modified: python/trunk/Lib/logging/config.py
> ==============================================================================
> --- python/trunk/Lib/logging/config.py  (original)
> +++ python/trunk/Lib/logging/config.py  Mon Jan 16 22:28:37 2006
> @@ -72,135 +72,147 @@
>          cp.readfp(fname)
>      else:
>          cp.read(fname)
> -    #first, do the formatters...
> -    flist = cp.get("formatters", "keys")
> -    if len(flist):
> -        flist = string.split(flist, ",")
> -        formatters = {}
> -        for form in flist:
> -            sectname = "formatter_%s" % form
> -            opts = cp.options(sectname)
> -            if "format" in opts:
> -                fs = cp.get(sectname, "format", 1)
> -            else:
> -                fs = None
> -            if "datefmt" in opts:
> -                dfs = cp.get(sectname, "datefmt", 1)
> -            else:
> -                dfs = None
> -            f = logging.Formatter(fs, dfs)
> -            formatters[form] = f
> -    #next, do the handlers...
> -    #critical section...
> +
> +    formatters = _create_formatters(cp)
> +
> +    # critical section
>      logging._acquireLock()
>      try:
> -        try:
> -            #first, lose the existing handlers...
> -            logging._handlers.clear()
> -            #now set up the new ones...
> -            hlist = cp.get("handlers", "keys")
> -            if len(hlist):
> -                hlist = string.split(hlist, ",")
> -                handlers = {}
> -                fixups = [] #for inter-handler references
> -                for hand in hlist:
> -                    try:
> -                        sectname = "handler_%s" % hand
> -                        klass = cp.get(sectname, "class")
> -                        opts = cp.options(sectname)
> -                        if "formatter" in opts:
> -                            fmt = cp.get(sectname, "formatter")
> -                        else:
> -                            fmt = ""
> -                        klass = eval(klass, vars(logging))
> -                        args = cp.get(sectname, "args")
> -                        args = eval(args, vars(logging))
> -                        h = apply(klass, args)
> -                        if "level" in opts:
> -                            level = cp.get(sectname, "level")
> -                            h.setLevel(logging._levelNames[level])
> -                        if len(fmt):
> -                            h.setFormatter(formatters[fmt])
> -                        #temporary hack for FileHandler and MemoryHandler.
> -                        if klass == logging.handlers.MemoryHandler:
> -                            if "target" in opts:
> -                                target = cp.get(sectname,"target")
> -                            else:
> -                                target = ""
> -                            if len(target): #the target handler may not be loaded yet, so keep for later...
> -                                fixups.append((h, target))
> -                        handlers[hand] = h
> -                    except:     #if an error occurs when instantiating a handler, too bad
> -                        pass    #this could happen e.g. because of lack of privileges
> -                #now all handlers are loaded, fixup inter-handler references...
> -                for fixup in fixups:
> -                    h = fixup[0]
> -                    t = fixup[1]
> -                    h.setTarget(handlers[t])
> -            #at last, the loggers...first the root...
> -            llist = cp.get("loggers", "keys")
> -            llist = string.split(llist, ",")
> -            llist.remove("root")
> -            sectname = "logger_root"
> -            root = logging.root
> -            log = root
> -            opts = cp.options(sectname)
> -            if "level" in opts:
> -                level = cp.get(sectname, "level")
> -                log.setLevel(logging._levelNames[level])
> -            for h in root.handlers[:]:
> -                root.removeHandler(h)
> -            hlist = cp.get(sectname, "handlers")
> -            if len(hlist):
> -                hlist = string.split(hlist, ",")
> -                for hand in hlist:
> -                    log.addHandler(handlers[hand])
> -            #and now the others...
> -            #we don't want to lose the existing loggers,
> -            #since other threads may have pointers to them.
> -            #existing is set to contain all existing loggers,
> -            #and as we go through the new configuration we
> -            #remove any which are configured. At the end,
> -            #what's left in existing is the set of loggers
> -            #which were in the previous configuration but
> -            #which are not in the new configuration.
> -            existing = root.manager.loggerDict.keys()
> -            #now set up the new ones...
> -            for log in llist:
> -                sectname = "logger_%s" % log
> -                qn = cp.get(sectname, "qualname")
> -                opts = cp.options(sectname)
> -                if "propagate" in opts:
> -                    propagate = cp.getint(sectname, "propagate")
> -                else:
> -                    propagate = 1
> -                logger = logging.getLogger(qn)
> -                if qn in existing:
> -                    existing.remove(qn)
> -                if "level" in opts:
> -                    level = cp.get(sectname, "level")
> -                    logger.setLevel(logging._levelNames[level])
> -                for h in logger.handlers[:]:
> -                    logger.removeHandler(h)
> -                logger.propagate = propagate
> -                logger.disabled = 0
> -                hlist = cp.get(sectname, "handlers")
> -                if len(hlist):
> -                    hlist = string.split(hlist, ",")
> -                    for hand in hlist:
> -                        logger.addHandler(handlers[hand])
> -            #Disable any old loggers. There's no point deleting
> -            #them as other threads may continue to hold references
> -            #and by disabling them, you stop them doing any logging.
> -            for log in existing:
> -                root.manager.loggerDict[log].disabled = 1
> -        except:
> -            ei = sys.exc_info()
> -            traceback.print_exception(ei[0], ei[1], ei[2], None, sys.stderr)
> -            del ei
> +        logging._handlers.clear()
> +        # Handlers add themselves to logging._handlers
> +        handlers = _install_handlers(cp, formatters)
> +        _install_loggers(cp, handlers)
>      finally:
>          logging._releaseLock()
>
> +
> +def _create_formatters(cp):
> +    """Create and return formatters"""
> +    flist = cp.get("formatters", "keys")
> +    if not len(flist):

here

> +        return {}
> +    flist = string.split(flist, ",")
> +    formatters = {}
> +    for form in flist:
> +        sectname = "formatter_%s" % form
> +        opts = cp.options(sectname)
> +        if "format" in opts:
> +            fs = cp.get(sectname, "format", 1)
> +        else:
> +            fs = None
> +        if "datefmt" in opts:
> +            dfs = cp.get(sectname, "datefmt", 1)
> +        else:
> +            dfs = None
> +        f = logging.Formatter(fs, dfs)
> +        formatters[form] = f
> +    return formatters
> +
> +
> +def _install_handlers(cp, formatters):
> +    """Install and return handlers"""
> +    hlist = cp.get("handlers", "keys")
> +    if not len(hlist):

here

> +        return {}
> +    hlist = string.split(hlist, ",")
> +    handlers = {}
> +    fixups = [] #for inter-handler references
> +    for hand in hlist:
> +        sectname = "handler_%s" % hand
> +        klass = cp.get(sectname, "class")
> +        opts = cp.options(sectname)
> +        if "formatter" in opts:
> +            fmt = cp.get(sectname, "formatter")
> +        else:
> +            fmt = ""
> +        klass = eval(klass, vars(logging))
> +        args = cp.get(sectname, "args")
> +        args = eval(args, vars(logging))
> +        h = apply(klass, args)
> +        if "level" in opts:
> +            level = cp.get(sectname, "level")
> +            h.setLevel(logging._levelNames[level])
> +        if len(fmt):

here

> +            h.setFormatter(formatters[fmt])
> +        #temporary hack for FileHandler and MemoryHandler.
> +        if klass == logging.handlers.MemoryHandler:
> +            if "target" in opts:
> +                target = cp.get(sectname,"target")
> +            else:
> +                target = ""
> +            if len(target): #the target handler may not be loaded yet, so keep for later...

here

> +                fixups.append((h, target))
> +        handlers[hand] = h
> +    #now all handlers are loaded, fixup inter-handler references...
> +    for h, t in fixups:
> +        h.setTarget(handlers[t])
> +    return handlers
> +
> +
> +def _install_loggers(cp, handlers):
> +    """Create and install loggers"""
> +
> +    # configure the root first
> +    llist = cp.get("loggers", "keys")
> +    llist = string.split(llist, ",")
> +    llist.remove("root")
> +    sectname = "logger_root"
> +    root = logging.root
> +    log = root
> +    opts = cp.options(sectname)
> +    if "level" in opts:
> +        level = cp.get(sectname, "level")
> +        log.setLevel(logging._levelNames[level])
> +    for h in root.handlers[:]:
> +        root.removeHandler(h)
> +    hlist = cp.get(sectname, "handlers")
> +    if len(hlist):

here

> +        hlist = string.split(hlist, ",")
> +        for hand in hlist:
> +            log.addHandler(handlers[hand])
> +
> +    #and now the others...
> +    #we don't want to lose the existing loggers,
> +    #since other threads may have pointers to them.
> +    #existing is set to contain all existing loggers,
> +    #and as we go through the new configuration we
> +    #remove any which are configured. At the end,
> +    #what's left in existing is the set of loggers
> +    #which were in the previous configuration but
> +    #which are not in the new configuration.
> +    existing = root.manager.loggerDict.keys()
> +    #now set up the new ones...
> +    for log in llist:
> +        sectname = "logger_%s" % log
> +        qn = cp.get(sectname, "qualname")
> +        opts = cp.options(sectname)
> +        if "propagate" in opts:
> +            propagate = cp.getint(sectname, "propagate")
> +        else:
> +            propagate = 1
> +        logger = logging.getLogger(qn)
> +        if qn in existing:
> +            existing.remove(qn)
> +        if "level" in opts:
> +            level = cp.get(sectname, "level")
> +            logger.setLevel(logging._levelNames[level])
> +        for h in logger.handlers[:]:
> +            logger.removeHandler(h)
> +        logger.propagate = propagate
> +        logger.disabled = 0
> +        hlist = cp.get(sectname, "handlers")
> +        if len(hlist):

here

> +            hlist = string.split(hlist, ",")
> +            for hand in hlist:
> +                logger.addHandler(handlers[hand])
> +
> +    #Disable any old loggers. There's no point deleting
> +    #them as other threads may continue to hold references
> +    #and by disabling them, you stop them doing any logging.
> +    for log in existing:
> +        root.manager.loggerDict[log].disabled = 1
> +
> +
>  def listen(port=DEFAULT_LOGGING_CONFIG_PORT):
>      """
>      Start up a socket server on the specified port, and listen for new
> @@ -247,7 +259,12 @@
>                      f = open(file, "w")
>                      f.write(chunk)
>                      f.close()
> -                    fileConfig(file)
> +                    try:
> +                        fileConfig(file)
> +                    except (KeyboardInterrupt, SystemExit):
> +                        raise
> +                    except:
> +                        traceback.print_exc()
>                      os.remove(file)
>              except socket.error, e:
>                  if type(e.args) != types.TupleType:
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins
>


More information about the Python-checkins mailing list