o
    "i                     @  sp  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 dSddZdTddZdUddZdVddZdWddZdXddZdYddZdZd!d"Zd[d$d%Zd\d'd(Zd]d*d+Zd^d-d.Zd_d0d1Zd`d3d4Zdad6d7Zdbd9d:Z dcd<d=Z!ddd?d@Z"dedCdDZ#dfdFdGZ$dgdIdJZ%dhdLdMZ&didjdQdRZ'dS )kad  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)   
   )	TypeGuardobjr   returnstrc                 C  s>   zt | W S  ty   Y nw zt| W S  ty   Y dS 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__)r
   	Exceptionreprr    r   Y/var/www/html/premium_crap/venv/lib/python3.10/site-packages/pythonjsonlogger/defaults.pyunknown_default%   s   	

r   TypeGuard[type]c                 C  
   t | tS )z8Default check function for `type` objects (aka classes).)
isinstancetyper   r   r   r   use_type_default;      
r   r   c                 C  s   | j S )zRDefault function for `type` objects.

    Args:
        obj: object to handle
    )__name__r   r   r   r   type_default@   s   r   boolc                 C  s   t | o
t| t S )z.Default check function for dataclass instances)dataclassesis_dataclassr   r   r   r   r   r   use_dataclass_defaultK      r   dict[str, Any]c                 C  s
   t | S )zVDefault function for dataclass instances

    Args:
        obj: object to handle
    )r   asdictr   r   r   r   dataclass_defaultP      
r!   TypeGuard[datetime.time]c                 C     t | tjS )z4Default check function for `datetime.time` instances)r   datetimetimer   r   r   r   use_time_default[      r'   datetime.timec                 C     |   S )z\Default function for `datetime.time` instances

    Args:
        obj: object to handle
    	isoformatr   r   r   r   time_default`      r-   TypeGuard[datetime.date]c                 C  r$   )z4Default check function for `datetime.date` instances)r   r%   dater   r   r   r   use_date_defaulti   r(   r1   datetime.datec                 C  r*   )z\Default function for `datetime.date` instances

    Args:
        obj: object to handle
    r+   r   r   r   r   date_defaultn   r.   r3   TypeGuard[datetime.datetime]c                 C  s   t | tjS )z8Default check function for `datetime.datetime` instances)r   r%   r   r   r   r   use_datetime_defaultw   r(   r5   datetime.datetimec                 C  r*   )z`Default function for `datetime.datetime` instances

    Args:
        obj: object to handle
    r+   r   r   r   r   datetime_default|   r.   r7   <TypeGuard[datetime.time | datetime.date | datetime.datetime]c                 C  s   t | tjtjtjfS )z7Default check function for `datetime` related instances)r   r%   r&   r0   r   r   r   r   use_datetime_any   r   r9   -datetime.time | datetime.date | datetime.datec                 C  r*   )z_Default function for `datetime` related instances

    Args:
        obj: object to handle
    r+   r   r   r   r   datetime_any   r.   r;   TypeGuard[BaseException]c                 C  r   )zDefault check function for exception instances.

    Exception classes are not treated specially and should be handled by the
    `[use_]type_default` functions.
    )r   BaseExceptionr   r   r   r   use_exception_default   r"   r>   r=   c                 C  s   | j j d|  S )zVDefault function for exception instances

    Args:
        obj: object to handle
    z: )	__class__r   r   r   r   r   exception_default   s   r@   TypeGuard[TracebackType]c                 C  r   )z%Default check function for tracebacks)r   r   r   r   r   r   use_traceback_default   r   rB   r   c                 C  s   d t|  S )zMDefault function for tracebacks

    Args:
        obj: object to handle
     )join	traceback	format_tbstripr   r   r   r   traceback_default   s   rH   $TypeGuard[enum.Enum | enum.EnumMeta]c                 C  s   t | tjtjfS )zWDefault check function for enums.

    Supports both enum classes and enum values.
    )r   enumEnumEnumMetar   r   r   r   use_enum_default   s   rM   enum.Enum | enum.EnumMetaAny | list[Any]c                 C  s    t | tjr	| jS dd | D S )zzDefault function for enums.

    Supports both enum classes and enum values.

    Args:
        obj: object to handle
    c                 S  s   g | ]}|j qS r   )value).0er   r   r   
<listcomp>   s    z enum_default.<locals>.<listcomp>)r   rJ   rK   rP   r   r   r   r   enum_default   s   rT   TypeGuard[uuid.UUID]c                 C  r$   )z0Default check function for `uuid.UUID` instances)r   uuidUUIDr   r   r   r   use_uuid_default   r(   rX   	uuid.UUIDc                 C  s   t | S )zDefault function for `uuid.UUID` instances

    Formats the UUID using "hyphen" format.

    Args:
        obj: object to handle
    )r
   r   r   r   r   uuid_default   s   rZ   TypeGuard[bytes | bytearray]c                 C  s   t | ttfS )z Default check function for bytes)r   bytes	bytearrayr   r   r   r   use_bytes_default   s   r^   Tbytes | bytearrayurl_safec                 C  s$   |r
t | dS t | 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   r`   r   r   r   bytes_default   s   
rf   )r   r   r	   r
   )r   r   r	   r   )r   r   r	   r
   )r   r   r	   r   )r	   r   )r   r   r	   r#   )r   r)   r	   r
   )r   r   r	   r/   )r   r2   r	   r
   )r   r   r	   r4   )r   r6   r	   r
   )r   r   r	   r8   )r   r:   r	   r
   )r   r   r	   r<   )r   r=   r	   r
   )r   r   r	   rA   )r   r   r	   r
   )r   r   r	   rI   )r   rN   r	   rO   )r   r   r	   rU   )r   rY   r	   r
   )r   r   r	   r[   )T)r   r_   r`   r   r	   r
   )(__doc__
__future__r   rb   r   r%   rJ   systypesr   typingr   rE   rV   version_infor   typing_extensionsr   r   r   r   r!   r'   r-   r1   r3   r5   r7   r9   r;   r>   r@   rB   rH   rM   rT   rX   rZ   r^   rf   r   r   r   r   <module>   sJ    

	






	

	

	


	
	





