jazzband / jazzband/jsonmodels
BaseField: the parameters `required` and `nullable` have counter-intuitive results
- Dominant language
- Python
- Stars
- 343
- Forks
- 50
- PR merge metrics
- No merged PRs in 30d
Description
Hi, first off, thanks for writing and maintaining this library!
The code below shows a very basic jsonmodel with two different permutations of `required` and `nullable` for `BaseField`.
The two problems are:
1. `nullable` is not properly enforced - even if a field is not required, it should be possible to deny null values. (`required=false, nullable=False`).
2. It seems impossible to enforce the existence of a value, but still allow nulls. (`required=True, nullable=True`).
I looked through the documentation and examples, and couldn't find a way to achieve these two goals, although I could have missed something.
Example (tested with `jsonmodels` 2.5.1):
```
from jsonmodels import models, fields, errors, validators
# Problem 1: Nullable is not enforced
class Foo(models.Base):
bar = fields.IntField(required=False, nullable=False)
Foo(bar=None) # This should fail because nullable=False, but instead this passes validation.
# Problem 2: It's impossible to enforce { foo: null } as a valid value.
class Foo(models.Base):
bar = fields.IntField(required=True, nullable=True)
Foo(bar=None) # This fails validation with Field is required!, but should succeed because nullable=True.
```
Also, there doesn't appear to be much documentation on `nullable`.
Contributor guide
Assessment
This issue has not been assessed yet.