SILENT KILLERPanel

Current Path: > > opt > cloudlinux > venv > lib > > python3.11 > site-packages > pydantic > v1 >


Operation   : Linux host59.registrar-servers.com 4.18.0-513.18.1.lve.2.el8.x86_64 #1 SMP Sat Mar 30 15:36:11 UTC 2024 x86_64
Software     : Apache
Server IP    : 198.54.126.42 | Your IP: 216.73.216.135
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //opt/cloudlinux/venv/lib//python3.11/site-packages/pydantic/v1/

NameTypeSizeLast ModifiedActions
__pycache__ Directory - -
__init__.py File 2771 bytes April 17 2024 13:36:23.
_hypothesis_plugin.py File 14844 bytes April 17 2024 13:36:23.
annotated_types.py File 3124 bytes April 17 2024 13:36:23.
class_validators.py File 14595 bytes April 17 2024 13:36:23.
color.py File 16811 bytes April 17 2024 13:36:23.
config.py File 6477 bytes April 17 2024 13:36:23.
dataclasses.py File 17515 bytes April 17 2024 13:36:23.
datetime_parse.py File 7714 bytes April 17 2024 13:36:23.
decorator.py File 10263 bytes April 17 2024 13:36:23.
env_settings.py File 14039 bytes April 17 2024 13:36:23.
error_wrappers.py File 5142 bytes April 17 2024 13:36:23.
errors.py File 17693 bytes April 17 2024 13:36:23.
fields.py File 50488 bytes April 17 2024 13:36:23.
generics.py File 17805 bytes April 17 2024 13:36:23.
json.py File 3346 bytes April 17 2024 13:36:23.
main.py File 44378 bytes April 17 2024 13:36:23.
mypy.py File 38745 bytes April 17 2024 13:36:23.
networks.py File 22059 bytes April 17 2024 13:36:23.
parse.py File 1810 bytes April 17 2024 13:36:23.
py.typed File 0 bytes April 17 2024 13:36:23.
schema.py File 47615 bytes April 17 2024 13:36:23.
tools.py File 2826 bytes April 17 2024 13:36:23.
types.py File 35380 bytes April 17 2024 13:36:23.
typing.py File 18996 bytes April 17 2024 13:36:23.
utils.py File 25809 bytes April 17 2024 13:36:23.
validators.py File 21887 bytes April 17 2024 13:36:23.
version.py File 1039 bytes April 17 2024 13:36:23.

Reading File: //opt/cloudlinux/venv/lib//python3.11/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 .color import Color
from .networks import NameEmail
from .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 .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'

SILENT KILLER Tool