Skip to content

Commit

Permalink
fix: type union
Browse files Browse the repository at this point in the history
  • Loading branch information
JeanArhancet committed Jul 30, 2023
1 parent cff5385 commit 5fe10f4
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
2 changes: 2 additions & 0 deletions pydantic/_internal/_generate_schema.py
Expand Up @@ -1094,6 +1094,8 @@ def _subclass_schema(self, type_: Any) -> core_schema.CoreSchema:
)
else:
return self._type_schema()
elif isinstance(type_param, typing._UnionGenericAlias): # type: ignore
return self._type_schema()
else:
return core_schema.is_subclass_schema(type_param)

Expand Down
14 changes: 13 additions & 1 deletion tests/test_edge_cases.py
Expand Up @@ -1395,10 +1395,11 @@ class Model(BaseModel):
g: Sequence[Type[FooBar]] = [FooBar]
h: Union[Type[FooBar], Sequence[Type[FooBar]]] = FooBar
i: Union[Type[FooBar], Sequence[Type[FooBar]]] = [FooBar]
j: Type[Union[FooBar, Sequence]] = FooBar

model_config = dict(arbitrary_types_allowed=True)

assert Model.model_fields.keys() == set('abcdefghi')
assert Model.model_fields.keys() == set('abcdefghij')


def test_assign_type():
Expand Down Expand Up @@ -2580,3 +2581,14 @@ class Model(BaseModel):
m = Model(value=data, value_types_reversed=data)
assert m.model_dump() == {'value': data, 'value_types_reversed': data_reversed}
assert m.model_dump_json() == f'{{"value":{json_value},"value_types_reversed":{json_value_reversed}}}'


def test_type_union():
class Model(BaseModel):
a: Type[Union[str, bytes]]
b: Type[Union[Any, str]]

m = Model(a=bytes, b=int)
assert m.model_dump() == {'a': bytes, 'b': int}
assert m.a == bytes
assert m.b == int

0 comments on commit 5fe10f4

Please sign in to comment.