* fix(decorator): align kwargs behaviour with native python
Previously, validate_arguments would strip the value if the keyword
was the same as the target kwargs argument.
Align with Python's behaviour.
* fix: also prevent overwriting variable args
Introduces tests for both, which compare against the native python implementation
Co-authored-by: Eric Jolibois <em.jolibois@gmail.com>
* mention about 'args' in the changelog too
* simplify var_kwargs pop
Co-authored-by: Eric Jolibois <em.jolibois@gmail.com>
Co-authored-by: Eric Jolibois <em.jolibois@gmail.com>
* fix: resolve forward refs for inherited dataclasses
closes#1668
* chore: add change file
* fix: make test work everywhere
* chore: rename file just in case
As it doesn't solve the target issue, let's change the PR number
* docs: update change description
* feat: add support for `NamedTuple` and `TypedDict` types
* support `total=False`
* tests: fix ci with python < 3.8 without typing-extensions
* chore: improve mypy
* chore: @samuelcolvin remarks
* refactor: move tests in dedicated file
* docs: add annotated types section with examples
* feat: support properly required and optional fields
* chore(deps-dev): bump typing_extensions
* docs: add a note for `typing_extensions`
* chore: update message to be more accurate
* feat: pass down config to created models
* feat: add util methods to create model from TypedDict or NamedTuple
* refactor: rename into typeddict and namedtuple
* test: add utils tests
* chore: fix lint
* chore: improve test
* refactor: rename utils to match the rest
* chore: update change
* docs: add section for create_model_from_{namedtuple,typeddict}
* refactor: rename typed_dict/named_tuple
* feat: support schema with TypedDict
* feat: support schema for NamedTuple
* feat: add json support for NamedTuple
* chore: rewording
* refactor: use parse_obj
* fix: add check for max items in tuple
* docs: separate typing.NamedTuple and collections.namedtuple
* feat: avoid reconstructing models used as fields of another model on validation
closes#265closes#1837
* docs: add section to change config
* change default value to avoid breaking change
* refactor: only suggest custom BaseModel approach
* added anystr_lower field to config
* updated docs with any anystr_lower config property
* updated changes folder with markdown describing new change
* added anystr to _validators list under bytes type
* added unit tests for anystr_lower config
* Update pydantic/validators.py
Fix wrong method used in cosntr_lower
Co-authored-by: Eric Jolibois <em.jolibois@gmail.com>
* added lower_str to conbytes and constr functions
* Update changes/2134-tayoogunbiyi.md
Co-authored-by: Samuel Colvin <samcolvin@gmail.com>
* renamed conbytes & constr paramater name
* updated change markdown
* added docs for args to constr and conbytes
* added examples to showing to_lower functionality in conbytes & constr
* added better description for curtail_length
* removed unessary whitespace, added default and types in docs
* Update changes/2134-tayoogunbiyi.md
Co-authored-by: Eric Jolibois <em.jolibois@gmail.com>
* added single whitespace to arguments list under constr & conbytes
Co-authored-by: Eric Jolibois <em.jolibois@gmail.com>
Co-authored-by: Samuel Colvin <samcolvin@gmail.com>
Co-authored-by: Samuel Colvin <s@muelcolvin.com>
* Fixed issue causing KeyError to be raised when building schema from multiple `BaseModel` with the same names declared in separate classes (#1912)
* Update test
* Removed redundant f-string
* Fixed formatting
* Fixed lint
* feat: Add the ability to add extra settings sources
* doc: Document "customise settings sources" feature
* tests: Add missing test and add change file
* Update changes/2107-kozlek.md
Co-authored-by: Eric Jolibois <em.jolibois@gmail.com>
* improve docs for settings customise_sources
* fix docs building
* fix test :-(
Co-authored-by: Thomas Berdy <thomas.berdy@outlook.com>
Co-authored-by: Eric Jolibois <em.jolibois@gmail.com>
Co-authored-by: Samuel Colvin <s@muelcolvin.com>
* fix(fields): handle properly default value for type `Callable`
closes#1596
* chore: move test in test_dataclasses
* chore: add comments
* test: rewrite test
* chore: remove useless variable
* fix(schema): add support when callable field has default value
closes#2086
* fix: check only first sublevel for validators with `each_item`
When using a validator with `each_item`, the items are all validated
one by one. But if the items are also iterable the subitems would then
be validated because the validator would be kept as it is.
Now the validator passed to the items is changed and won't be propagated
closes#1933
* chore: add breaking change
* fix: ensure to always return one of the values in `Literal` field type
closes#2166
* perf: improve `literal_validator` speed
Thanks to @yobiscus
* fix: when more options in Literal
switch from `set` to `dict` to still have a O(1) complexity
Thanks @layday :)
* fix: ignore `__doc__` as valid private attribute (#2091)
closes#2090
* Fixes a regression where Enum fields would not propagate keyword arguments to the schema (#2109)
fix#2108
* Fix schema extra not being included when field type is Enum
* Code format
* More code format
* Add changes file
Co-authored-by: Ben Martineau <b.martineau@iwoca.co.uk>
* fix: update all modified field values in `root_validator` when `validate_assignment` is on (#2119)
* fix: update all modified field values in `root_validator` when `validate_assignment` is on
closes#2116
* chore: update root_validator name
Co-authored-by: Arthur Pastel <arthur.pastel@gmail.com>
Co-authored-by: Arthur Pastel <arthur.pastel@gmail.com>
* fix: support `underscore_attrs_are_private` with generic models (#2139)
closes#2138
* fix: set right default value for required (optional) fields (#2143)
closes#2142
* Fix#2111: support pickle for built-in dataclasses (#2114)
* 2111: support pickle for built-in dataclasses
* 2111: add changes
* 2111: simplify test
* return original name + handle similar names
* add additional check
* fix a misspell
* remove useless f-string
* cleanup test
Co-authored-by: Samuel Colvin <s@muelcolvin.com>
* uprev and add history
* tempoarily pin pip
Co-authored-by: Eric Jolibois <em.jolibois@gmail.com>
Co-authored-by: Ben Martineau <bm424@cam.ac.uk>
Co-authored-by: Ben Martineau <b.martineau@iwoca.co.uk>
Co-authored-by: Arthur Pastel <arthur.pastel@gmail.com>
Co-authored-by: aimestereo <aimestereo@gmail.com>
* feat: add validator for NoneType
closes#2095
* feat: support NoneType directly as type
* chore: add change file
* chore: fix typo
* fix: handle Literal[None] for python3.6/3.7 without typing_extensions
* chore: move NotNoneError and export it
* chore: use constant NONE_TYPES to simplify a bit
* chore: use check on Literal instead of typing_extensions
These tests would not run on python 3.8+ without typing_extensions
even though Literal is defined
* test: use fresh Literal[None] in test case
* feat: handle `None` type in schema
* docs: add NoneType documentation
* refactor: switch NONE_TYPES from tuple to set
* Fix#947, fix#1483, fix#1247 allow inner type vars to be present in parent generic classes
- Rename generics._is_type to _is_generic in response to comment:
https://github.com/samuelcolvin/pydantic/pull/1989#discussion_r503400391
- Add more explicit type assertion in generics test
- Add generics tests and unify naming
- Move deep generic tests all into same place in code
- Unify naming convention in deep generic tests using naming of existing tests
- Add tests for multiple inheritance and multiple type vars
- Add generic tests for type hint resolution cases
- Fix edge cases for handling parameters in generic models
- Resolve parameters correctly
- Add tests for special cases like callables
- Add returning generic type directly if parameters and arguments are
identical.
* Apply review comments
- Add docstrings
- Small refactor `generics.__concrete_name__`
- Small refactor of `generics.resolve_type_hints`
- Change `is_identity_typevars_map` to more generic and clearer
`all_identical` and move into utils.
- rename "resolve_type_hint" to "replace_types" so as to not get
confused with "resolve_annotations" from `pydantic.typing`
* Fix generics test coverage
* Update pydantic/generics.py, remove unneeded annotation
mypy understands list comprehensions as they are now
Co-authored-by: Eric Jolibois <em.jolibois@gmail.com>
Co-authored-by: Eric Jolibois <em.jolibois@gmail.com>
* Added StrictBytes type
* updated tests for StrictBytes, updated relevant sections in documentation for StrictBytes and ConstrainedBytes
* added changelog
* chore: typo in change
Co-authored-by: Eric Jolibois <em.jolibois@gmail.com>
* 2111: support pickle for built-in dataclasses
* 2111: add changes
* 2111: simplify test
* return original name + handle similar names
* add additional check
* fix a misspell
* remove useless f-string
* cleanup test
Co-authored-by: Samuel Colvin <s@muelcolvin.com>
Following #2030, the requirements to build the documentation are not installed
with the rest making `make docs` crash when following the contributing steps.
As `make install` is only used for this purpose (easy onboarding), let's just add
again the installation of the doc requirements with it
* fix: update all modified field values in `root_validator` when `validate_assignment` is on
closes#2116
* chore: update root_validator name
Co-authored-by: Arthur Pastel <arthur.pastel@gmail.com>
Co-authored-by: Arthur Pastel <arthur.pastel@gmail.com>
As someone started using pydantic, it can be very convenient to know what type we can rely the returned field is, so we know what we can check on it and what fields it has.
After searching the code I found out it has to be of type ModelField and that's why I'm offering it here as something that I think should be clarified in the documentation.
fix#2108
* Fix schema extra not being included when field type is Enum
* Code format
* More code format
* Add changes file
Co-authored-by: Ben Martineau <b.martineau@iwoca.co.uk>