
    XhE                        d Z ddlmZ ddlZddlZddlmZmZmZm	Z	 ddl
Z
ddlmZ ddlmZ  G d d	ej                        Z G d
 dej"                        ZddZy)zJSON formatter using the standard library's `json` for encoding.

Module contains the `JsonFormatter` and a custom `JsonEncoder` which supports a greater
variety of types.
    )annotationsN)AnyCallableOptionalUnion   )core)defaultsc                  ,     e Zd ZdZd fdZddZ xZS )JsonEncoderzkA custom encoder extending [json.JSONEncoder](https://docs.python.org/3/library/json.html#json.JSONEncoder)c                   t        j                  |      r| j                  |      S t        j                  |      rt        j                  |      S t        j
                  |      rt        j                  |      S t        j                  |      rt        j                  |      S t        j                  |      rt        j                  |      S t        j                  |      rt        j                  |      S t        j                  |      rt        j                  |      S 	 t        | A  |      S # t"        $ r t        j$                  |      cY S w xY w)N)duse_datetime_anyformat_datetime_objuse_exception_defaultexception_defaultuse_traceback_defaulttraceback_defaultuse_enum_defaultenum_defaultuse_bytes_defaultbytes_defaultuse_dataclass_defaultdataclass_defaultuse_type_defaulttype_defaultsuperdefault	TypeErrorunknown_default)selfo	__class__s     I/var/www/html/myenv/lib/python3.12/site-packages/pythonjsonlogger/json.pyr   zJsonEncoder.default   s
   a ++A..""1%&&q))""1%&&q))a >>!$$q!??1%%""1%&&q))a >>!$$	(7?1%% 	($$Q''	(s   %D4 4EEc                ,    t        j                  |      S )zFormat datetime objects found in `self.default`

        This allows subclasses to change the datetime format without understanding the
        internals of the default method.
        )r   datetime_any)r!   r"   s     r$   r   zJsonEncoder.format_datetime_obj7   s     ~~a      )r"   r   returnr   )r"   z1datetime.time | datetime.date | datetime.datetimer(   str)__name__
__module____qualname____doc__r   r   __classcell__r#   s   @r$   r   r      s    u(6!r'   r   c                  d     e Zd ZdZddej
                  ddd	 	 	 	 	 	 	 	 	 	 	 d fdZddZ xZS )	JsonFormatterznJSON formatter using the standard library's [`json`](https://docs.python.org/3/library/json.html) for encodingNT)json_defaultjson_encoderjson_serializerjson_indentjson_ensure_asciic               "   t        |   |i | t        j                  |      | _        t        j                  |      | _        t        j                  |      | _        || _        || _        | j
                  s| j                  st        | _        y)a  
        Args:
            args: see [BaseJsonFormatter][pythonjsonlogger.core.BaseJsonFormatter]
            json_default: a function for encoding non-standard objects
            json_encoder: custom JSON encoder
            json_serializer: a [`json.dumps`](https://docs.python.org/3/library/json.html#json.dumps)-compatible callable
                that will be used to serialize the log record.
            json_indent: indent parameter for the `json_serializer`
            json_ensure_ascii: `ensure_ascii` parameter for the `json_serializer`
            kwargs: see [BaseJsonFormatter][pythonjsonlogger.core.BaseJsonFormatter]
        N)
r   __init__r	   str_to_objectr2   r3   r4   r5   r6   r   )	r!   r2   r3   r4   r5   r6   argskwargsr#   s	           r$   r8   zJsonFormatter.__init__C   s|    * 	$)&) ..|< ..|<#11/B&!2  ):): +Dr'   c                ~    | j                  || j                  | j                  | j                  | j                        S )z(Returns a json string of the log record.)r   clsindentensure_ascii)r4   r2   r3   r5   r6   )r!   
log_records     r$   jsonify_log_recordz JsonFormatter.jsonify_log_recordc   sA    ##%%!!##// $ 
 	
r'   )r2   core.OptionalCallableOrStrr3   rB   r4   zUnion[Callable, str]r5   zOptional[Union[int, str]]r6   boolr(   None)r@   zcore.LogRecordr(   r)   )	r*   r+   r,   r-   jsondumpsr8   rA   r.   r/   s   @r$   r1   r1   @   sb    x
 483704

15"& 1 1	
 . /   
@
r'   r1   c                    | dk(  r*t        j                  dt               t        j                  S t        dt         d|        )NRESERVED_ATTRSz6RESERVED_ATTRS has been moved to pythonjsonlogger.corezmodule z has no attribute )warningswarnDeprecationWarningr	   rH   AttributeErrorr*   )names    r$   __getattr__rN   p   sD    D	
 """
78*,>tfE
FFr'   )rM   r)   )r-   
__future__r   datetimerE   typingr   r   r   r   rI    r	   r
   r   JSONEncoderr   BaseJsonFormatterr1   rN    r'   r$   <module>rV      sT    #   1 1   
$!$"" $!N+
D** +
`Gr'   