
    Xh                    V   d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 ddl
mZ ddlZddlZej                  dk\  rddl
mZ nddlmZ ddZd d	Zd!d
Zd"dZd#dZd$dZd%dZd&dZd'dZd(dZd)dZd*dZd+dZd,dZd-dZd.dZ d/dZ!d0dZ"d1dZ#d2dZ$d3dZ%d4dZ&d5d6dZ'y)7ad  Collection of functions for building custom `json_default` functions.

In general functions come in pairs of `use_x_default` and `x_default`, where the former is used
to determine if you should call the latter.

Most `use_x_default` functions also act as a [`TypeGuard`](https://mypy.readthedocs.io/en/stable/type_narrowing.html#user-defined-type-guards).
    )annotationsN)TracebackType)Any)   
   )	TypeGuardc                n    	 t        |       S # t        $ r Y nw xY w	 t        |       S # t        $ r Y yw xY w)zBackup default function for any object type.

    Will attempt to use `str` or `repr`. If both functions error will return
    the string `"__could_not_encode__"`.

    Args:
        obj: object to handle
    __could_not_encode__)str	Exceptionreprobjs    M/var/www/html/myenv/lib/python3.12/site-packages/pythonjsonlogger/defaults.pyunknown_defaultr   %   sF    3x Cy !s   
 	
( 	44c                "    t        | t              S )z8Default check function for `type` objects (aka classes).)
isinstancetyper   s    r   use_type_defaultr   ;   s    c4      c                    | j                   S )zRDefault function for `type` objects.

    Args:
        obj: object to handle
    )__name__r   s    r   type_defaultr   @   s     <<r   c                R    t        j                  |       xr t        | t               S )z.Default check function for dataclass instances)dataclassesis_dataclassr   r   r   s    r   use_dataclass_defaultr   K   s"    ##C(FC1F-FFr   c                ,    t        j                  |       S )zVDefault function for dataclass instances

    Args:
        obj: object to handle
    )r   asdictr   s    r   dataclass_defaultr    P   s     c""r   c                6    t        | t        j                        S )z4Default check function for `datetime.time` instances)r   datetimetimer   s    r   use_time_defaultr$   [       c8==))r   c                "    | j                         S )z\Default function for `datetime.time` instances

    Args:
        obj: object to handle
    	isoformatr   s    r   time_defaultr)   `        ==?r   c                6    t        | t        j                        S )z4Default check function for `datetime.date` instances)r   r"   dater   s    r   use_date_defaultr-   i   r%   r   c                "    | j                         S )z\Default function for `datetime.date` instances

    Args:
        obj: object to handle
    r'   r   s    r   date_defaultr/   n   r*   r   c                6    t        | t        j                        S )z8Default check function for `datetime.datetime` instances)r   r"   r   s    r   use_datetime_defaultr1   w   s    c8,,--r   c                "    | j                         S )z`Default function for `datetime.datetime` instances

    Args:
        obj: object to handle
    r'   r   s    r   datetime_defaultr3   |   r*   r   c                t    t        | t        j                  t        j                  t        j                  f      S )z7Default check function for `datetime` related instances)r   r"   r#   r,   r   s    r   use_datetime_anyr5      s$    cHMM8==(:K:KLMMr   c                "    | j                         S )z_Default function for `datetime` related instances

    Args:
        obj: object to handle
    r'   r   s    r   datetime_anyr7      r*   r   c                "    t        | t              S )zDefault check function for exception instances.

    Exception classes are not treated specially and should be handled by the
    `[use_]type_default` functions.
    )r   BaseExceptionr   s    r   use_exception_defaultr:      s     c=))r   c                8    | j                   j                   d|  S )zVDefault function for exception instances

    Args:
        obj: object to handle
    z: )	__class__r   r   s    r   exception_defaultr=      s      mm$$%Ru--r   c                "    t        | t              S )z%Default check function for tracebacks)r   r   r   s    r   use_traceback_defaultr?      s    c=))r   c                f    dj                  t        j                  |             j                         S )zMDefault function for tracebacks

    Args:
        obj: object to handle
     )join	traceback	format_tbstripr   s    r   traceback_defaultrF      s'     779&&s+,2244r   c                V    t        | t        j                  t        j                  f      S )zWDefault check function for enums.

    Supports both enum classes and enum values.
    )r   enumEnumEnumMetar   s    r   use_enum_defaultrK      s    
 cDIIt}}566r   c                    t        | t        j                        r| j                  S | D cg c]  }|j                   c}S c c}w )zzDefault function for enums.

    Supports both enum classes and enum values.

    Args:
        obj: object to handle
    )r   rH   rI   value)r   es     r   enum_defaultrO      s4     #tyy!yy !AGG!!!s   Ac                6    t        | t        j                        S )z0Default check function for `uuid.UUID` instances)r   uuidUUIDr   s    r   use_uuid_defaultrS      s    c499%%r   c                    t        |       S )zDefault function for `uuid.UUID` instances

    Formats the UUID using "hyphen" format.

    Args:
        obj: object to handle
    )r   r   s    r   uuid_defaultrU      s     s8Or   c                .    t        | t        t        f      S )z Default check function for bytes)r   bytes	bytearrayr   s    r   use_bytes_defaultrY      s    cE9-..r   c                    |r$t        j                  |       j                  d      S t        j                  |       j                  d      S )zDefault function for bytes

    Args:
        obj: object to handle
        url_safe: use URL safe base 64 character set.

    Returns:
        The byte data as a base 64 string.
    utf8)base64urlsafe_b64encodedecode	b64encode)r   url_safes     r   bytes_defaultra      s?     '',33F;;C ''//r   )r   r   returnr   )r   r   rb   zTypeGuard[type])r   r   rb   r   )r   r   rb   bool)rb   zdict[str, Any])r   r   rb   zTypeGuard[datetime.time])r   zdatetime.timerb   r   )r   r   rb   zTypeGuard[datetime.date])r   zdatetime.daterb   r   )r   r   rb   zTypeGuard[datetime.datetime])r   zdatetime.datetimerb   r   )r   r   rb   z<TypeGuard[datetime.time | datetime.date | datetime.datetime])r   z-datetime.time | datetime.date | datetime.daterb   r   )r   r   rb   zTypeGuard[BaseException])r   r9   rb   r   )r   r   rb   zTypeGuard[TracebackType])r   r   rb   r   )r   r   rb   z$TypeGuard[enum.Enum | enum.EnumMeta])r   zenum.Enum | enum.EnumMetarb   zAny | list[Any])r   r   rb   zTypeGuard[uuid.UUID])r   z	uuid.UUIDrb   r   )r   r   rb   zTypeGuard[bytes | bytearray])T)r   zbytes | bytearrayr`   rc   rb   r   )(__doc__
__future__r   r\   r   r"   rH   systypesr   typingr   rC   rQ   version_infor   typing_extensionsr   r   r   r   r    r$   r)   r-   r/   r1   r3   r5   r7   r:   r=   r?   rF   rK   rO   rS   rU   rY   ra    r   r   <module>rl      s    #     
    w +",!
G
#*
*
.
N
*.*
57
"&
/
0r   