Skip to content

Commit 08e117a

Browse files
committed
[FIX] pydantic: Makes issubclass on BaseModel wrking with generics
1 parent 25dd584 commit 08e117a

2 files changed

Lines changed: 18 additions & 2 deletions

File tree

pydantic/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ def __subclasscheck__(cls, subclass): # noqa: B902
151151
"""Implement issubclass(sub, cls)."""
152152
if hasattr(subclass, "_original_cls"):
153153
return cls.__subclasscheck__(subclass._original_cls)
154-
return super().__subclasscheck__(subclass)
154+
return isinstance(subclass, type) and super().__subclasscheck__(subclass)
155155

156156

157157
class BaseModel(pydantic.BaseModel, metaclass=ExtendablePydanticModelMeta):

pydantic/tests/test_pydantic.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright 2021 ACSONE SA/NV
22
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html)
33

4-
from typing import List
4+
from typing import List, Literal
55

66
import pydantic
77

@@ -154,3 +154,19 @@ class ExtendedLocation(Location, extends=Location):
154154
inst2 = ExtendedLocation.construct()
155155
self.assertEqual(inst1.__class__, inst2.__class__)
156156
self.assertEqual(inst1.schema(), inst2.schema())
157+
158+
def test_issubclass(self):
159+
"""In this test we check that issublass is lenient when used with
160+
GenericAlias
161+
"""
162+
self.assertTrue()
163+
self.assertFalse(issubclass(Literal["test"], models.BaseModel))
164+
self.assertFalse(issubclass(Literal, models.BaseModel))
165+
166+
class Location(models.BaseModel):
167+
kind: Literal["view", "bin"]
168+
my_list: List[str]
169+
170+
self._build_pydantic_classes(Location)
171+
schema = Location.schema()
172+
self.assertTrue(schema)

0 commit comments

Comments
 (0)