configurationengine/doc/plugins/dev-plugin/validation-example-plugin.rst
author m2lahtel
Tue, 10 Aug 2010 14:29:28 +0300
changeset 3 e7e0ae78773e
permissions -rw-r--r--
ConE 1.2.11 release
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     1
.. _validation-plugin-howto-example-plugin:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     2
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     3
Example ConfML validation plug-in
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     4
=================================
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     5
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     6
The example plug-in implements a simple ConfML validator class, and so demostrates
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     7
how ConfML validation can be extended by plug-ins.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     8
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     9
The extra validation in this case is as follows: we have a requirement that if
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    10
a string-type ConfML setting's reference starts with ``FOO_``, its value
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    11
should also contain the string ``foo``. For example, consider the following
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    12
file:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    13
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    14
.. code-block :: xml
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    15
    :linenos:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    16
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    17
    <?xml version="1.0" encoding="UTF-8"?>
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    18
    <configuration xmlns="http://www.s60.com/xml/confml/1" name="ExampleValidatorTest">
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    19
        <feature ref="ExampleValidatorTest" name="Settings for example validator testing">
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    20
            <setting ref="SomeSetting" name="Some setting" type="string"/>
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    21
            <setting ref="FOO_SomeSetting1" name="FOO - Some setting 1" type="string"/>
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    22
            <setting ref="FOO_SomeSetting2" name="FOO - Some setting 2" type="string"/>
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    23
        </feature>
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    24
        <data>
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    25
            <ExampleValidatorTest>
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    26
                <SomeSetting>foo bar</SomeSetting>
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    27
                <FOO_SomeSetting1>abc foo</FOO_SomeSetting1>
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    28
                <FOO_SomeSetting2>abc123</FOO_SomeSetting2>
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    29
            </ExampleValidatorTest>
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    30
        </data>
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    31
    </configuration>
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    32
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    33
Here two settings are prefixed with ``FOO_``, but only one of them has ``foo``
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    34
in its value, thus our custom validator should report a warning for the value
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    35
on line 12.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    36
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    37
Directory structure
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    38
-------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    39
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    40
- ``plugins/`` - Root directory for all ConE plug-in sources
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    41
    - ``example/`` - Example plug-in package directory
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    42
        - ``ConeExampleValidatorPlugin/`` - Source for the example validator plug-in
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    43
            - ``examplevalidatorplugin/`` - Module directory containing all plug-in code
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    44
                - ``tests/`` - Unit tests and test data for the plug-in
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    45
                    - ``testdata/`` - Directory containing all test data needed by the test cases
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    46
                    - ``__init__.py`` - Test module initialization file
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    47
                    - ``runtests.py`` - Script for running all test cases
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    48
                    - ``unittest_validation.py`` - File containing test cases
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    49
                - ``__init__.py`` - Plug-in module initialization file
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    50
                - ``validators.py`` - Plug-in source file
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    51
            - ``setup.py`` - Setup script for packaging the plug-in into an .egg file
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    52
            - ``setup.cfg`` - Configuration file for ``setup.py``
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    53
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    54
Plug-in code
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    55
------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    56
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    57
validators.py
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    58
.............
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    59
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    60
This file defines the validator class. The validator simply goes through all
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    61
``ConfmlStringSetting`` instances in the configuration and checks their values.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    62
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    63
.. literalinclude:: /../source/plugins/example/ConeExampleValidatorPlugin/examplevalidatorplugin/validators.py
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    64
   :linenos:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    65
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    66
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    67
unittest_validation.py
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    68
......................
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    69
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    70
The tests for the plug-in simply contain one test case that tests the validator
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    71
with the example ConfML file shown earlier, using the ``assert_problem_list_equals_expected()``
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    72
method provided by the ``testautomation`` module.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    73
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    74
.. literalinclude:: /../source/plugins/example/ConeExampleValidatorPlugin/examplevalidatorplugin/tests/unittest_validation.py
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    75
   :linenos:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    76
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    77
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    78
Plug-in packaging
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    79
-----------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    80
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    81
The file ``setup.py`` handles the packaging of the plug-in into an egg file.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    82
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    83
The most important thing here is the plug-in's entry point info. The list
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    84
of validator classes provided by the plug-in must be specified as an entry
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    85
point. The entry point group in this case is ``cone.plugins.confmlvalidators``.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    86
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    87
.. literalinclude:: /../source/plugins/example/ConeExampleValidatorPlugin/setup.py
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    88
   :linenos: