opt
/
hc_python
/
lib
/
python3.12
/
site-packages
/
pydantic
/
v1
/
Go to Home Directory
+
Upload
Create File
root@0UT1S:~$
Execute
By Order of Mr.0UT1S
[DIR] ..
N/A
[DIR] __pycache__
N/A
__init__.py
2.88 KB
Rename
Delete
_hypothesis_plugin.py
14.50 KB
Rename
Delete
annotated_types.py
3.08 KB
Rename
Delete
class_validators.py
14.33 KB
Rename
Delete
color.py
16.45 KB
Rename
Delete
config.py
6.38 KB
Rename
Delete
dataclasses.py
17.75 KB
Rename
Delete
datetime_parse.py
7.54 KB
Rename
Delete
decorator.py
10.10 KB
Rename
Delete
env_settings.py
13.77 KB
Rename
Delete
error_wrappers.py
5.07 KB
Rename
Delete
errors.py
17.31 KB
Rename
Delete
fields.py
49.46 KB
Rename
Delete
generics.py
17.45 KB
Rename
Delete
json.py
3.31 KB
Rename
Delete
main.py
43.50 KB
Rename
Delete
mypy.py
37.87 KB
Rename
Delete
networks.py
21.61 KB
Rename
Delete
parse.py
1.78 KB
Rename
Delete
py.typed
0 bytes
Rename
Delete
schema.py
46.64 KB
Rename
Delete
tools.py
2.81 KB
Rename
Delete
types.py
34.62 KB
Rename
Delete
typing.py
18.93 KB
Rename
Delete
utils.py
25.31 KB
Rename
Delete
validators.py
21.48 KB
Rename
Delete
version.py
1.01 KB
Rename
Delete
import datetime from collections import deque from decimal import Decimal from enum import Enum from ipaddress import IPv4Address, IPv4Interface, IPv4Network, IPv6Address, IPv6Interface, IPv6Network from pathlib import Path from re import Pattern from types import GeneratorType from typing import Any, Callable, Dict, Type, Union from uuid import UUID from pydantic.v1.color import Color from pydantic.v1.networks import NameEmail from pydantic.v1.types import SecretBytes, SecretStr __all__ = 'pydantic_encoder', 'custom_pydantic_encoder', 'timedelta_isoformat' def isoformat(o: Union[datetime.date, datetime.time]) -> str: return o.isoformat() def decimal_encoder(dec_value: Decimal) -> Union[int, float]: """ Encodes a Decimal as int of there's no exponent, otherwise float This is useful when we use ConstrainedDecimal to represent Numeric(x,0) where a integer (but not int typed) is used. Encoding this as a float results in failed round-tripping between encode and parse. Our Id type is a prime example of this. >>> decimal_encoder(Decimal("1.0")) 1.0 >>> decimal_encoder(Decimal("1")) 1 """ if dec_value.as_tuple().exponent >= 0: return int(dec_value) else: return float(dec_value) ENCODERS_BY_TYPE: Dict[Type[Any], Callable[[Any], Any]] = { bytes: lambda o: o.decode(), Color: str, datetime.date: isoformat, datetime.datetime: isoformat, datetime.time: isoformat, datetime.timedelta: lambda td: td.total_seconds(), Decimal: decimal_encoder, Enum: lambda o: o.value, frozenset: list, deque: list, GeneratorType: list, IPv4Address: str, IPv4Interface: str, IPv4Network: str, IPv6Address: str, IPv6Interface: str, IPv6Network: str, NameEmail: str, Path: str, Pattern: lambda o: o.pattern, SecretBytes: str, SecretStr: str, set: list, UUID: str, } def pydantic_encoder(obj: Any) -> Any: from dataclasses import asdict, is_dataclass from pydantic.v1.main import BaseModel if isinstance(obj, BaseModel): return obj.dict() elif is_dataclass(obj): return asdict(obj) # Check the class type and its superclasses for a matching encoder for base in obj.__class__.__mro__[:-1]: try: encoder = ENCODERS_BY_TYPE[base] except KeyError: continue return encoder(obj) else: # We have exited the for loop without finding a suitable encoder raise TypeError(f"Object of type '{obj.__class__.__name__}' is not JSON serializable") def custom_pydantic_encoder(type_encoders: Dict[Any, Callable[[Type[Any]], Any]], obj: Any) -> Any: # Check the class type and its superclasses for a matching encoder for base in obj.__class__.__mro__[:-1]: try: encoder = type_encoders[base] except KeyError: continue return encoder(obj) else: # We have exited the for loop without finding a suitable encoder return pydantic_encoder(obj) def timedelta_isoformat(td: datetime.timedelta) -> str: """ ISO 8601 encoding for Python timedelta object. """ minutes, seconds = divmod(td.seconds, 60) hours, minutes = divmod(minutes, 60) return f'{"-" if td.days < 0 else ""}P{abs(td.days)}DT{hours:d}H{minutes:d}M{seconds:d}.{td.microseconds:06d}S'
Save