mirror of
https://github.com/kennethreitz/pydantic.git
synced 2026-06-05 23:00:18 +00:00
594effa279
* working on core schema generation * adapting main.py * getting tests to run * fix tests * disable pyright, fix mypy * moving to class-based model generation * working on validators * change how models are created * start fixing test_main.py * fixing mypy * SelfType * recursive models working, more tests fixed * fix tests on <3.10 * get docs build to pass * starting to cleanup types.py * starting works on custom types * working on using annotated-types * using annoated types for constraints * lots of cleanup, fixing network tests * network tests passing 🎉 * working on types * working on types and cleanup * fixing UUID type, restructing again * more types and newer pydantic-core * working on Iterable * more test_types tests * support newer pydantic-core, fixing more test_types.py * working through more test_types.py * test_types.py at last passing locally 🎉 * fixing more tests in test_types.py * fix datetime_parse tests and linting * get tests running again, rename to test_datetime.py * renaming internal modules * working through mypy errors * fixing mypy * refactoring _generate_schema.py * test_main.py passing * uprev deps * fix conftest and linting? * importing Annotated * ltining * import Annotated from typing_extensions * fixing 3.7 compatibility * fixing tests on 3.9 * fix linting * fixing SecretField and 3.9 tests * customising get_type_hints * ignore warnings on 3.11 * spliting repr out of utils * removing unused bits of _repr, fix tests for 3.7 * more cleanup, removing many type aliases * clean up repr * support namedtuples and typeddicts * test is_union * removing errors, uprev pydantic-core * fix tests on 3.8 * fixing private attributes and model_post_init * renaming and cleanup * remove unnecessary PydanticMetadata inheritance * fixing forward refs and mypy tests * fix signatures, change how xfail works * revert mypy tests to 3.7 syntax * correct model title * try to fix tests * fixing ClassVar forward refs * uprev pydantic-core, new error format * add "force" argument to model_rebuild * Apply suggestions from code review Suggestions from @tiangolo and @hramezani 🙏 Co-authored-by: Hasan Ramezani <hasan.r67@gmail.com> Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com> * more suggestions from @tiangolo * extra -> json_schema_extra on Field Co-authored-by: Hasan Ramezani <hasan.r67@gmail.com> Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
67 lines
1.9 KiB
Python
67 lines
1.9 KiB
Python
import typing
|
|
from collections import namedtuple
|
|
from typing import Callable, NamedTuple
|
|
|
|
import pytest
|
|
from typing_extensions import Literal, get_origin
|
|
|
|
from pydantic import Field # noqa: F401
|
|
from pydantic._internal._typing_extra import is_namedtuple, is_none_type, origin_is_union
|
|
|
|
try:
|
|
from typing import TypedDict as typing_TypedDict
|
|
except ImportError:
|
|
typing_TypedDict = None
|
|
|
|
try:
|
|
from typing_extensions import TypedDict as typing_extensions_TypedDict
|
|
except ImportError:
|
|
typing_extensions_TypedDict = None
|
|
|
|
|
|
try:
|
|
from mypy_extensions import TypedDict as mypy_extensions_TypedDict
|
|
except ImportError:
|
|
mypy_extensions_TypedDict = None
|
|
|
|
ALL_TYPEDDICT_KINDS = (typing_TypedDict, typing_extensions_TypedDict, mypy_extensions_TypedDict)
|
|
|
|
|
|
def test_is_namedtuple():
|
|
class Employee(NamedTuple):
|
|
name: str
|
|
id: int = 3
|
|
|
|
assert is_namedtuple(namedtuple('Point', 'x y')) is True
|
|
assert is_namedtuple(Employee) is True
|
|
assert is_namedtuple(NamedTuple('Employee', [('name', str), ('id', int)])) is True
|
|
|
|
class Other(tuple):
|
|
name: str
|
|
id: int
|
|
|
|
assert is_namedtuple(Other) is False
|
|
|
|
|
|
def test_is_none_type():
|
|
assert is_none_type(Literal[None]) is True
|
|
assert is_none_type(None) is True
|
|
assert is_none_type(type(None)) is True
|
|
assert is_none_type(6) is False
|
|
assert is_none_type({}) is False
|
|
# WARNING: It's important to test `typing.Callable` not
|
|
# `collections.abc.Callable` (even with python >= 3.9) as they behave
|
|
# differently
|
|
assert is_none_type(Callable) is False
|
|
|
|
|
|
@pytest.mark.parametrize('union_gen', [lambda: typing.Union[int, str], lambda: int | str])
|
|
def test_is_union(union_gen):
|
|
try:
|
|
union = union_gen()
|
|
except TypeError:
|
|
pytest.skip('not supported in this python version')
|
|
else:
|
|
origin = get_origin(union)
|
|
assert origin_is_union(origin)
|