[PAR2SET] Add missing os declarations
[rarslave2.git] / rarslave.py
index 3f7ee54..a27c334 100644 (file)
@@ -4,16 +4,36 @@
 VERSION="2.0.0"
 PROGRAM="rarslave2"
 
-import os, sys, optparse
-import RarslaveLogger
+import os, sys, optparse, logging
+import rsutil
 import RarslaveDetector
-import RarslaveGlobals
-from RarslaveCommon import *
 
-# Global options from the RarslaveGlobals class
-options = RarslaveGlobals.options
-config = RarslaveGlobals.config
-logger = RarslaveGlobals.logger
+# Global options from the rsutil.globals class
+options = rsutil.globals.options
+config = rsutil.globals.config
+
+# 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):
@@ -22,13 +42,13 @@ class CompareSet (object):
                self.dir = dir
                self.p2file = p2file
 
-               self.basename = get_basename (self.p2file)
-               self.name_matches = find_name_matches (self.dir, self.basename)
+               self.basename = rsutil.common.get_basename (self.p2file)
+               self.name_matches = rsutil.common.find_name_matches (self.dir, self.basename)
 
        def __eq__ (self, rhs):
                return (self.dir == rhs.dir) \
                                and (self.basename == rhs.basename) \
-                               and list_eq (self.name_matches, rhs.name_matches)
+                               and rsutil.common.list_eq (self.name_matches, rhs.name_matches)
 
 
 def find_all_par2_files (dir):
@@ -41,7 +61,7 @@ def find_all_par2_files (dir):
        dir = os.path.abspath (dir)
        files = os.listdir (dir)
 
-       return find_par2_files (files)
+       return rsutil.common.find_par2_files (files)
 
 def generate_all_parsets (dir):
        # Generate all parsets in the given directory.
@@ -64,13 +84,13 @@ def check_required_progs():
        shell_not_found = 32512
        needed = []
 
-       if run_command ('par2repair --help > /dev/null 2>&1') == shell_not_found:
+       if rsutil.common.run_command ('par2repair --help > /dev/null 2>&1') == shell_not_found:
                needed.append ('par2repair')
 
-       if run_command ('unrar --help > /dev/null 2>&1') == shell_not_found:
+       if rsutil.common.run_command ('unrar --help > /dev/null 2>&1') == shell_not_found:
                needed.append ('unrar')
 
-       if run_command ('unzip --help > /dev/null 2>&1') == shell_not_found:
+       if rsutil.common.run_command ('unzip --help > /dev/null 2>&1') == shell_not_found:
                needed.append ('unzip')
 
        if needed:
@@ -82,7 +102,7 @@ def check_required_progs():
 def run_options (options):
 
        # Fix directories
-       options.work_dir = full_abspath (options.work_dir)
+       options.work_dir = rsutil.common.full_abspath (options.work_dir)
 
        # Make sure that the directory is valid
        if not os.path.isdir (options.work_dir):
@@ -92,7 +112,7 @@ def run_options (options):
                sys.exit (1)
 
        if options.extract_dir != None:
-               options.extract_dir = full_abspath (options.extract_dir)
+               options.extract_dir = rsutil.common.full_abspath (options.extract_dir)
 
        if options.version:
                print PROGRAM + ' - ' + VERSION
@@ -117,60 +137,40 @@ 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',
-                                               action='store_false', dest='recursive',
-                                               default=config_get_value('options', 'recursive'),
+       parser.add_option('-n', '--not-recursive', action='store_false', dest='recursive',
+                                               default=rsutil.common.config_get_value('options', 'recursive'),
                                                help="Don't run recursively")
 
-       parser.add_option('-d', '--work-dir',
-                                               dest='work_dir', type='string',
-                                               default=config_get_value('directories', 'working_directory'),
+       parser.add_option('-d', '--work-dir', dest='work_dir', type='string',
+                                               default=rsutil.common.config_get_value('directories', 'working_directory'),
                                                help="Start running at DIR", metavar='DIR')
 
-       parser.add_option('-e', '--extract-dir',
-                                               dest='extract_dir', type='string',
-                                               default=config_get_value('directories', 'extract_directory'),
+       parser.add_option('-e', '--extract-dir', dest='extract_dir', type='string',
+                                               default=rsutil.common.config_get_value('directories', 'extract_directory'),
                                                help="Extract to DIR", metavar='DIR')
 
        parser.add_option('-p', '--check-required-programs',
@@ -187,7 +187,7 @@ def main ():
                                                default=False, help="Write out the current config")
 
        parser.add_option('-i', '--interactive', dest='interactive', action='store_true',
-                                               default=config_get_value('options', 'interactive'),
+                                               default=rsutil.common.config_get_value('options', 'interactive'),
                                                help="Confirm before removing files")
 
        parser.add_option('-q', '--quiet', dest='quiet', action='count',
@@ -203,14 +203,14 @@ def main ():
 
        # Parse the given options
        global options
-       (RarslaveGlobals.options, args) = parser.parse_args()
-       options = RarslaveGlobals.options
+       (rsutil.globals.options, args) = parser.parse_args()
+       options = rsutil.globals.options
 
        # 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 +228,9 @@ def main ():
                        ret = detector.runMatchingTypes ()
 
        # Print the results
-       printMessageTable (loglevel)
+       if logger.size () > 0:
+               print '\nLog\n' + '=' * 80
+               logger.close ()
 
        # Done!
        return 0