mirror of
https://github.com/kennethreitz/pydantic.git
synced 2026-06-05 23:00:18 +00:00
Prevent subclasses of bytes being converted to bytes (#3707)
* adding a test * fix and add change description
This commit is contained in:
@@ -0,0 +1 @@
|
||||
Prevent subclasses of bytes being converted to bytes
|
||||
@@ -76,7 +76,7 @@ def strict_str_validator(v: Any) -> Union[str]:
|
||||
raise errors.StrError()
|
||||
|
||||
|
||||
def bytes_validator(v: Any) -> bytes:
|
||||
def bytes_validator(v: Any) -> Union[bytes]:
|
||||
if isinstance(v, bytes):
|
||||
return v
|
||||
elif isinstance(v, bytearray):
|
||||
|
||||
@@ -1906,3 +1906,29 @@ def test_arbitrary_types_allowed_custom_eq():
|
||||
arbitrary_types_allowed = True
|
||||
|
||||
assert Model().x == Foo()
|
||||
|
||||
|
||||
def test_bytes_subclass():
|
||||
class MyModel(BaseModel):
|
||||
my_bytes: bytes
|
||||
|
||||
class BytesSubclass(bytes):
|
||||
def __new__(cls, data: bytes):
|
||||
self = bytes.__new__(cls, data)
|
||||
return self
|
||||
|
||||
m = MyModel(my_bytes=BytesSubclass(b'foobar'))
|
||||
assert m.my_bytes.__class__ == BytesSubclass
|
||||
|
||||
|
||||
def test_int_subclass():
|
||||
class MyModel(BaseModel):
|
||||
my_int: int
|
||||
|
||||
class IntSubclass(int):
|
||||
def __new__(cls, data: int):
|
||||
self = int.__new__(cls, data)
|
||||
return self
|
||||
|
||||
m = MyModel(my_int=IntSubclass(123))
|
||||
assert m.my_int.__class__ == IntSubclass
|
||||
|
||||
Reference in New Issue
Block a user