wip
This commit is contained in:
@@ -9,31 +9,49 @@ from botocore.exceptions import ClientError
|
||||
logger = Logger(__name__)
|
||||
|
||||
|
||||
def _serialize(v):
|
||||
if isinstance(v, datetime):
|
||||
return v.isoformat()
|
||||
|
||||
if isinstance(v, IPv4Address):
|
||||
return str(v)
|
||||
|
||||
if isinstance(v, (list, tuple)):
|
||||
return [_serialize(x) for x in v]
|
||||
|
||||
if isinstance(v, dict):
|
||||
return {k: _serialize(dv) for k, dv in v.items()}
|
||||
|
||||
return v
|
||||
def _serialize_python_types(obj: Any) -> str | dict | list:
|
||||
match obj:
|
||||
case datetime():
|
||||
return obj.isoformat()
|
||||
case IPv4Address():
|
||||
return str(obj)
|
||||
case list() | tuple():
|
||||
return [_serialize_python_types(v) for v in obj]
|
||||
case dict():
|
||||
return {k: _serialize_python_types(v) for k, v in obj.items()}
|
||||
case _:
|
||||
return obj
|
||||
|
||||
|
||||
def serialize(obj: dict) -> dict:
|
||||
return {k: TypeSerializer().serialize(_serialize(v)) for k, v in obj.items()}
|
||||
serializer = TypeSerializer()
|
||||
return {k: serializer.serialize(_serialize_python_types(v)) for k, v in obj.items()}
|
||||
|
||||
|
||||
def deserialize(obj: dict) -> dict:
|
||||
return {k: TypeDeserializer().deserialize(v) for k, v in obj.items()}
|
||||
deserializer = TypeDeserializer()
|
||||
return {k: deserializer.deserialize(v) for k, v in obj.items()}
|
||||
|
||||
|
||||
def Key(pk: str, sk: str) -> dict[str, str]:
|
||||
def Key(
|
||||
val: str | tuple[str, ...],
|
||||
*,
|
||||
prefix: str | None = None,
|
||||
delimiter: str = '#',
|
||||
) -> str:
|
||||
if not prefix and not isinstance(val, tuple):
|
||||
return val
|
||||
|
||||
if isinstance(val, str):
|
||||
val = (val,)
|
||||
|
||||
if prefix:
|
||||
val = (prefix,) + val
|
||||
|
||||
return delimiter.join(val)
|
||||
|
||||
|
||||
def KeyPair(pk: str, sk: str) -> dict[str, str]:
|
||||
return {
|
||||
'id': pk,
|
||||
'sk': sk,
|
||||
|
||||
@@ -4,7 +4,8 @@ from typing import TYPE_CHECKING, Annotated, Any
|
||||
|
||||
import ftfy
|
||||
from pycpfcnpj import cpfcnpj
|
||||
from pydantic import BaseModel, Field, GetCoreSchemaHandler
|
||||
from pydantic import BaseModel, Field, GetCoreSchemaHandler, GetJsonSchemaHandler
|
||||
from pydantic.json_schema import JsonSchemaValue
|
||||
from pydantic_core import CoreSchema, core_schema
|
||||
from pydantic_extra_types.payment import PaymentCardNumber
|
||||
|
||||
@@ -47,6 +48,14 @@ else:
|
||||
|
||||
return name
|
||||
|
||||
@classmethod
|
||||
def __get_pydantic_json_schema__(
|
||||
cls, core_schema: core_schema.CoreSchema, handler: GetJsonSchemaHandler
|
||||
) -> JsonSchemaValue:
|
||||
field_schema = handler(core_schema)
|
||||
field_schema.update(type='string', format='name')
|
||||
return field_schema
|
||||
|
||||
|
||||
class PaymentCardValidation:
|
||||
"""
|
||||
@@ -145,11 +154,9 @@ if TYPE_CHECKING:
|
||||
CnpjStr = Annotated[str, ...]
|
||||
else:
|
||||
|
||||
class CpfStr(CpfCnpj):
|
||||
...
|
||||
class CpfStr(CpfCnpj): ...
|
||||
|
||||
class CnpjStr(CpfCnpj):
|
||||
...
|
||||
class CnpjStr(CpfCnpj): ...
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
0
layercake/layercake/py.typed
Normal file
0
layercake/layercake/py.typed
Normal file
Reference in New Issue
Block a user