make fields typed as lists optional #1858
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I'm trying to type the examples, and another common issue I'm seeing is related to lists, either those created with
multi=True
or by using aNested
field.The issue is with the state of the
required
option of the field. When using the non-typed field creation option this isn't a problem. BothText(multi=True)
andNested(SomeDoc)
work well with their default setting ofrequired=False
.When using the new type hint definitions, however, the default for a typed field is to be required, and to make a field not required you have to wrap the type with
Optional
. This is okay for a scalar field, but for a list it creates confusion, because in terms of Python typing it is expected that an empty list is a valid value for a required field, but a required DSL field considers an empty list the same asNone
and does not allow it.With this change, I'm changing the field creation logic to make sure that any fields that are created via type hints have
required=False
even whenOptional
is not given in the type hint, so that they work in the expected way and allow the empty list as a valid value.No behavior changes are made for fields that are created without type hints.