fix(validation): accept an empty string as the unset value of an int
This commit is contained in:
@@ -20,10 +20,11 @@ SPEC_KEYS = {"type", "required", "default", "choices", "elements", "options", "d
|
||||
UNRESOLVED = object()
|
||||
|
||||
# Numbers pass where a string is declared and digit strings where an int is: the roles read those
|
||||
# through `| string` and `| int` unchanged. A string posing as a list, bool or dict never passes.
|
||||
# through `| string` and `| int` unchanged. An empty string is the contract's unset int, as in
|
||||
# `system.vlan: ""`. A string posing as a list, bool or dict never passes.
|
||||
TYPES = {
|
||||
"str": lambda v: isinstance(v, (str, int, float, EncryptedString)) and not isinstance(v, bool),
|
||||
"int": lambda v: (isinstance(v, int) and not isinstance(v, bool)) or (isinstance(v, str) and v.isdigit()),
|
||||
"int": lambda v: (isinstance(v, int) and not isinstance(v, bool)) or (isinstance(v, str) and (v == "" or v.isdigit())),
|
||||
"float": lambda v: isinstance(v, (int, float)) and not isinstance(v, bool),
|
||||
"bool": lambda v: isinstance(v, bool),
|
||||
"list": lambda v: isinstance(v, list),
|
||||
|
||||
@@ -16,6 +16,12 @@ inputs_fixtures:
|
||||
retired: ~
|
||||
expect: []
|
||||
|
||||
- name: empty-int-is-unset
|
||||
value:
|
||||
name: web01
|
||||
count: ""
|
||||
expect: []
|
||||
|
||||
- name: list-for-dict
|
||||
value:
|
||||
name: web01
|
||||
|
||||
Reference in New Issue
Block a user