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):
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):
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.
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:
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):
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
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',
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',
# 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:
ret = detector.runMatchingTypes ()
# Print the results
- printMessageTable (loglevel)
+ if logger.size () > 0:
+ print '\nLog\n' + '=' * 80
+ logger.close ()
# Done!
return 0