Add unit testing for the mailbox acls parsing functionality
[imap-restore-mail] / restore_mail_inject.py
index c67e6ed..a4dace9 100644 (file)
@@ -12,23 +12,28 @@ 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()
-    logging.info("The module restore_mail_inject.py started with user %s, folder %s and source %s." %
-          (args.user, args.folder, args.srcdir))
-
-    # connect
-    session = MailIterator(args.user)
-    #session = MailIterator("/var/imap/socket/imap", "cyrus", "geheim")
+    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)
+
+    # connect to unix socket or server
+    if(args.unix_socket_disabled):
+        session = MailIterator(args.user)
+    else:
+        session = MailIterator(args.user)
+        #session = MailIterator("/var/imap/socket/imap", "cyrus", "geheim")
     storage = FileIterator()
 
     # retrieve mailbox list from the mailbox list file
@@ -61,11 +66,12 @@ 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."""
+
     # parse arguments
     parser = argparse.ArgumentParser(description="Tool to inject mails via IMAP.")
     parser.add_argument('-u', '--username', dest='user', action='store',
@@ -80,6 +86,8 @@ def configure_args():
                         default="", help='name of the original user (=username if not specified)')
     parser.add_argument('-a', '--append', dest='append', action='store_true',
                         default=False, help="append mails, don't delete anything")
+    parser.add_argument('-n', '--normal', dest='unix_socket_disabled', action='store_true',
+                        default=False, help='disable unix socket usage for the IMAP connection')
     args = parser.parse_args()
 
     if (args.folder != "INBOX"):
@@ -102,12 +110,19 @@ 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()