changeset 23:ff47f8088ef9

Make things more OO.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 04 Jul 2016 14:20:56 +0300
parents 793b7997cc2b
children 1bce0c6a673c
files multimerge.py
diffstat 1 files changed, 83 insertions(+), 90 deletions(-) [+]
line wrap: on
line diff
--- a/multimerge.py	Mon Jul 04 14:12:31 2016 +0300
+++ b/multimerge.py	Mon Jul 04 14:20:56 2016 +0300
@@ -94,84 +94,6 @@
         gcm_print(u"{0:25} - {1:25} : {2}".format(ev_start, ev_end, event["summary"]))
 
 
-def gcm_is_str(mstr):
-    return isinstance(mstr, basestring)
-
-
-def gcm_is_string(mstr):
-    return mstr == None or gcm_is_str(mstr)
-
-
-def gcm_is_log_level(mstr):
-    if not gcm_is_str(mstr):
-        return False
-    else:
-        return mstr.upper() in ["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG"]
-
-
-def gcm_trans_log_level(mstr):
-    return mstr.upper()
-
-
-def gcm_is_filename(mstr):
-    if not gcm_is_str(mstr):
-        return False
-    else:
-        return re.match("^[a-z0-9][a-z0-9\.\_\-]+$", mstr, flags=re.IGNORECASE)
-
-
-def gcm_trans_bool(mbool):
-    if gcm_is_str(mbool):
-        if re.match("^\s*(true|1|on|yes)\s*$", mbool, re.IGNORECASE):
-            mbool = True
-        elif re.match("^\s*(false|0|off|no)\s*$", mbool, re.IGNORECASE):
-            mbool = False
-        else:
-            return None
-    return mbool
-
-def gcm_is_bool(mbool):
-    mval = gcm_trans_bool(mbool)
-    if not isinstance(mval, bool):
-        gcm_fatal("gcm_is_bool(): Invalid boolean value '{0}', should be true|false|1|0|on|off|yes|no.".format(mbool))
-    else:
-        return True
-
-
-def gcm_trans_list(mlist):
-    morig = mlist
-    if gcm_is_str(mlist):
-        mlist = re.split("\s*,\s*", mlist, flags=re.IGNORECASE)
-        if not isinstance(mlist, list):
-            gcm_fatal("gcm_trans_list(): Could not parse list '{0}'.".format(mlist))
-    elif not isinstance(mlist, list):
-        gcm_fatal("gcm_trans_list(): Invalid value '{0}'.".format(mlist))
-    return mlist
-
-def gcm_is_list(mlist):
-    return gcm_trans_list(mlist)
-
-
-def gcm_is_email(mstr):
-    if not gcm_is_string(mstr):
-        return False
-    else:
-        return re.match("^.*?\s+<[a-z0-9]+[a-z0-9\.\+\-]*\@[a-z0-9]+[a-z0-9\.\-]+>\s*$|[a-z0-9]+[a-z0-9\.\+\-]*\@[a-z0-9]+[a-z0-9\.\-]+", mstr, flags=re.IGNORECASE)
-
-
-def gcm_trans_email_list(mlist):
-    if mlist == None:
-        return mlist
-    else:
-        return gcm_trans_list(mlist.strip())
-
-def gcm_is_email_list(mlist):
-    mlist = gcm_trans_email_list(mlist)
-    if mlist != None:
-        for email in mlist:
-            if not gcm_is_email(email):
-                gcm_fatal("Invalid e-mail address '{0}' in list {1}.".format(email, ", ".join(mlist)))
-    return True
 
 
 class GCMSettings(dict):
@@ -225,6 +147,77 @@
                 self.mset(name, value)
                 gcm_debug("{0} -> '{1}' == {2}".format(name, value, self.mget(name)))
 
+    def is_str(self, mvalue):
+        return isinstance(mvalue, basestring)
+
+    def is_string(self, mvalue):
+        return mvalue == None or self.is_str(mvalue)
+
+    def is_log_level(self, mvalue):
+        if not self.is_str(mvalue):
+            return False
+        else:
+            return mvalue.upper() in ["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG"]
+
+    def trans_log_level(self, mvalue):
+        return mvalue.upper()
+
+    def is_filename(self, mvalue):
+        if not self.is_str(mvalue):
+            return False
+        else:
+            return re.match("^[a-z0-9][a-z0-9\.\_\-]+$", mvalue, flags=re.IGNORECASE)
+
+    def trans_bool(self, mvalue):
+        if self.is_str(mvalue):
+            if re.match("^\s*(true|1|on|yes)\s*$", mvalue, re.IGNORECASE):
+                mvalue = True
+            elif re.match("^\s*(false|0|off|no)\s*$", mvalue, re.IGNORECASE):
+                mvalue = False
+            else:
+                return None
+        return mvalue
+
+    def is_bool(self, mvalue):
+        mval = self.trans_bool(mvalue)
+        if not isinstance(mval, bool):
+            gcm_fatal("GCMSettings.is_bool(): Invalid boolean value '{0}', should be true|false|1|0|on|off|yes|no.".format(mvalue))
+        else:
+            return True
+
+    def trans_list(self, mvalue):
+        morig = mvalue
+        if self.is_str(mvalue):
+            mvalue = re.split("\s*,\s*", mvalue, flags=re.IGNORECASE)
+            if not isinstance(mvalue, list):
+                gcm_fatal("GCMSettings.trans_list(): Could not parse list '{0}'.".format(mvalue))
+        elif not isinstance(mvalue, list):
+            gcm_fatal("GCMSettings.trans_list(): Invalid value '{0}'.".format(mvalue))
+        return mvalue
+
+    def is_list(self, mvalue):
+        return self.trans_list(mvalue)
+
+    def is_email(self, mvalue):
+        if not self.is_string(mvalue):
+            return False
+        else:
+            return re.match("^.*?\s+<[a-z0-9]+[a-z0-9\.\+\-]*\@[a-z0-9]+[a-z0-9\.\-]+>\s*$|[a-z0-9]+[a-z0-9\.\+\-]*\@[a-z0-9]+[a-z0-9\.\-]+", mvalue, flags=re.IGNORECASE)
+
+    def trans_email_list(self, mvalue):
+        if mvalue == None:
+            return mvalue
+        else:
+            return self.trans_list(mvalue.strip())
+
+    def is_email_list(self, mvalue):
+        mvalue = self.trans_email_list(mvalue)
+        if mvalue != None:
+            for email in mvalue:
+                if not self.is_email(email):
+                    gcm_fatal("Invalid e-mail address '{0}' in list {1}.".format(email, ", ".join(mvalue)))
+        return True
+
 
 ###
 ### Main program starts
@@ -236,32 +229,32 @@
 ## Settings
 cfg = GCMSettings()
 
-cfg.mdef("debug", True, gcm_is_bool, gcm_trans_bool, False)
+cfg.mdef("debug", True, cfg.is_bool, cfg.trans_bool, False)
 
 cfg.mdef("email_ok", False, None, None, False)
-cfg.mdef("email", True, gcm_is_bool, gcm_trans_bool, False)
-cfg.mdef("email_to", True, gcm_is_email_list, gcm_trans_email_list, None)
-cfg.mdef("email_sender", True, gcm_is_email, None, None)
-cfg.mdef("email_subject", True, gcm_is_string, None, "Google Calendar MultiMerge status")
+cfg.mdef("email", True, cfg.is_bool, cfg.trans_bool, False)
+cfg.mdef("email_to", True, cfg.is_email_list, cfg.trans_email_list, None)
+cfg.mdef("email_sender", True, cfg.is_email, None, None)
+cfg.mdef("email_subject", True, cfg.is_string, None, "Google Calendar MultiMerge status")
 
-cfg.mdef("source_regex", True, gcm_is_string, None, "^R:\s*(.*?)\s*\(\s*(.+?)\s*\)\s*$")
-cfg.mdef("source_regmap", False, gcm_is_list, gcm_trans_list, [1, 2])
+cfg.mdef("source_regex", True, cfg.is_string, None, "^R:\s*(.*?)\s*\(\s*(.+?)\s*\)\s*$")
+cfg.mdef("source_regmap", False, cfg.is_list, cfg.trans_list, [1, 2])
 cfg.mdef("source_regmap_len", False, None, None, len(cfg.source_regmap))
 
-cfg.mdef("dest_name", True, gcm_is_string, None, u"Raahen kansainvälisyystoiminta")
-cfg.mdef("dest_id", True, gcm_is_string, None, None)
+cfg.mdef("dest_name", True, cfg.is_string, None, u"Raahen kansainvälisyystoiminta")
+cfg.mdef("dest_id", True, cfg.is_string, None, None)
 
 cfg.mdef("noauth_local_webserver", False, None, None, True)
 #cfg.mdef("auth_host_name", False, None, None, "localhost")
 #cfg.mdef("auth_host_port", False, None, None, [8080, 8090])
-cfg.mdef("logging_level", True, gcm_is_log_level, gcm_trans_log_level, "ERROR")
+cfg.mdef("logging_level", True, cfg.is_log_level, cfg.trans_log_level, "ERROR")
 
 # No need to touch these
 cfg.mdef("app_name", False, None, None, "Google Calendar MultiMerge")
 cfg.mdef("scope", False, None, None, "https://www.googleapis.com/auth/calendar")
 #cfg.mdef("scope", False, None, None, "https://www.googleapis.com/auth/calendar.readonly")
-cfg.mdef("secret_file", True, gcm_is_filename, None, "client_secret.json")
-cfg.mdef("credential_file", True, gcm_is_filename, None, "client_credentials.json")
+cfg.mdef("secret_file", True, cfg.is_filename, None, "client_secret.json")
+cfg.mdef("credential_file", True, cfg.is_filename, None, "client_credentials.json")
 
 
 ## Read, parse and validate configuration file