Maybe it would be good to have a merge of the two ideas.  Have a set of pre-built rules (non-python) that you can supply in the fields tab with the ability to also supply a Python file which has more complex rules e.g<div>

<br></div><div>if field1 == &quot;Hello WOrld&quot; and field2 &lt; field3 then error</div><div><br></div><div>etc </div><div><br></div><div>Thoughts?</div><div><br></div><div>P.S </div><div>&gt;&gt; I cannot be sure that anyone loading my qml file has the python file available in the same path as I do</div>

<div>Normally I would store the python file in the same folder as the project file and ship it with the project but I get what you mean.</div><div><br></div><div>- Nathan<br><br><div class="gmail_quote">On Tue, Dec 20, 2011 at 10:10 PM,  <span dir="ltr">&lt;<a href="mailto:bernhard.stroebl@jena.de">bernhard.stroebl@jena.de</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Nathan,<br>
<br>
I do like your idea, it in fact would reduce the need for custom Uis. How about saving the check as part of the project or qml file similar to the edit-widget option in the layer properties. Because for my feeling that would be the place where it belongs and I cannot be sure that anyone loading my qml file has the python file available in the same path as I do.<br>


Probably there is only a limited number of checks which cover the majority of use cases e.g.<br>
- NOT NULL<br>
- range (for Numbers)<br>
- range (for dates)<br>
- max length (for strings)<br>
- contains regex/string (for strings)<br>
Multiple rules could be applied to any field in the fields tab of the layer properties. For special cases you would still need a custom Ui, though.<br>
<br>
just my two cents<br>
<br>
Bernhard<br>
<br>
<br>
<br>
Am <a href="tel:20.12.2011%2012" value="+12012201112" target="_blank">20.12.2011 12</a>:41, schrieb Nathan Woodrow:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
Hi all,<br>
<br>
I have been working on this idea over the last couple days which I think<br>
would be cool/handy to have in QGIS and I would be interested to get some<br>
feedback with what people think.<br>
<br>
The general idea is to add a form of field validation to the built-in<br>
attribute forms.  The use case for this is pretty clear I think, being able<br>
to let the user/admin of any layer define validation rules to check against<br>
the data entered on the attribute form when the user presses OK providing<br>
instant feedback.  I normally do this on my PostGIS tables but you don&#39;t<br>
get errors until you try and commit the data and even then it&#39;s a simple<br>
&quot;there is a error&quot;, if you have added more then 1 item you have to check<br>
each one to work out what is wrong, and this method only applies to a<br>
PostGIS layer.  The idea I have been drafting would work on any layer, as<br>
it&#39;s at the QGIS level vs at the datasource level.<br>
<br>
My idea is to use simple a simple Python file with basic functions that<br>
will be called for each field in the attribute form that is editable.  I&#39;m<br>
a big fan of convention over configuration so my idea uses conventions to<br>
define what functions are used to validate what fields.  The function will<br>
return False and an error message that can be shown to the user if<br>
something is wrong.<br>
<br>
The functions use the following syntax: validate{FieldName} or<br>
validate{FieldIndex} for naming (plus some other styles) e.g<br>
<br>
def validateName():<br>
    if value == &quot;&quot;:<br>
       return (False,&quot;Name can&#39;t be NULL&quot;)<br>
    return True<br>
<br>
You would place the function in a python file e.g PeopleRules.py and then<br>
tell QGIS to use this file to look for validation rules, pretty much the<br>
same as we do now for having custom Python forms.<br>
<br>
Overview of logic:<br>
<br></div></div>
    1. Define Python file with rules<br>
    2. Tell QGIS to use the rules file for the layer.<br>
    3. Open attribute form<br>
    4. Edit some values<br>
    5. Press OK<br>
    6. QGIS calls each function in the rules file to validate each field<div class="im"><br>
    that is defined with a rule<br></div>
    7. If there are errors: cancel the accept() action and show the errors.<div class="im"><br>
     If there are no errors go though like normal.<br>
<br>
My thoughts for using Python are:<br>
<br></div>
    - Easy to read and write<br>
    - Not limited to what we have in QgsExpression and easier to expand.<br>
    - Can add documentation to validation rules.<br>
    - Can add more complex validation rules e.g. regex, parsing, database<div class="im"><br>
    checks etc<br>
<br>
My overall goal with this is to reduce the need to create custom Python Qt<br>
forms when doing data entry, and doing validation is one of the reasons I<br>
tend to make custom Python Qt forms but then you loose the ease of QGIS<br>
doing most of the form work for you.<br>
<br>
I have attached two files which have a example of what the idea is.<br>
  fieldChecks.py is an example rules file with comments to explain each<br>
section, runMe.py has the logic for reading and executing the rules for<br>
each field.  Run: python runMe.py to see the running logic and output.<br>
<br>
What love to get peoples thoughts about this, users and devs a like.<br>
<br>
- Nathan<br>
<br>
<br></div>
________ Information from NOD32 ________<br>
This message was checked by NOD32 Antivirus System for Linux Mail Server.<br>
<a href="http://www.nod32.com" target="_blank">http://www.nod32.com</a><br>
<br>
<br>
<br>
<br>
______________________________<u></u>_________________<br>
Qgis-developer mailing list<br>
<a href="mailto:Qgis-developer@lists.osgeo.org" target="_blank">Qgis-developer@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/qgis-developer" target="_blank">http://lists.osgeo.org/<u></u>mailman/listinfo/qgis-<u></u>developer</a><br>
<br>
<br>
________ Information from NOD32 ________<br>
This message was checked by NOD32 Antivirus System for Linux Mail Server.<br>
<a href="http://www.nod32.com" target="_blank">http://www.nod32.com</a><br>
</blockquote>
<br>
<br>
<br>
<br>
________ Information from NOD32 ________<br>
This message was checked by NOD32 Antivirus System for Linux Mail Server.<br>
<a href="http://www.nod32.com" target="_blank">http://www.nod32.com</a><br>
</blockquote></div><br></div>