U
    ~fh                     @  s  d dl m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	m
Z
 d dlmZmZ d dlmZmZ G dd deejZG d	d
 d
eejZG dd deejZG dd deejZdZdddddddddg	ZdddgZdddgZdd d!gZee	jd"Zed#Zed$Z ed%Z!ed&Z"ed'Z#ej$d(ej$d(ej%d)ej&d*ej'd+ej(d,ej)d-iZ*d.d/d0d1d2d3Z+d4d4d5d6d7Z,d.d/d0d1d8d9Z-d.d4d0d:d;d<Z.G d=d> d>Z/dS )?    )annotationsN)Any)UuidRepresentation	json_util)JSONOptions_truncate_documents)ConnectionCheckOutFailedReasonConnectionClosedReasonc                   @  s   e Zd ZdZdZdZdS )_CommandStatusMessagezCommand startedzCommand succeededzCommand failedN)__name__
__module____qualname__STARTED	SUCCEEDEDFAILED r   r   2/tmp/pip-unpacked-wheel-36gvocj8/pymongo/logger.pyr
      s   r
   c                   @  s   e Zd ZdZdZdZdZdS )_ServerSelectionStatusMessagezServer selection startedzServer selection succeededzServer selection failedz/Waiting for suitable server to become availableN)r   r   r   r   r   r   ZWAITINGr   r   r   r   r   !   s   r   c                   @  s8   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdS )_ConnectionStatusMessagezConnection pool createdzConnection pool readyzConnection pool closedzConnection pool clearedzConnection createdzConnection readyzConnection closedzConnection checkout startedzConnection checked outzConnection checkout failedzConnection checked inN)r   r   r   ZPOOL_CREATEDZ
POOL_READYPOOL_CLOSEDZPOOL_CLEAREDZCONN_CREATEDZ
CONN_READYZCONN_CLOSEDZCHECKOUT_STARTEDZCHECKOUT_SUCCEEDEDZCHECKOUT_FAILEDZ	CHECKEDINr   r   r   r   r   (   s   r   c                   @  s,   e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
_SDAMStatusMessagezStarting topology monitoringzStopped topology monitoringzStarting server monitoringzStopped server monitoringzTopology description changedzServer heartbeat startedzServer heartbeat succeededzServer heartbeat failedN)r   r   r   ZSTART_TOPOLOGYZSTOP_TOPOLOGYZSTART_SERVERZSTOP_SERVERZTOPOLOGY_CHANGEZHEARTBEAT_STARTZHEARTBEAT_SUCCESSZHEARTBEAT_FAILr   r   r   r   r   8   s   r     ZauthenticateZ	saslStartZsaslContinueZgetnonceZ
createUserZ
updateUserZcopydbgetnonceZcopydbsaslstartZcopydbZhelloZismasterZisMastercodeZcodeNameZerrorLabelscommandZreplyfailure)Zuuid_representationzpymongo.commandzpymongo.connectionzpymongo.serverSelectionzpymongo.clientzpymongo.topologyzConnection pool was closedzConnection pool was stalez,An error occurred while using the connectionz<An error occurred while trying to establish a new connectionzConnection was idle too longz)Connection exceeded the specified timeoutzlogging.Loggerr   None)loggerfieldsreturnc                 K  s   |  tf | d S N)debug
LogMessager   r   r   r   r   
_debug_logc   s    r#   str)reasonr   c                 C  s   t | | S r   )!_VERBOSE_CONNECTION_ERROR_REASONSget)r%   r   r   r    _verbose_connection_error_reasong   s    r(   c                 K  s   |  tf | d S r   )infor!   r"   r   r   r   	_info_logk   s    r*   )r   messager   c                 C  s,   |  tjr| | ntj|tdd d S )N   )
stacklevel)isEnabledForloggingINFOr)   warningswarnUserWarning)r   r+   r   r   r   _log_or_warno   s    r4   c                   @  sJ   e Zd ZdZddddZdddd	Zdd
dddZddddZdS )r!   _kwargs	_redactedr   )kwargsc                 K  s   || _ d| _d S )NFr5   )selfr8   r   r   r   __init__z   s    zLogMessage.__init__r$   )r   c                 C  s"   |    dtj| jtdd d S )Nz%sc                 S  s   |   S r   __repr__or   r   r   <lambda>       z$LogMessage.__str__.<locals>.<lambda>Zjson_optionsdefault)_redactr   dumpsr6   _JSON_OPTIONS)r9   r   r   r   __str__~   s      zLogMessage.__str__bool)doc_namer   c                 C  sR   | j ddpd| j | k}d| j ko2| j d tk}| j dd tkoH|}|pP|S )NZspeculative_authenticateFZspeculativeAuthenticateZcommandName)r6   pop_SENSITIVE_COMMANDSr'   _HELLO_COMMANDS)r9   rH   Zis_speculative_authenticateZis_sensitive_commandZis_sensitive_hellor   r   r   _is_sensitive   s    zLogMessage._is_sensitiver   c                 C  sP  | j r
d S dd | j D | _d| jkrRt| jd drR| jd  d | jd< d| jkrpt| jd | jd< ttdt	}|dk rt	}| j
d	d
}tD ]}| j|}|r|dkr|rdd | D }|dkr| |rti }n"t||d }tj|tdd d}t||kr:| d | ddd }|| j|< qd| _ d S )Nc                 S  s   i | ]\}}|d k	r||qS r   r   .0kvr   r   r   
<dictcomp>   s       z&LogMessage._redact.<locals>.<dictcomp>Z
durationMStotal_secondsr   Z	serviceIdZMONGOB_LOG_MAX_DOCUMENT_LENGTHr   ZisServerSideErrorFr   c                 S  s   i | ]\}}|t kr||qS r   )_REDACTED_FAILURE_FIELDSrM   r   r   r   rQ      s       c                 S  s   |   S r   r;   r=   r   r   r   r?      r@   z$LogMessage._redact.<locals>.<lambda>rA   zunicode-escapeignorez...T)r7   r6   itemshasattrrR   r$   intosgetenv_DEFAULT_DOCUMENT_LENGTHrI   _DOCUMENT_NAMESr'   rL   r   rD   r   rE   lenencodedecode)r9   Zdocument_lengthZis_server_side_errorrH   docZtruncated_docr   r   r   rC      s<    
zLogMessage._redactN)r   r   r   	__slots__r:   rF   rL   rC   r   r   r   r   r!   w   s
   r!   )0
__future__r   enumr/   rX   r1   typingr   Zbsonr   r   Zbson.json_utilr   r   Zpymongo.monitoringr   r	   r$   Enumr
   r   r   r   rZ   rJ   rK   rS   r[   ZSTANDARDrE   	getLoggerZ_COMMAND_LOGGERZ_CONNECTION_LOGGERZ_SERVER_SELECTION_LOGGERZ_CLIENT_LOGGERZ_SDAM_LOGGERr   ZSTALEERRORZ
CONN_ERRORZIDLETIMEOUTr&   r#   r(   r*   r4   r!   r   r   r   r   <module>   sh   







       