* 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>
33 lines
893 B
Python
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
|