pykwalify icon indicating copy to clipboard operation
pykwalify copied to clipboard

pattern rule not working with all scalar types

Open rpieterick opened this issue 5 years ago • 1 comments

Environment

  • Python version: 3.6.9
  • PyKwalify version: 1.7.0

Documentation states the pattern rule works for all scalar types. It appears that with the commit for issue #47, the pattern rule only works for string values.

Steps to Reproduce

  1. pykwalify -s schema.yaml -d data.yaml

Schema

type: map
mapping:
  "=":
    type: scalar
    pattern: .*

Data

boolean: true
number: 1
string1: truE
string2: 127.0.0.1

Expected Behavior

Validation passes.

Observed Behavior

 ERROR - validation.invalid
 ERROR -  --- All found errors ---
 ERROR - [u"Value 'True' does not match pattern '.*'. Path: '/boolean'", u"Value '1' does not match pattern '.*'. Path: '/number'"]
Traceback (most recent call last):
  File "/usr/local/bin/pykwalify", line 11, in <module>
    sys.exit(cli_entrypoint())
  File "/usr/local/lib/python2.7/dist-packages/pykwalify/cli.py", line 95, in cli_entrypoint
    run(parse_cli())
  File "/usr/local/lib/python2.7/dist-packages/pykwalify/cli.py", line 82, in run
    c.validate()
  File "/usr/local/lib/python2.7/dist-packages/pykwalify/core.py", line 167, in validate
    error_msg=u'.\n - '.join(self.validation_errors)))
pykwalify.errors.SchemaError: <SchemaError: error code 2: Schema validation failed:
 - Value 'True' does not match pattern '.*'. Path: '/boolean'.
 - Value '1' does not match pattern '.*'. Path: '/number'.: Path: '/'>

rpieterick avatar Oct 26 '20 17:10 rpieterick

@rpieterick So there is two solutions to this. Either we fully ignore pattern rule on types that is not really a string compatible scalar types and you as a user have to explicitly sort out the data you send in and only string compatible values will be checked and the others will be ignored. Or we always attempt to do a str() convert of the value and check the pattern against that and let the user provide something that is str() compatible. I think i will lean towards the second option where it will be attempted first and then possibly fail.

Grokzen avatar Dec 30 '20 13:12 Grokzen