How to Disable Validation

By default all the data sent to Yang enabled server are validated against Yang model constraints like data type, number range and string patterns. This is one of the major features of YDK. However there is sometime a need to disable data validation in order to see how the server reacts to invalid data. For this sole purpose the YDK has possibility to disable data validation. This feature currently implemented only for NetconfServiceProvider through CrudService and NetconfService.

In order to disable validation of object/entity the Entity class member ignore_validation must be set to True. Please note that this setting disables validation on the entire entity including leafs, and children entities. If the flag is set to non-top-level entity, the validation will be also disabled on all parent entities up to the top-level. Actually, it is important to note, when validation is disabled on non-top-level entity it must be a part of complete hierarchy of a top-level entity.

Here is an example of a negative test, which demonstrates how YDK validation could be disabled.

from __future__ import absolute_import
from __future__ import print_function

from ydk.errors    import YModelError, YServiceProviderError
from ydk.providers import NetconfServiceProvider
from ydk.services  import CRUDService

from ydk.models.ydktest.ydktest_sanity import Runner

def run_test(provider, uint8_value, disable_validation):

    crud = CRUDService()

    vstr = 'enabled'
    if disable_validation:
        vstr = 'disabled'
    print("\nSetting uint8 number to %s when validation is %s" % (uint8_value, vstr))

    runner = Runner()
    runner.ignore_validation = disable_validation   # Set 'ignore_validation' flag
    runner.ytypes.built_in_t.number8 = uint8_value
    try:
        crud.create(provider, runner)
        print("OK")
    except YServiceProviderError as err:
        print("NETCONF FAILED with Error:")
        print(err.message.split('</error-message>')[0].split('"en">')[1])
    except YModelError as err:
        print("YDK VALIDATION FAILED with YModelError:")
        print(err.message)

if __name__ == '__main__':

    provider = NetconfServiceProvider( "127.0.0.1", "admin", "admin", 12022)

    run_test(provider, 88, False)

    run_test(provider, 888, False)

    run_test(provider, 888, True)   # Disable YDK validation

The script produces the following results:

Setting uint8 number to 88 when validation is enabled
OK

Setting uint8 number to 888 when validation is enabled
YDK VALIDATION FAILED with YModelError:
 Invalid value "888" in "number8" element. Path: /ydktest-sanity:runner/ytypes/built-in-t/number8

Setting uint8 number to 888 when validation is disabled
NETCONF FAILED with Error:
"888" is not a valid value.