From ddfbfc734cf2f5a246d6e2a3ff0f6a60013d6adc Mon Sep 17 00:00:00 2001
From: Bob Lantz <rlantz@cs.stanford.edu>
Date: Thu, 4 Mar 2010 16:51:10 -0800
Subject: [PATCH] Added convenience mode to allow info( 'a', 1, 'b' )

Later we may wish to optimize this so that the arg lists are
not created if the logging level is too low.
---
 mininet/log.py | 29 ++++++++++++++++++++++++++---
 1 file changed, 26 insertions(+), 3 deletions(-)

diff --git a/mininet/log.py b/mininet/log.py
index bb615924..a8e53a84 100644
--- a/mininet/log.py
+++ b/mininet/log.py
@@ -108,12 +108,11 @@ def __init__( self ):
     def setLogLevel( self, levelname=None ):
         """Setup loglevel.
            Convenience function to support lowercase names.
-
            levelName: level name from LEVELS"""
         level = LOGLEVELDEFAULT
         if levelname != None:
             if levelname not in LEVELS:
-                raise Exception( 'unknown loglevel seen in set_loglevel' )
+                raise Exception( 'unknown levelname seen in setLogLevel' )
             else:
                 level = LEVELS.get( levelname, level )
 
@@ -122,4 +121,28 @@ def setLogLevel( self, levelname=None ):
 
 
 lg = MininetLogger()
-info, warn, error, debug = lg.info, lg.warn, lg.error, lg.debug
+
+# Make things a bit more convenient by adding aliases
+# (info, warn, error, debug) and allowing info( 'this', 'is', 'OK' )
+# In the future we may wish to make things more efficient by only
+# doing the join (and calling the function) unless the logging level
+# is high enough.
+
+def makeListCompatible( fn ):
+    """Return a new function allowing fn( 'a 1 b' ) to be called as
+       newfn( 'a', 1, 'b' )"""
+
+    def newfn( *args ):
+        "Generated function."
+        if len( args ) == 1:
+            return fn( *args )
+        args = ' '.join( [ str( arg ) for arg in args ] )
+        return fn( args )
+
+    # Fix newfn's name and docstring
+    setattr( newfn, '__name__', fn.__name__ )
+    setattr( newfn, '__doc__', fn.__doc__ )
+    return newfn
+
+info, warn, error, debug = lg.info, lg.warn, lg.error, lg.debug = [
+    makeListCompatible( f ) for f in lg.info, lg.warn, lg.error, lg.debug ]
-- 
GitLab