Commit Graph

236 Commits

Author SHA1 Message Date
Samuel Colvin d473f4abc9 cython (#548)
* user cython for fields.py, parse.py and validators.py, fix #547

* fix coverage

* no cython on windows

* speedup error_wrappers, more cython

* conditional validators

* more tweaks to validators.py

* add compiled check

* fix mypy and tweak

* benchmark with cython

* simplify anystr_strip_whitespace

* build binaries on travis

* fix travis manylinux builds

* correct test stages

* cibuildwheel to dist

* fix manylinux build

* don't upgrade pip on wheel build

* try a fix for cibuildwheel

* speedup deploy stage

* revert file rearrangement, cythonize main.py

* tweak main.py

* update docs and history

* fix deploy stage of travis

* Cythonize more files (#553)

* Cythonize more files

* Tests pass

* Fixed ordering

* Some code cleanup

* Every last file cythonized

* cython coverage

* upgrade cython and tweak build setup

* different build stages
2019-05-30 12:04:15 +01:00
dmontagu af26f7f181 Fix issue with unspecified generic type (#554)
* Fix issue with unspecified generic type, fix #550

Seems to solve #550

With this change, models with bare `List` or `Dict` as a typehint still validate for type agreement, but don't validate the type of the parameters.

I'm not sure this is the "right" fix (I don't know the implications of ignoring TypeVars like this), but considering how simple it was I figured I'd at least share.

* Update validators.py

Found this discussion: https://github.com/samuelcolvin/pydantic/issues/545; `lenient_issubclass` does seem to fix it.

* Update validators.py

Hacky solution to prevent no validator exception. Maybe there's a better way?

* Tests pass and PR checklist done

* Check sooner

* Block empty list from dict constructor

* Removed modifications to dict_validator
2019-05-29 19:35:16 +01:00
Vítor Augusto da Silva Vasconcellos 79ed78fda0 Run dataclass' original __post_init__ before validation (#560)
* Run dataclass' original __post_init__ before validation

* Add unit test

* Update HISTORY.rst
2019-05-29 18:14:36 +01:00
Samuel Colvin 66ce99e4f0 Azure Pipelines - tests for windows (#538)
* add azure-pipelines.yml

* fix install command

* skip some tests on windows
2019-05-23 10:30:32 +01:00
Sebastián Ramírez cd8c7641bf Fix JSON Schema for list, tuple, and set, improving interoperability (#540)
* Fix JSON Schema for list, tuple, and set, improving interoperatibility

* Update History with PR number
2019-05-23 10:18:46 +01:00
Samuel Colvin 22f134475d Colors (#516)
* Color validator MVP

* Color Validator refactored

* Small optimizations applied

* Code coverage improved

* hex processing improved, json encoder and repr added

* Add documentation, update HISTORY (#504)

* Increase test coverage (#504)

* hex helpers refactored (#504)

* Fixes after code review (#509)

* Color Type section in docs reduced

* Check for valid but unnamed colors

* Minor fixes: typo in docs, default value for float comparison function

* rewrite Color

* fix color tests

* tweaks and improve docs

* tweaks and change Color.__str__

* add as_hsla and as_hsl

* support more rgb(a) formats

* add hsl parsing

* parsing hex with alpha channel

* fix hsl parsing

* simpler failure/fallback rules for color display

* storage as floats internally

* tweak docs

* fix type hints
2019-05-22 13:14:35 +01:00
euri10 c0298a8a76 Fix to schema generation for IPv{4,6}{Address,Interface,Network} (#532)
* Fix to schema generation for IPv{4,6}{Address,Interface,Network}, fix #498

* Added docs

* Added PR number

* Updated format to comply with http://json-schema.org/latest/json-schema-validation.html#rfc.section.7.3.4
Modified tests accordingly

* For real
2019-05-21 16:03:34 +01:00
David Sommerich cb2abb10b6 Fix __fields_set__ not using alias field names (#517) (#518)
* Fix __fields_set__ not using alias field names (#517)

fix #517

* Update HISTORY.rst

* Fix single quotes

* Don't need to check allow_population_by_alias

* Calculate fields_set in validate_model instead

* Fix formatting

* Add breaking change to history

* Minor fixed to validate_mode

* Minor fixes to tests

* Add comments for names_used and fields_set in validate_model
2019-05-18 12:11:33 +01:00
Vitaly R. Samigullin fe72ba13f4 Tuple ellipsis (#512)
* Variable size tuple support added, fix #495

* Minor fixes and tests added (#495)

* Variable length tuple refactored after a code review (#495)
2019-05-11 16:10:02 +01:00
Vitaly R. Samigullin f8b946b8c2 Fix to schema generation for IPvAny{Address,Interface,Network} (#498) (#510)
fix #498
2019-05-08 10:39:43 +01:00
pyup.io bot 983f886f77 Scheduled monthly dependency update for May (#499)
* Update sphinx from 2.0.0 to 2.0.1

* Update isort from 4.3.16 to 4.3.17

* Update mypy from 0.670 to 0.701

* Update pytest from 4.4.0 to 4.4.1

* Update pytest-mock from 1.10.3 to 1.10.4

* fix typing
2019-05-05 14:08:18 +01:00
Sean Marshallsay 8149e09332 Implement const keyword in Schema. (#469)
* feat: implement const keyword in Schema

Fix #434.

* make fields marked `const` optional

* move `const` out of the `Field`

* check that `schema` is not `None` instead of using `getattr`

* tweak constant error
2019-05-05 14:00:36 +01:00
Samuel Colvin bff8a1789d single quotes in tests 2019-04-25 11:54:05 +01:00
jakeb a3d9ad16e7 Fix dict with extra keys (#490)
* Fix dict with extra keys (#489), fix #488

* Fix PR number

* Fix Config of MyModel not to inherit BaseConfig
2019-04-25 11:50:58 +01:00
Mike Goodspeed 0cfce77bb3 fix json for Path, FilePath, and DirectoryPath objects (#485)
* fix json for Path, FilePath, and DirectoryPath objects, fix #473

* convert to single spaces

* assert result to a string

* Update test_json.py

* encode entire Path hierarchy the same way
2019-04-23 15:09:09 +01:00
NoAnyLove 2ca81ed33f Fix nested dataclass schema (#475)
* Add test case for nested dataclass schema, fix #474

* Fix nested dataclass schema

* Fix mypy typing

* Update HISTORY.rst

* Code review updates
2019-04-18 10:10:36 +01:00
Samuel Colvin 65d717a7b7 fix parse_obj for dict-like object (#476)
* fix parse_obj for dict-like object, fix #472

* correct internal errors with parse_obj
2019-04-17 10:46:23 +01:00
primal100 50fd2c5b48 Validators for dataclasses (#454)
* Added validators for dataclass, fix #415

* Added dataclass validators

* Added dataclass validators

* Updated docs for added validating to dataclass

* Updated docs for added validating to dataclass

* Fixed line endings

* Set __validators__ type to Mapping instead of Dict

* Update History

* Use __mro__ instead of __bases__ for gather_validators

* Fix PR number

* Fix issue.rst header underline

* Fix HISTORY.rst merge conflict

* Fix utils.py merge conflict

* fix utils.py

* Rebase and other fixes

* Fix rebase and other issues

* Change history

* Remove unnecessary lines in main.py

* Rebase

* Update history

* Rename ModelType to ModelOrDc

* Added inheritance replace test

* More consiste dataclass validator tests

* fix history.

* Remove Optional ModelOrDc Type

* Fix ModelOrDc
2019-04-11 23:13:57 +01:00
Atheuz 449661b8cc fix: serialize secrets to json. (#465)
* fix: serialize secrets to json, fix #462

* feat: adjust documentation for secretstr.

* feat: undo unnecessary changes. keep tests.

* fix: tests were broken, now they're fixed again.

* feat: add display fn to SecretStr and SecretBytes, to be used for json output.

* fix: minor typo.

* fix: last few comments.
2019-04-11 19:32:28 +01:00
Sebastián Ramírez 63afb45d71 Update sub_types when calling update_forward_refs() (#464)
* Update sub_types when calling update_forward_refs(), fix #404

* Update History

* Handle deeply nested ForwardRef types in sub_types using recursion

* Move update_field_forward_refs to utils.py
2019-04-11 16:08:35 +01:00
Samuel Colvin ddbf2be9c9 uprev and improve makefile (#459) 2019-04-04 12:55:28 +01:00
Atheuz 4a8faca42e feat: add SecretStr and SecretBytes. (#452)
* feat: add SecretStr and SecretBytes.

* chore: update HISTORY.rst

* fix: file permissions were incorrect.

* feat: lint, format, fix comments.

* feat: changed inner type of SecretBytes in the schema to string as there is no bytes type in json.

* feat: remove format from secret str and secret bytes.

* feat: fix schema mapping.
2019-04-04 12:14:47 +01:00
Vitaly R. Samigullin 28191d594c Fix JSON serialization for ipaddress types (#457) 2019-04-04 10:03:51 +01:00
Vitaly R. Samigullin 9e12674827 PyObject callable values (#440)
* Support callable as PyObject field

* Add unittests for PyObject callable values

* Update HISTORY.rst

* PyObject minor fixes after code review (#409)
2019-04-04 10:00:55 +01:00
Samuel Colvin bbbc8987a8 Classvars (#455)
* Support specialized ClassVars, e. g. ClassVar[int] now works in a model, fix #435

* Use apostrophes and pass the test also on python 3.6, where ClassVar[int] is a ClassVar, not a _GenericAlias. Note that the == operator gives False in this case, so we must really compare the classes directly.

* Another attempt at the ClassVar check.

* Ran make format.

* Make mypy happy.

* add HISTORY
2019-04-03 11:58:28 +01:00
tigerwings 085fc84818 Fix ForwardRef collection bug (#450)
* fix ForwardRef collection bug, fix #439

* reformat codes

* minor document error

* add HISTORY.rst and simplified unit test

* restore the original example for ForwardRef
2019-04-03 11:14:11 +01:00
pyup.io bot 500a166056 Scheduled monthly dependency update for April (#449)
* Update sphinx from 1.8.4 to 2.0.0

* Update attrs from 18.2.0 to 19.1.0

* Update black from 18.9b0 to 19.3b0

* Update coverage from 4.5.2 to 4.5.3

* Update isort from 4.3.9 to 4.3.16

* Update pytest from 4.3.0 to 4.4.0

* Update pytest-isort from 0.2.1 to 0.3.1

* Update pytest-mock from 1.10.1 to 1.10.3
2019-04-02 10:44:26 +01:00
Nikita Leybovich 3a33d8db10 IntEnum support (#444)
* IntEnum support

* Update HISTORY.rst
2019-04-01 15:52:24 +01:00
Vitaly R. Samigullin 42bc8e4b43 Sequence support (#428)
fix #304

* Sequence support added

* Unittests for sequence added

* Fix HISTORY

* Sequence validation simplified

* Fix type conversion for Sequence
2019-03-29 10:17:23 +00:00
Denis Kataev fa65a07a0c Correct path in nested models (#437)
* Correct path in nested models

* History

* Fix code review
2019-03-28 15:26:06 +00:00
Vitaly R. Samigullin caaa16ee71 Dataclass schema attr (#438)
fix #408

* Fix default field value compatibility for dataclass-based models

* Add unittests for dataclass schema bugfix

* Update HISTORY
2019-03-28 12:56:58 +00:00
Vitaly R. Samigullin 0458f9ece9 IPv{4,6,Any}{Interface,Network} types added (#419)
* IPv{4,6,Any}{Network,Interface} types added, unittests and docs updated

* HISTORY.rst minor update

* Remove strict argument from IP network types

* IP Networks validators and type hints fixed

* tweak history
2019-03-20 18:13:04 +00:00
pyup.io bot 721f17d2b5 Scheduled monthly dependency update for March (#410)
* Update sphinx from 1.8.3 to 1.8.4

* Update flake8 from 3.7.4 to 3.7.7

* Update isort from 4.3.4 to 4.3.9

* Update mypy from 0.660 to 0.670

* Update pyflakes from 2.1.0 to 2.1.1

* Update pytest from 4.2.0 to 4.3.0

* Update pytest-mock from 1.10.0 to 1.10.1
2019-03-15 11:37:52 +00:00
Vitaly R. Samigullin f41e3afaa0 ipaddress.IPAddress support (#417)
* ipaddress-compatible types added, fix #333

* Unittests for ipaddress-types added

* Docs updated after ipaddress-types added

* HISTORY.rst updated to reflect ipaddress-related types introduction

* Fix docs table format

* Strings double quotes reverted

* ipaddress types support fixed, IPvAnyAddress type redefined

* Error handling fixed for ipaddress-related types

* Positive cases for IPv4Address and IPv6Address types in unittests added
2019-03-15 10:18:06 +00:00
Yaraslau Zhylko 37855aa90c fix typo in NoneIsNotAllowedError message (#414)
* fix typo in `NoneIsNotAllowedError` message

* Add HISTORY.rst entry
2019-03-07 13:33:58 +00:00
Samuel Colvin 951daa7c5f submodel validation, fix #403 (#407) 2019-02-25 15:22:19 +00:00
Andrey Golovizin e77bc00d6e Fix type hints of parse_obj and similar methods (#405) 2019-02-21 22:23:50 +00:00
Samuel Colvin 1161df3ca0 support ForwardRef on dataclasses (#399)
* support ForwardRef on dataclasses, fix #397

* explicit docs about when postponed annotations don't work
2019-02-18 08:41:35 +00:00
Daniel Smith 5438aa5c91 Allow autocompletion of fields (#398)
* Allows interactive usage to autocomplete fields

* History add now that PR # is available
2019-02-18 07:53:02 +00:00
Samuel Colvin 27323aa8b2 fix for python 3.8 (#396)
* fix for python 3.8

* history and tweak types in main.py
2019-02-15 18:29:13 +00:00
Yaraslau Zhylko d539bcd87d Fix extra behaviour for multiple inheritance/mix-ins (#394)
* Fix `extra` behaviour for multiple inheritance/mix-ins

* Update HISTORY
2019-02-13 15:40:38 +00:00
Daniel Smith 96e3e74262 Tracking for setting attributes (#389)
fix #378

* Tracking for setting attributes

* Fixes accidental leak of fields

* Allows defaults fields to be recursively set

* Docs and history for skip_defaults

* Mypy fix on calculate keys

* Update pydantic/main.py

Co-Authored-By: dgasmith <dgasmith@icloud.com>

* Update pydantic/main.py

Co-Authored-By: dgasmith <dgasmith@icloud.com>

* Update HISTORY.rst

Co-Authored-By: dgasmith <dgasmith@icloud.com>

* Cleanup pass based off review

* Simplifies constructors based on feedback

* Makes mypy happy with exlicit KeysView

* SetOrKeys and faster key search

* Formats files once more

* add tests for dict, pickle and construct

* fixes for dict, pickle and construct

* correct field_set for extra.ignore

* Fixes format
2019-02-13 15:10:45 +00:00
Samuel Colvin baade9a117 rebuild validator arguments (#388)
* rebuild validator arguments

* cleanup and tests

* update docs
2019-02-13 10:31:36 +00:00
Samuel Colvin 8fa1382beb change ms/s watershed for datetime parsing (#385)
* change ms/s watershed for datetime parsing

* more tests for ms, μs and ns

* fix formatting

* uprev
2019-02-04 22:09:51 +00:00
Samuel Colvin 04391da318 fix for 'missing' error with validate_all or validate_always (#381)
* fix for 'missing' error with validate_all or validate_always

* update HISTORY
2019-02-04 21:57:44 +00:00
Samuel Colvin 9ef401839b add type hints (#373)
* add type hints, fix #372

* fix tests and BaseModel inference

* fix #280

* fix dataclasses and docs

* more typing

* adding hints to fields.py

* type **EVERTHING*

* fix for 3.6

* small speed ups and some typ checks

* correct model.copy

* update history
2019-02-04 21:54:20 +00:00
pyup.io bot a85334682c Scheduled monthly dependency update for February (#382)
* Update flake8 from 3.6.0 to 3.7.4

* Update mypy from 0.650 to 0.660

* Update pycodestyle from 2.4.0 to 2.5.0

* Update pyflakes from 2.0.0 to 2.1.0

* Update pytest from 4.0.2 to 4.2.0

* Update pytest-cov from 2.6.0 to 2.6.1

* fix test linting
2019-02-04 20:31:42 +00:00
Or Carmi 9900c7f00c Refactored extra types to use a single enum (#352)
deprecated `ignore_extra` and `allow_extra` Config fields in favor of `extra`, fix #352

* refaactored extra types to use a single enum

* slightly simplified

* added tests

* fixed most stuff

* docs and some simplifications

* better assert

* changed enum and fixed logic

* trying to capture deprecation warning

* make format

* fixing tests and moving exta logic to __new__

* set_extra tests

* fox benchmarks

* formatting

* updated history

* docs

* added a negative tests

* reverted format changes

* format

* matched casing

* renamed values

* more fixes

* forgot values change

* another one

* weird stuff

* linting issue

* Update pydantic/main.py

Co-Authored-By: liiight <4374581+liiight@users.noreply.github.com>
2019-02-04 13:15:07 +00:00
Stephen Brown II 61e758965c Add multiple_of attribute to constrained numerics (#371)
* Add multiple_of attribute to constrained numerics

* Update HISTORY.rst

* make format

* Change limit_value -> multiple_of
2019-02-03 17:13:27 +00:00
Sebastián Ramírez 725e86a8f0 custom validators in schema (#375)
* Test NoneType directly in Field.include_in_schema and add test for validator

fix #363

* Update History
2019-01-30 10:31:45 +00:00