[Qgis-developer] Built-in attribute form validation

Nathan Woodrow madmanwoo at gmail.com
Tue Dec 20 07:58:44 EST 2011


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

if field1 == "Hello WOrld" and field2 < field3 then error

etc

Thoughts?

P.S
>> I cannot be sure that anyone loading my qml file has the python file
available in the same path as I do
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.

- Nathan

On Tue, Dec 20, 2011 at 10:10 PM, <bernhard.stroebl at jena.de> wrote:

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


More information about the Qgis-developer mailing list