]> git.neil.brown.name Git - plato.git/commitdiff
profile: read rules from a directory as well as a file.
authorNeilBrown <neilb@suse.de>
Thu, 19 Dec 2013 05:36:36 +0000 (16:36 +1100)
committerNeilBrown <neilb@suse.de>
Thu, 19 Dec 2013 05:36:36 +0000 (16:36 +1100)
This makes it easier to handle temp over-rides

lib/profile.py

index bb396b6e29d5f5a8f4b3651393b4b01b4496e939..6c4067696545844992fe369c2e41f9de2e80bc0b 100644 (file)
@@ -3,7 +3,7 @@
 # earlier.
 # These are just variable assignments stored in a map.
 
-import time
+import time, os
 
 expect = [
     'tone',
@@ -36,18 +36,31 @@ def load_profile(p, t):
     else:
         read_profile(p, "/data/profiles/"+t)
 
-def get_profile(event, who):
+def load_rules(file, p, event, who):
     try:
-        f = open("/data/rules")
+        f = open(file)
         l = f.readlines()
     except IOError:
         l = []
-    p = {}
     for ln in l:
         ln = ln.strip()
         w = ln.split(':', 1)
         if len(w) == 2 and rule_matches(w[0].strip(), event, who):
             load_profile(p, w[1].strip())
+
+def get_profile(event, who):
+    p = {}
+    load_rules("/data/rules", p, event, who)
+    try:
+        d = os.listdir('/data/rules.d')
+        d = filter(lambda x: x[0] != '.', d)
+        d.sort()
+        for b in d:
+            load_rules(os.path.join('/data/rules.d',b), p, event, who)
+    except IOError:
+        pass
+    except OSError:
+        pass
     return p
 
 def rule_matches(rule, event, who):