Added main function exit code which is the number of warnings during script execution
authorPlamen Dimitrov <plamen.dimitrov@intra2net.com>
Mon, 9 Jul 2012 10:43:25 +0000 (12:43 +0200)
committerPlamen Dimitrov <plamen.dimitrov@intra2net.com>
Mon, 9 Jul 2012 10:43:25 +0000 (12:43 +0200)
file_iterator.py
restore_mail_inject.py
warnings_handler.py [new file with mode: 0644]

index b597928..f15888c 100644 (file)
@@ -4,7 +4,7 @@ restore-mail-inject.py - Tool to inject mails via IMAP
 Copyright (c) 2012 Intra2net AG
 '''
 
-import sys, os
+import os
 import re
 import logging
 
index c67e6ed..11b9471 100644 (file)
@@ -12,17 +12,19 @@ import logging
 import argparse
 from mail_iterator import MailIterator
 from file_iterator import FileIterator
+from warnings_handler import WarningsHandler
 
 LOG_FILENAME = "restore_mail_inject.log"
 LOG_FILE_LEVEL = logging.DEBUG
 LOG_SHELL_LEVEL = logging.INFO
+LOG_UNCLEAN_EXIT_LEVEL = logging.WARNING
 
 def main():
     """Main function."""
 
     # prepare configuration
     args = configure_args()
-    prepare_logger()
+    warnings_handler = prepare_logger()
     logging.info("The module restore_mail_inject.py started with user %s, folder %s and source %s." %
           (args.user, args.folder, args.srcdir))
 
@@ -61,8 +63,8 @@ def main():
     for acl_mailbox in storage.acl_mailboxes:
         session.add_acls(acl_mailbox, mailbox_list, args.ouser, args.user)
 
-    logging.info("Finished injecting mails. Exiting.")
-    return
+    logging.info("Finished injecting mails. Exiting with code %s." % warnings_handler.detected_problems)
+    return warnings_handler.detected_problems
 
 def configure_args():
     """Configure arguments and return them."""
@@ -102,12 +104,18 @@ def prepare_logger():
                         level=LOG_FILE_LEVEL)
 
     # add a handler for a console output
+    default_logger = logging.getLogger('')
     console = logging.StreamHandler()
     console.setLevel(LOG_SHELL_LEVEL)
     formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
     console.setFormatter(formatter)
-    logging.getLogger('').addHandler(console)
-    return
+    default_logger.addHandler(console)
+    
+    # add a handler for warnings counting
+    warnings_handler = WarningsHandler()
+    warnings_handler.setLevel(LOG_UNCLEAN_EXIT_LEVEL)
+    default_logger.addHandler(warnings_handler)
+    return warnings_handler
 
 if __name__ == "__main__":
     main()
diff --git a/warnings_handler.py b/warnings_handler.py
new file mode 100644 (file)
index 0000000..bc6af31
--- /dev/null
@@ -0,0 +1,22 @@
+'''
+restore-mail-inject.py - Tool to inject mails via IMAP
+
+Copyright (c) 2012 Intra2net AG
+'''
+import logging
+
+class WarningsHandler(logging.Handler):
+    """This class iterates through the e-mail files."""
+
+    # class attributes
+    detected_problems = None
+
+    def __init__(self):
+        """Initialize a handler to count number of warnings."""
+        logging.Handler.__init__(self)
+        self.detected_problems = 0
+
+    def emit(self, record):
+        """Increase number of warnings found"""
+        self.detected_problems += 1
+        
\ No newline at end of file