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 )zÑBackup 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   )z¦Default 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 )z…Default 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 )z·Default 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    

	






	

	

	


	
	





