Files
kittycad.py/kittycad/models/base64data.py
Jess Frazelle bf0710f0e6 upgrade pydantic (#266)
* upgrade pydantic

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* update other deps

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* update other deps

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* ruff

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* bump more deps

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* update

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* format

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* bump

Signed-off-by: Jess Frazelle <github@jessfraz.com>

---------

Signed-off-by: Jess Frazelle <github@jessfraz.com>
2024-09-10 12:52:57 -07:00

33 lines
893 B
Python

import base64
from typing import Any, Type
from pydantic import GetCoreSchemaHandler
from pydantic_core import core_schema
class Base64Data(bytes):
@classmethod
def __get_pydantic_core_schema__(
cls, source: Type[Any], handler: GetCoreSchemaHandler
) -> core_schema.CoreSchema:
return core_schema.no_info_after_validator_function(
cls.validate,
core_schema.union_schema(
[
core_schema.str_schema(),
core_schema.bytes_schema(),
]
),
serialization=core_schema.plain_serializer_function_ser_schema(
cls.serialize
),
)
@classmethod
def validate(cls, v):
return base64.urlsafe_b64decode(v.strip("=") + "===")
@classmethod
def serialize(cls, v: "Base64Data") -> bytes:
return v