$54 GRAYBYTE WORDPRESS FILE MANAGER $63

SERVER : premium201.web-hosting.com #1 SMP Wed Mar 26 12:08:09 UTC 2025
SERVER IP : 104.21.15.130 | ADMIN IP 216.73.216.174
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/hc_python/lib/python3.12/site-packages/pydantic/v1/

HOME
Current File : /opt/hc_python/lib/python3.12/site-packages/pydantic/v1//json.py
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'


Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
4 Apr 2025 8.03 AM
root / root
0755
__pycache__
--
4 Apr 2025 8.03 AM
root / root
0755
__init__.py
2.877 KB
4 Apr 2025 8.03 AM
root / root
0644
_hypothesis_plugin.py
14.499 KB
4 Apr 2025 8.03 AM
root / root
0644
annotated_types.py
3.083 KB
4 Apr 2025 8.03 AM
root / root
0644
class_validators.py
14.328 KB
4 Apr 2025 8.03 AM
root / root
0644
color.py
16.449 KB
4 Apr 2025 8.03 AM
root / root
0644
config.py
6.379 KB
4 Apr 2025 8.03 AM
root / root
0644
dataclasses.py
17.746 KB
4 Apr 2025 8.03 AM
root / root
0644
datetime_parse.py
7.543 KB
4 Apr 2025 8.03 AM
root / root
0644
decorator.py
10.097 KB
4 Apr 2025 8.03 AM
root / root
0644
env_settings.py
13.774 KB
4 Apr 2025 8.03 AM
root / root
0644
error_wrappers.py
5.074 KB
4 Apr 2025 8.03 AM
root / root
0644
errors.py
17.311 KB
4 Apr 2025 8.03 AM
root / root
0644
fields.py
49.462 KB
4 Apr 2025 8.03 AM
root / root
0644
generics.py
17.452 KB
4 Apr 2025 8.03 AM
root / root
0644
json.py
3.311 KB
4 Apr 2025 8.03 AM
root / root
0644
main.py
43.497 KB
4 Apr 2025 8.03 AM
root / root
0644
mypy.py
37.865 KB
4 Apr 2025 8.03 AM
root / root
0644
networks.py
21.605 KB
4 Apr 2025 8.03 AM
root / root
0644
parse.py
1.778 KB
4 Apr 2025 8.03 AM
root / root
0644
py.typed
0 KB
4 Apr 2025 8.03 AM
root / root
0644
schema.py
46.641 KB
4 Apr 2025 8.03 AM
root / root
0644
tools.py
2.813 KB
4 Apr 2025 8.03 AM
root / root
0644
types.py
34.624 KB
4 Apr 2025 8.03 AM
root / root
0644
typing.py
18.933 KB
4 Apr 2025 8.03 AM
root / root
0644
utils.py
25.312 KB
4 Apr 2025 8.03 AM
root / root
0644
validators.py
21.48 KB
4 Apr 2025 8.03 AM
root / root
0644
version.py
1.015 KB
4 Apr 2025 8.03 AM
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025 CONTACT ME
Static GIF