mirror of
https://github.com/kennethreitz/pydantic.git
synced 2026-06-05 23:00:18 +00:00
Fix issue with ClassVar parsing (#3403)
* Fix issue with ClassVar parsing * Fix lint error * Simplify test * Fix condition and test
This commit is contained in:
@@ -0,0 +1 @@
|
||||
Fix issue when pydantic fail to parse `typing.ClassVar` string type annotation.
|
||||
+3
-1
@@ -332,7 +332,9 @@ def resolve_annotations(raw_annotations: Dict[str, Type[Any]], module_name: Opti
|
||||
annotations = {}
|
||||
for name, value in raw_annotations.items():
|
||||
if isinstance(value, str):
|
||||
if sys.version_info >= (3, 7):
|
||||
if (3, 10) > sys.version_info >= (3, 9, 8) or sys.version_info >= (3, 10, 1):
|
||||
value = ForwardRef(value, is_argument=False, is_class=True)
|
||||
elif sys.version_info >= (3, 7):
|
||||
value = ForwardRef(value, is_argument=False)
|
||||
else:
|
||||
value = ForwardRef(value)
|
||||
|
||||
@@ -519,3 +519,20 @@ def test_nested_forward_ref():
|
||||
NestedTuple.update_forward_refs()
|
||||
obj = NestedTuple.parse_obj({'x': ('1', {'x': ('2', {'x': ('3', None)})})})
|
||||
assert obj.dict() == {'x': (1, {'x': (2, {'x': (3, None)})})}
|
||||
|
||||
|
||||
@skip_pre_37
|
||||
def test_class_var_as_string(create_module):
|
||||
module = create_module(
|
||||
# language=Python
|
||||
"""
|
||||
from __future__ import annotations
|
||||
from typing import ClassVar
|
||||
from pydantic import BaseModel
|
||||
|
||||
class Model(BaseModel):
|
||||
a: ClassVar[int]
|
||||
"""
|
||||
)
|
||||
|
||||
assert module.Model.__class_vars__ == {'a'}
|
||||
|
||||
Reference in New Issue
Block a user