Improve config parser
authorThomas Jarosch <thomas.jarosch@intra2net.com>
Thu, 5 Jul 2012 09:46:24 +0000 (11:46 +0200)
committerThomas Jarosch <thomas.jarosch@intra2net.com>
Thu, 5 Jul 2012 09:46:24 +0000 (11:46 +0200)
- Don't reset config file on broken values, warn user instead
- Print initial config file creation on the console

src/fix_imap_internaldate.py

index 4e0cccf..9c8ad80 100644 (file)
@@ -65,23 +65,10 @@ def main():
 
 def load_configuration():
     """Loads the script configuration from a file or creates such."""
-    config = configparser.RawConfigParser()    
+    config = configparser.RawConfigParser()
     success = config.read(CONFIG_FILENAME)
-    try:
-        config.get('basic_settings', 'file_log_level')
-        config.get('basic_settings', 'console_log_level')
-        config.get('basic_settings', 'imap_server')
-        config.getint('basic_settings', 'tolerance_mins')
-        config.getboolean('basic_settings', 'skip_shared_folders')
-        config.getboolean('basic_settings', 'fallback_to_date_header')
-    except configparser.NoSectionError:
-        success = []
-    except configparser.NoOptionError:
-        success = []
-    except ValueError:
-        success = []
-
-    # if corrupted settings save file and load default
+
+    # if no file is found create a default one
     if(len(success)==0):
         if(not config.has_section('basic_settings')):
             config.add_section('basic_settings')
@@ -89,11 +76,24 @@ def load_configuration():
         config.set('basic_settings', 'console_log_level', logging.INFO)
         config.set('basic_settings', 'imap_server', 'imap.company.com')
         config.set('basic_settings', 'tolerance_mins', 30)
-        config.set('basic_settings', 'skip_shared_folders', True)
-        config.set('basic_settings', 'fallback_to_date_header', False)
+        config.set('basic_settings', 'skip_shared_folders', "True")
+        config.set('basic_settings', 'fallback_to_date_header', "False")
         with open(CONFIG_FILENAME, 'w') as configfile:
             config.write(configfile)
             configfile.write("# 0 NOTSET, 10 DEBUG, 20 INFO, 30 WARNING, 40 ERROR, 50 CRITICAL\n")
+            print("Created initial config %s" % CONFIG_FILENAME)
+
+    try:
+        config.get('basic_settings', 'file_log_level')
+        config.get('basic_settings', 'console_log_level')
+        config.get('basic_settings', 'imap_server')
+        config.getint('basic_settings', 'tolerance_mins')
+        config.getboolean('basic_settings', 'skip_shared_folders')
+        config.getboolean('basic_settings', 'fallback_to_date_header')
+    except (configparser.NoSectionError, configparser.NoOptionError, ValueError) as ex:
+        print("Could not read config file '%s': %s." % (CONFIG_FILENAME, ex))
+        print("Please change or remove the config file.")
+        sys.exit()
 
     return config
 
@@ -125,13 +125,13 @@ def synchronize_csv(config, test_mode):
     date_parser = MailDateParser()
     server = config.get('basic_settings', 'imap_server')
     tolerance = config.getint('basic_settings', 'tolerance_mins') * 60
+    skip_shared_folders = config.getboolean('basic_settings', 'skip_shared_folders')
 
     # iterate through the users in the csv data
     user_reader = csv.DictReader(open(CSV_FILENAME, "r"), delimiter=',')
     for user in user_reader:
         try:
-            session = MailIterator(server, user['username'], user['password'],
-                                   config.getboolean('basic_settings', 'skip_shared_folders'))
+            session = MailIterator(server, user['username'], user['password'], skip_shared_folders)
         except UserWarning as ex:
             logging.error(ex)
             continue