Commit Graph

707 Commits

Author SHA1 Message Date
Samuel Colvin 1288db7c5c constrain pytest on cibuildwheel build 2020-03-17 20:40:23 +00:00
Samuel Colvin e57f777c4d Support instance methods and class methods with @validate_arguments (#1272) 2020-03-17 20:12:30 +00:00
Pavel Ilyin d8262131d2 No dict update (#1244)
* update_forward_refs now modifies only a copy of __dict__ of cls.__module__

* changes

* test for update_forward_refs

* fixed brackets

* black changes fixed

* make format

Co-authored-by: Samuel Colvin <s@muelcolvin.com>
2020-03-17 19:57:13 +00:00
Alexei Robyn d1279e865e Fix parsing nested custom root type models (#1253) 2020-03-17 19:55:48 +00:00
Stephen Brown II 938335c46f Add benchmark for voluptuous library (#1292)
Voluptuous, despite the name, is a Python data validation library.

- GitHub: https://github.com/alecthomas/voluptuous
- PyPi: https://pypi.org/project/voluptuous

Package | Version | Relative Performance | Mean validation time
--- | --- | --- | ---
valideer | `0.4.2` |  | 104.2μs
attrs + cattrs | `19.3.0` | 1.1x slower | 114.4μs
pydantic | `1.4a1` | 1.2x slower | 124.3μs
marshmallow | `3.5.0` | 1.8x slower | 190.1μs
voluptuous | `0.11.7` | 2.2x slower | 227.6μs
trafaret | `2.0.2` | 2.4x slower | 253.0μs
django-rest-framework | `3.11.0` | 8.5x slower | 881.8μs
cerberus | `1.3.2` | 19.1x slower | 1993.8μs
2020-03-06 13:31:43 +00:00
dependabot-preview[bot] 8727914ced Bump python-dotenv from 0.11.0 to 0.12.0 (#1276)
Bumps [python-dotenv](https://github.com/theskumar/python-dotenv) from 0.11.0 to 0.12.0.
- [Release notes](https://github.com/theskumar/python-dotenv/releases)
- [Changelog](https://github.com/theskumar/python-dotenv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/theskumar/python-dotenv/compare/v0.11.0...v0.12.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-04 17:46:14 +00:00
adamgreg 6f4945d84c Accept pre-compiled Pattern objects (#1238)
* Change str_validator() return type to str

* Make pattern_validator() accept pre-compiled Pattern objects.

Resolves #1237.

* fix str_validator return type

Co-authored-by: Samuel Colvin <samcolvin@gmail.com>
2020-03-04 17:27:16 +00:00
Ondrej Kokes ddc8e5a57b Fix type annotations in examples (#1248)
* README change to make type annotations valid

* example fixed to have valid type annotations

* changes description

* Update README.md

explicit assignment for an optional field

Co-Authored-By: Samuel Colvin <samcolvin@gmail.com>

* Update docs/examples/index_main.py

explicit assignment for an optional field

Co-Authored-By: Samuel Colvin <samcolvin@gmail.com>

Co-authored-by: Samuel Colvin <samcolvin@gmail.com>
2020-03-04 17:26:11 +00:00
PrettyWood 78a3f42b0a Dynamic default value (#1210)
* Simplify dynamic default values

closes #866

* Add documentation and change

* Add `ModelField.get_default` method

* Fix default value in `infer`

Co-Authored-By: Samuel Colvin <samcolvin@gmail.com>

Co-authored-by: Samuel Colvin <samcolvin@gmail.com>
2020-03-04 16:37:23 +00:00
Thaïs de Boisfossé 679e5d149e Generics inherit doc (#1249)
* doc: add an example of inheritance with Generics

* Update the changes directory with the doc changes.
2020-03-04 15:40:04 +00:00
Samuel Colvin e3243d267b upreving packages, fix python 3.7 docs generation (#1271) 2020-03-01 13:34:35 +00:00
Arseny Boykov 0f948618ba Add model signature generation (#1034)
* Add right __init__ signature generation

* Add params overlay support for custom __init__, enhance tests

* Change fake_ini creation to solve AttributeError in cython
AttributeError: attribute '__code__' of 'cython_function_or_method' objects is not writable
Possible there's other attrs that cannot be set in cython, but can't check myself yet

* Cython compatibility, add __signature__, ignore non-identifiers fields
Moved tests to separate file
Moved __init__ creation to utils

* Remove # pragma: no cover

Co-Authored-By: Samuel Colvin <samcolvin@gmail.com>

* Fixed adding signature to doc, some compatibility fixes

* Changed None to tuple() for py3.8 compatibility

* Finally (hope so) fix issues with closure. Add new docstring each time

* coverage for UndefinedType

* Checking signature more simple and obvious way

* Changed doc caption to simple message, used Undefined, merge conflicts

* Compatibility with py3.6

* Add changes/ file

* Ah, that space... Reformatted and ready to go!

* Update pydantic/main.py

Co-Authored-By: Samuel Colvin <samcolvin@gmail.com>

* Update pydantic/main.py

Co-Authored-By: Samuel Colvin <samcolvin@gmail.com>

* Fix signature for properties declared as fields

* Sort imports

* Add comments

* Generate BaseModel signature instead of __init__ signature

* Fixed imports

* Minor improvements from review

* Add docs for model signature

* Delete unused imports

* Fix formatting in tests

* Remove inspect imports from top level

* Update docs/examples/models_signature.py

Co-Authored-By: Samuel Colvin <samcolvin@gmail.com>

* Add missing import

* Remove notes from doc

* change hypothesis-auto mention to hypothesis

* Use None as slice end instead of len()

* tweak generate_model_signature

* improve docs

* Revert af3dd4d, add fields to custom init only if var_kw declared

Co-authored-by: Samuel Colvin <samcolvin@gmail.com>
2020-02-27 17:35:51 -05:00
Jocelyn Boullier f2f83bcae2 Add support for NewType of List, Optional, etc. (#1208)
* add support for NewType of List, Optional, etc.

* bump

Co-authored-by: Samuel Colvin <samcolvin@gmail.com>
2020-02-27 17:14:53 -05:00
Arseny Boykov 7d9614e3f8 Refactor ._iter() method, 10x speed boost for dict(model) (#1017)
* Refactor ._iter() method:
Moved all keys-related stuff (include, exclude, etc.) to ._iter()
Removed redundant iteration through default values
Almost all arguments checks moved out of loops, so checks happen once
Fast yield from .__dict__ on plain .iter() (x10 boost)
Removed redundant set(dict.keys()) in ._calculate_keys()

* Moved back from nested generator checks to checks, optimized copy a bit

* Bump pytest-mock from 1.12.0 to 1.12.1 (#1018)

Bumps [pytest-mock](https://github.com/pytest-dev/pytest-mock) from 1.12.0 to 1.12.1.
- [Release notes](https://github.com/pytest-dev/pytest-mock/releases)
- [Changelog](https://github.com/pytest-dev/pytest-mock/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-mock/compare/v1.12.0...v1.12.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* __str__ and __repr__ inheritance for models, fix #1022 (#1023)

* add testimonials section to docs with reference to python bytes podcast episode (#1025)

* add testimonials section with reference to python bytes podcast episode

* added description to changes directory

* Bump twine from 3.0.0 to 3.1.0 (#1029)

Bumps [twine](https://github.com/pypa/twine) from 3.0.0 to 3.1.0.
- [Release notes](https://github.com/pypa/twine/releases)
- [Changelog](https://github.com/pypa/twine/blob/master/docs/changelog.rst)
- [Commits](https://github.com/pypa/twine/compare/3.0.0...3.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Support typing.Literal in python 3.8 (#1027)

* Support typing.Literal in python 3.8

* Improve import pattern for Literal

* Update references to  in docs

* Try to get build to pass

* Add support for mapping types as custom root (#958)

* Add support for mapping types as custom root

* Incorporate feedback

* Add changes

* Incorporate feedback

* Add docs and tests

* Fix linting issue

* Incorporate more feedback

* Add more specific match

* Add parse_as_type function (#934)

* Add parse_as_type function

* Add changes

* Incorporate feedback

* Add naming tests

* Fix double quotes

* Fix docs example

* Reorder parameters; add dataclass and mapping tests

* Rename parse_as_type to parse_obj, and add parse_file

* Incorporate feedback

* Incorporate feedback

* use custom root types

* Add better support for validator reuse (#941)

* Add better support for validator reuse

* Clean up classmethod unpacking

* Add changes

* Fix coverage check

* Make 3.8 compatible

* Update changes/940-dmontagu.md

Co-Authored-By: Samuel Colvin <s@muelcolvin.com>

* Make allow_reuse discoverable by adding to error message

* switch _check_validator_name to _prepare_validator

* Add changes file

* Delete unrelated files

* Add check that k in fields before using alias

Co-Authored-By: Samuel Colvin <samcolvin@gmail.com>

* Remove redundant call to __iter__

Co-Authored-By: Samuel Colvin <samcolvin@gmail.com>

* Use typing.AbstractSet

* Update pydantic/main.py

Co-Authored-By: Samuel Colvin <samcolvin@gmail.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Co-authored-by: Samuel Colvin <samcolvin@gmail.com>
Co-authored-by: Colin Sullivan <csullivan@brandwatch.com>
Co-authored-by: David Montague <35119617+dmontagu@users.noreply.github.com>
2020-02-27 15:21:22 -05:00
Leo Sussan c4e42746f3 add pydantic.color.Color objects as available input for Color fields (#1258)
* feat: add pydantic.color.Color as available type for Pydantic color fields

* chore: test for color

* chore: change md

* fix: assertion is incorrect

* fix: logic on _original assignment

* fix: value is set to value._original in the isinstance conditional
fix: remove ._original conditional (logic is set earlier in the method)
fix: removed pydantic.color.Color line from errorstring

* chore: revert error message adjust

* chore: grammaer ;)
2020-02-26 15:25:24 -05:00
dependabot-preview[bot] 645e5fe6a0 Bump mkdocs-material from 4.6.0 to 4.6.2 (#1215)
* Bump mkdocs-material from 4.6.0 to 4.6.2

Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 4.6.0 to 4.6.2.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/4.6.0...4.6.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* uprev markdown

* uprev dotenv

Co-authored-by: Samuel Colvin <samcolvin@gmail.com>
2020-02-10 11:10:12 +00:00
Samuel Colvin 948427da75 speedup and fix markdown version conflict (#1214) 2020-02-07 20:47:44 +00:00
Samuel Colvin 6914410f38 Validation Decorator (#1179)
* starting validation_decorator

* correct skip_pre_38

* fix coverage and type hints

* mypy tests and move to class based decorator

* 3.6 fix, prevent duplicate github actions

* correct py 3.6 check

* better errors

* cleaner field names for args and kwargs

* add change and comments

* starting docs

* back to 3.7 for docs

* docs

* bump

* add async example and fix print indents

* allow type annotations as strings

* python 3.8 in docs
2020-02-05 17:27:12 +00:00
Samuel Colvin 8397cde602 new docs preview (#1206)
* new docs preview

* fix docs build for python 3.8

* fix print statements in index_main.py

* bump

* fix github actions builds

* bump

* uprev

* tweaks
2020-02-03 14:07:01 +00:00
dependabot-preview[bot] a97c120dbf Bump pytest from 5.3.4 to 5.3.5 (#1197)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 5.3.4 to 5.3.5.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/5.3.4...5.3.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-02 13:00:20 +00:00
Wesley Ellis be95ddaf88 Be more specific about the meaning of Config.extra (#1203)
* Be more specific about the meaning of Config.extra

When reading through the docs as a beginner, it was not clear to me what the difference between `'allow'` and `'ignore'` was. I fixed this by adding a short description of each of the options from what I can tell from reading the source code.

Is there a better way to format this? Maybe as a list?


(ps, thanks for the cool library)

* tiny further clarification

* sorry...

Co-authored-by: Samuel Colvin <samcolvin@gmail.com>
2020-02-02 12:15:42 +00:00
Samuel Colvin 55f7d35727 update root_validator signature, fix #1192 (#1204) 2020-02-01 16:59:32 +00:00
Samuel Colvin e4cd9d2c87 uprev 2020-01-24 10:48:44 +00:00
dependabot-preview[bot] c5dd9c1ef0 Bump pytest from 5.3.2 to 5.3.4 (#1184)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 5.3.2 to 5.3.4.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/5.3.2...5.3.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-24 10:32:15 +00:00
dependabot-preview[bot] a90aaad3be Bump python-dotenv from 0.10.4 to 0.10.5 (#1180)
Bumps [python-dotenv](https://github.com/theskumar/python-dotenv) from 0.10.4 to 0.10.5.
- [Release notes](https://github.com/theskumar/python-dotenv/releases)
- [Changelog](https://github.com/theskumar/python-dotenv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/theskumar/python-dotenv/compare/v0.10.4...v0.10.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-24 10:32:00 +00:00
Samuel Colvin 943a8a06e5 change alias priority logic (#1178)
* fix alias priority so alias_generators don't take priority

* improve test names

* remove debugs

* Apply suggestions from code review

* more tests and allow custom alias_priority on fields

* precedence tests and docs

* tweaks and add change

* suggestions
2020-01-24 10:31:16 +00:00
Ishan Anand 2c5a8093b8 add note about diff bw pydantic and stdlib dataclasses (#1188)
fix #1187
2020-01-24 10:10:08 +00:00
James Curtin b7c0dd5b16 Support unicode and punycode when validating TLDs (#1183)
* Support unicode and punycode when validating TLDs

* Consolidate HTTP internationalization logic
2020-01-21 16:55:11 +00:00
cuencandres 4f8f939690 Complete Luhn algorithm (#1167)
* Luhn algorithm bug fixed

* Robust tests for payment card number

* changes file

* Robust tests for Luhn algorithm

* remove bad quotes

* Styling changes done

* Some little changes
2020-01-20 18:53:18 +00:00
Samuel Colvin 07271ca5bc tweak security.md 2020-01-19 21:02:58 +00:00
Samuel Colvin 02784fb83b docs typo 2020-01-19 18:28:11 +00:00
Connor 730d84217d allow use of a .env-style files in BaseSettings (#607) (#1011)
* allow use of a `.env`-style files in BaseSettings (#607)

* address various issues with initial implementation

- allow specifying `_env_file` kwarg in instantiation
  * overrides any `env_file` specified in the `Config` class
- cast `os.environ` as a dict for better consistenty of behavior
- `env_path` should be a `Path` type
- replace `with open()` with `read_text`
- use regex for parsing the dotenv files and throw error on invalid line
- factor out `read_env_file` into separate file for easier testing

* move back into a single file; revert typing changes; use regex better

* pass `_env_file` argument around instead of setting a class attribute

* add dotenv docs

* add dotenv tests

* Add changes file

* Flesh out the docs a bit

* Apply suggestions from @samuelcolvin's code review

Co-Authored-By: Samuel Colvin <samcolvin@gmail.com>

* wrap docs

* add not about priority

* fix tests and imports

* fix tests

* switch to python-dotenv

* cleanup, test example

* more docs tweaks

* typo

* fix tests for dotenv

Co-authored-by: Samuel Colvin <samcolvin@gmail.com>
2020-01-19 16:45:36 +00:00
Samuel Colvin a9e8db3286 Create SECURITY.md (#1171)
* Create SECURITY.md

* add link from docs and readme
2020-01-17 17:30:15 +00:00
Samuel Colvin e2533e04c9 regex for username and password in URLs (#1175)
* regex for username and password in URLs, fix #1115

* fix linting
2020-01-17 17:13:55 +00:00
Samuel Colvin 0b5ccffc76 Fix argument in validators during assignment, fix #1172 (#1174) 2020-01-17 16:30:21 +00:00
Sebastián Ramírez aeba494388 Add support for generics with __get_validators__ (#1159)
*  Add support for generics with __get_validators__

*  Add tests for Generics with __get_validators__

* 📝 Add change note

*  Add support for Generic fields with validation of sub-types

* 📝 Add docs for arbitrary generic types

*  Add tests for generic sub-type validation

* 📝 Update change note. Generic support is not so "basic" now

* 📝 Update docs with code review

* ♻️ Update fields module with code review changes

*  Update tests from code review

* 📝 Update example for generics, try to simplify and explain better

* tweak docs example

Co-authored-by: Samuel Colvin <samcolvin@gmail.com>
2020-01-17 16:22:54 +00:00
dependabot-preview[bot] be133473f9 Bump coverage from 5.0.2 to 5.0.3 (#1163)
Bumps [coverage](https://github.com/nedbat/coveragepy) from 5.0.2 to 5.0.3.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/coverage-5.0.2...coverage-5.0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-17 16:22:28 +00:00
Samuel Colvin 718b7fe643 correct dev version 2020-01-17 15:25:07 +00:00
Sebastián Ramírez 496551c854 Implement support for declaring infinite generators (#1152)
*  Implement support for infinite generators with Iterable

*  Add tests for infinite generators

* 🎨 Fix format

* 📝 Add docs for infinite generators

* 📝 Add changes file

*  Store sub_field with original type parameter to allow custom validation

* 📝 Add example for validating first value in infinite generators

* 🔥 Remove unused import in example

*  Add test for infinite generator with first-value validation

* ♻️ Update fields with code review

* 📝 Update example from code review

* 📝 Update docs and format from code review
2020-01-13 11:50:16 +00:00
David Montague dbc044e357 Add support for nested generics (#1104)
* Add support for nested generics

* Allow instantiation of unparameterized generics

* Add better more partial instantiation tests

* Add changes

* Add docs
2020-01-10 21:06:52 +00:00
Samuel Colvin dea8ac2b09 run windows tests on pull requests as well as push 2020-01-10 20:17:39 +00:00
dependabot-preview[bot] 1c49a3f689 Bump pytest-mock from 1.13.0 to 2.0.0 (#1146)
Bumps [pytest-mock](https://github.com/pytest-dev/pytest-mock) from 1.13.0 to 2.0.0.
- [Release notes](https://github.com/pytest-dev/pytest-mock/releases)
- [Changelog](https://github.com/pytest-dev/pytest-mock/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-mock/compare/v1.13.0...v2.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-08 10:35:28 +00:00
dependabot-preview[bot] 21f7ef97c7 Bump coverage from 5.0.1 to 5.0.2 (#1145)
Bumps [coverage](https://github.com/nedbat/coveragepy) from 5.0.1 to 5.0.2.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/coverage-5.0.1...coverage-5.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-08 10:35:16 +00:00
Samuel Colvin fa8aa12a3d correct url_regex, fix #1142 (#1148) 2020-01-08 10:21:44 +00:00
John Carter cd8b504568 Pass model_class to schema_extra staticmethod (#1125)
* Pass model_class to schema_extra staticmethod

Resolves #1122

* Add changelog

* Apply suggestions from code review

Co-Authored-By: Samuel Colvin <samcolvin@gmail.com>

* Fix import after rebase

* Fix test bug

* Use TypeError instead of assert as per review

* Rename var so declaration fits one one line

* tiny tweaks

Co-authored-by: Samuel Colvin <samcolvin@gmail.com>
2020-01-06 12:01:03 +00:00
Samuel Colvin e169bd60e4 encourage use of version_info() in issues (#1138)
* encourage use of version_info() in issues

* improve grammar and add change

* switch test import
2020-01-02 19:34:33 +00:00
pmav99 8a53350412 docs: Add docs for allow_reuse (#1135)
* docs: Remove trailing whitespace

* docs: Add docs for "allow_reuse"
2020-01-02 15:13:44 +00:00
Samuel Colvin 31cac4783b improve pydantic import time (#1132)
* improve pydantic import time, fix #1127, fix #1039

* more tweaks

* tweak utils.py

* defering inspect
2020-01-02 14:35:03 +00:00
dependabot-preview[bot] 8364983545 Bump coverage from 5.0 to 5.0.1 (#1123)
Bumps [coverage](https://github.com/nedbat/coveragepy) from 5.0 to 5.0.1.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/coverage-5.0...coverage-5.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-02 11:45:29 +00:00
Samuel Colvin e9da909dd3 remove explicit re-exports from __init__.py (#1124) 2020-01-02 11:44:48 +00:00