Migrate all PAR2Set-derived classes to the package notation
[rarslave2.git] / rarslave.py
index 3f7ee54..16b8c78 100644 (file)
@@ -4,8 +4,7 @@
 VERSION="2.0.0"
 PROGRAM="rarslave2"
 
-import os, sys, optparse
-import RarslaveLogger
+import os, sys, optparse, logging
 import RarslaveDetector
 import RarslaveGlobals
 from RarslaveCommon import *
@@ -13,7 +12,29 @@ from RarslaveCommon import *
 # Global options from the RarslaveGlobals class
 options = RarslaveGlobals.options
 config = RarslaveGlobals.config
-logger = RarslaveGlobals.logger
+
+# A tiny class to hold logging output until we're finished
+class DelayedLogger (object):
+       def __init__ (self, output=sys.stdout.write):
+               self.__messages = []
+               self.__output = output
+
+       def write (self, msg):
+               self.__messages.append (msg)
+
+       def flush (self):
+               pass
+
+       def size (self):
+               """Returns the number of messages queued for printing"""
+               return len (self.__messages)
+
+       def close (self):
+               """Print all messages, clear the queue"""
+               for m in self.__messages:
+                       self.__output (m)
+
+               self.__messages = []
 
 # A tiny class used to find unique PAR2 sets
 class CompareSet (object):
@@ -117,45 +138,28 @@ def find_loglevel (options):
 
        loglevel = options.verbose - options.quiet
 
-       if loglevel < RarslaveLogger.MessageType.Fatal:
-               loglevel = RarslaveLogger.MessageType.Fatal
-
-       if loglevel > RarslaveLogger.MessageType.Debug:
-               loglevel = RarslaveLogger.MessageType.Debug
-
-       return loglevel
+       if loglevel > 1:
+               loglevel = 1
 
-def printMessageTable (loglevel):
+       if loglevel < -3:
+               loglevel = -3
 
-       if logger.hasFatalMessages ():
-               print '\nFatal Messages\n' + '=' * 80
-               logger.printLoglevel (RarslaveLogger.MessageType.Fatal)
+       LEVELS = {      1 : logging.DEBUG,
+                               0 : logging.INFO,
+                               -1: logging.WARNING,
+                               -2: logging.ERROR,
+                               -3: logging.CRITICAL
+       }
 
-       if loglevel == RarslaveLogger.MessageType.Fatal:
-               return
-
-       if logger.hasNormalMessages ():
-               print '\nNormal Messages\n' + '=' * 80
-               logger.printLoglevel (RarslaveLogger.MessageType.Normal)
-
-       if loglevel == RarslaveLogger.MessageType.Normal:
-               return
-
-       if logger.hasVerboseMessages ():
-               print '\nVerbose Messages\n' + '=' * 80
-               logger.printLoglevel (RarslaveLogger.MessageType.Verbose)
-
-       if loglevel == RarslaveLogger.MessageType.Verbose:
-               return
-
-       if logger.hasDebugMessages ():
-               print '\nDebug Messages\n' + '=' * 80
-               logger.printLoglevel (RarslaveLogger.MessageType.Debug)
-
-       return
+       return LEVELS [loglevel]
 
 def main ():
 
+       # Setup the logger
+       logger = DelayedLogger ()
+       logging.basicConfig (stream=logger, level=logging.WARNING, \
+                       format='%(levelname)-8s %(message)s')
+
        # Build the OptionParser
        parser = optparse.OptionParser()
        parser.add_option('-n', '--not-recursive',
@@ -209,8 +213,8 @@ def main ():
        # Run any special actions that are needed on these options
        run_options (options)
 
-       # Find the loglevel using the options given 
-       loglevel = find_loglevel (options)
+       # Find the loglevel using the options given
+       logging.getLogger().setLevel (find_loglevel (options))
 
        # Run recursively
        if options.recursive:
@@ -228,7 +232,9 @@ def main ():
                        ret = detector.runMatchingTypes ()
 
        # Print the results
-       printMessageTable (loglevel)
+       if logger.size () > 0:
+               print '\nLog\n' + '=' * 80
+               logger.close ()
 
        # Done!
        return 0