[Formed-commits] r297 - in trunk: . formed/formed/model formed/formed/plugins/modify

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Mon Dec 1 11:24:58 CET 2008


Author: torsten
Date: 2008-12-01 11:24:57 +0100 (Mon, 01 Dec 2008)
New Revision: 297

Modified:
   trunk/ChangeLog
   trunk/formed/formed/model/data.py
   trunk/formed/formed/model/expr.py
   trunk/formed/formed/plugins/modify/rules.py
Log:
Generate default rules for required fields


Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2008-11-28 11:50:49 UTC (rev 296)
+++ trunk/ChangeLog	2008-12-01 10:24:57 UTC (rev 297)
@@ -1,3 +1,12 @@
+2008-12-01	Torsten Irländer <torsten.irlaender at intevation.de>
+
+	Added autmatic generation of required rules
+
+	* formed/formed/model/data.py,
+	  formed/formed/model/expr.py,
+	  formed/formed/plugins/modify/rules.py: Default rules for required
+	  fields can now be generated.
+
 2008-11-28	Sascha L. Teichmann <teichmann at intevation.de>
 
 	* formed/formed/model/data.py, formed/formed/model/nodecomponents.py:

Modified: trunk/formed/formed/model/data.py
===================================================================
--- trunk/formed/formed/model/data.py	2008-11-28 11:50:49 UTC (rev 296)
+++ trunk/formed/formed/model/data.py	2008-12-01 10:24:57 UTC (rev 297)
@@ -37,6 +37,7 @@
                 return VISIT_IGNORE_CHILDREN
         elif isinstance(nc, Leaf) and not isinstance(nc, 
             (RuleLeaf, ExternalChoiceListLeaf, InfoLeaf)):
+            print nc.getName()
             self.widgets.append(nc)
 
         return VISIT_CONTINUE
@@ -239,6 +240,9 @@
             self.expr = newExpr
         Leaf.setAttribute(self, attrib, value, broadcast)
 
+    def setExpr(self, expr):
+        self.setAttribute('expr', expr)
+
     def getExpr(self):
         return self.expr
 

Modified: trunk/formed/formed/model/expr.py
===================================================================
--- trunk/formed/formed/model/expr.py	2008-11-28 11:50:49 UTC (rev 296)
+++ trunk/formed/formed/model/expr.py	2008-12-01 10:24:57 UTC (rev 297)
@@ -19,7 +19,7 @@
 
 FLT_RE = re.compile(r'^([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)$')
 INT_RE = re.compile(r'^([-+]?[0-9]+)$')
-VAR_RE = re.compile(r'^\$(\w+)$')
+VAR_RE = re.compile(r'^\$([\w\-_]+)$')
 
 from shlex import split as lexsplit
 

Modified: trunk/formed/formed/plugins/modify/rules.py
===================================================================
--- trunk/formed/formed/plugins/modify/rules.py	2008-11-28 11:50:49 UTC (rev 296)
+++ trunk/formed/formed/plugins/modify/rules.py	2008-12-01 10:24:57 UTC (rev 297)
@@ -27,10 +27,34 @@
         allModes = main.getAllModes()
 
         collector = data.WidgetCollector()
-        document.visit(collector.visitor, mode, allModes)
+        document.visit(collector.visitor)
         widgets = collector.widgets
-        print len(widgets)
+        # Get all rules in document
+        known_fields = set()
+        for r in document.findAllByClass(data.RuleLeaf, mode, allModes):
+            known_fields = known_fields.union(r.getExpr().getDependencies())
+        rule_counter = len(known_fields)
 
+        for w in widgets:
+            if w.getName() in known_fields: continue
+            flags = w.getFlags()
+            if flags.find('required') >= 0:
+                if isinstance(w, (data.ChoiceNode, data.RadioNode)):
+                    expr = "$%s -1 == not" % w.getName()
+                else:
+                    expr = "$%s not" % w.getName()
 
+                # create new rule
+                rule = data.RuleLeaf()
+                rule.setName("required-rule-%d" % rule_counter)
+                rule_counter += 1
+                rule.setExpr(expr)
+                rule.setValue("Fehlende Pflichtfeldangabe")
+                rule.setMark("warning:%s" % w.getName())
+                # add rule to the tree
+                parent = w.getParent()
+                parent.addChild(rule)
+
+
 # vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 enc=utf-8 :
 



More information about the Formed-commits mailing list