o
     e=&                     @   s   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	m
Z
 d dlmZ d dlmZ d dlmZmZmZ 	 G dd	 d	ZdS )
    N)settings)resolve)timezone)API_LOGGER_SIGNAL)LOGGER_THREAD)get_headersget_client_ipmask_sensitive_datac                   @   s   e Zd Zdd Zdd ZdS )APILoggerMiddlewarec                 C   s  || _ d| _ttdrtj| _d| _ttdrtj| _d| _ttdr,tjdv r,tj| _g | _ttdrFttjtu sBttjt	u rFtj| _g | _
ttdr`ttj
tu s\ttj
t	u r`tj
| _
g | _ttd	rzttjtu svttjt	u rztj| _g | _ttd
rttjtu sttjt	u rtj| _d| _d | _ttdrtj| _| jrttdrtj| _d | _ttdrtjdd\}}t|}t||| _d| _ttdrttjtu rtj| _d| _ttdrttjtu rtj| _d S d S d S )NFDRF_API_LOGGER_DATABASEDRF_API_LOGGER_SIGNALABSOLUTEDRF_API_LOGGER_PATH_TYPE)r   RAW_URI	FULL_PATHDRF_API_LOGGER_SKIP_URL_NAMEDRF_API_LOGGER_SKIP_NAMESPACEDRF_API_LOGGER_METHODSDRF_API_LOGGER_STATUS_CODESDRF_API_LOGGER_ENABLE_TRACING%DRF_API_LOGGER_TRACING_ID_HEADER_NAMEDRF_API_LOGGER_TRACING_FUNC.   $DRF_API_LOGGER_MAX_REQUEST_BODY_SIZE%DRF_API_LOGGER_MAX_RESPONSE_BODY_SIZE)get_responser   hasattrr   r   r   r   typetuplelistr   r   r   r   r   tracing_func_namer   rsplit	importlibimport_modulegetattrr   intr   )selfr   mod_name	func_namemod r,   b/var/www/html/venv/lib/python3.10/site-packages/drf_api_logger/middleware/api_logger_middleware.py__init__   s   












zAPILoggerMiddleware.__init__c                 C   s<  | j s| jrt|jj}t|jj}|dkr| |S || jv r&| |S || jv r0| |S t		 }t
|d}|j}d}z|jrHt|jnd}| jdkrZt|| jkrZ	 d}W n   Y d }| jr| jrn|| j}|s	 | jry|  }ntt }||_| |}	| jr|	j| jvr|	S t| jdkr|| jvr|	S |	ddv r|	ddkrd	}
n)|	dd
krd}
nt|	ddrd}
nt|	j t!u rt|	j " }
nt|	j }
| j#dkrt|
| j#krd}
| j$dkr|% }n| j$dkr|& }n| j$dkr	|' }n|% }t(t)|ddt)|t)||t*|t)|
|	jt		 | t+, d	}| j r}t-r}|. }|drHtj/|d dddnd|d< |rc|dr_tj/|d dddnd|d< |drstj/|d dddnd|d< t-j0|d | jr|r|1d|i t2j3di | |	S |	S | |}	|	S )Nadmin)request r   r   zcontent-type)zapplication/jsonzapplication/vnd.api+jsonapplication/gzipapplication/octet-streamr2   z** GZIP Archive **r3   z** Binary File **	streamingFz** Streaming **r   r   r   T)mask_api_parameters)	apiheadersbodymethodclient_ip_addressresponsestatus_codeexecution_timeadded_onr7      )indentensure_asciir8   r;   )data
tracing_idr,   )4r   r   r   	path_infourl_name	namespacer   r   r   timer   r9   r8   jsonloadsr   sys	getsizeofr   r   getr"   struuiduuid4rC   r   r<   lenr   r&   r   contentbytesdecoder   r   build_absolute_uriget_full_pathget_raw_uridictr	   r   r   nowr   copydumpsput_log_dataupdater   listen)r(   r0   rE   rF   
start_timer7   r9   request_datarC   r;   response_bodyr6   rB   dr,   r,   r-   __call__V   s   
















(((
zAPILoggerMiddleware.__call__N)__name__
__module____qualname__r.   rb   r,   r,   r,   r-   r
      s    @r
   )r$   rH   rJ   rG   rN   django.confr   django.urlsr   django.utilsr   drf_api_loggerr   .drf_api_logger.start_logger_when_server_startsr   drf_api_logger.utilsr   r   r	   r
   r,   r,   r,   r-   <module>   s    