B
    indI;                 @   s  d dl mZ d dlmZmZmZmZm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 erdd	lmZ dd
lmZ edddZG dd dee ZdZG dd dZejddddG dd dZejddddG dd dZejddddG dd dZejddddG dd dZejddddG dd dZejddddG dd dZejddddG d d! d!Z ejddddG d"d# d#Z!ejddddG d$d% d%Z"ejddddG d&d' d'Z#ejddddG d(d) d)Z$ejddddG d*d+ d+Z%ejddddG d,d- d-Z&ejddddG d.d/ d/Z'ejddddG d0d1 d1Z(ejddddG d2d3 d3Z)G d4d5 d5Z*dS )6    )SimpleNamespace)TYPE_CHECKING	AwaitableOptionalTypeTypeVarN)Signal)CIMultiDict)URL   )ClientResponse)ClientSession)Protocol_ParamT_contraT)contravariantc               @   s$   e Zd Zeeeed dddZdS )_SignalCallbackN)_SignalCallback__client_session!_SignalCallback__trace_config_ctx_SignalCallback__paramsreturnc             C   s   d S )N )selfr   r   r   r   r   3/tmp/pip-unpacked-wheel-fdo6ttx3/aiohttp/tracing.py__call__   s    z_SignalCallback.__call__)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r      s   r   )TraceConfigTraceRequestStartParamsTraceRequestEndParamsTraceRequestExceptionParams TraceConnectionQueuedStartParamsTraceConnectionQueuedEndParams TraceConnectionCreateStartParamsTraceConnectionCreateEndParamsTraceConnectionReuseconnParamsTraceDnsResolveHostStartParamsTraceDnsResolveHostEndParamsTraceDnsCacheHitParamsTraceDnsCacheMissParamsTraceRequestRedirectParamsTraceRequestChunkSentParams TraceResponseChunkReceivedParamsTraceRequestHeadersSentParamsc               @   sl  e Zd ZdZefee ddddZd<ee edddZdd	d
dZ	e
dd	ddZe
dd	ddZe
dd	ddZe
dd	ddZe
dd	ddZe
dd	ddZe
dd	dd Ze
d!d	d"d#Ze
d$d	d%d&Ze
d'd	d(d)Ze
d*d	d+d,Ze
d-d	d.d/Ze
d0d	d1d2Ze
d3d	d4d5Ze
d6d	d7d8Ze
d9d	d:d;ZdS )=r   zFFirst-class used to trace requests launched via ClientSession objects.N)trace_config_ctx_factoryr   c             C   s   t | | _t | | _t | | _t | | _t | | _t | | _t | | _t | | _t | | _	t | | _
t | | _t | | _t | | _t | | _t | | _t | | _|| _d S )N)r   _on_request_start_on_request_chunk_sent_on_response_chunk_received_on_request_end_on_request_exception_on_request_redirect_on_connection_queued_start_on_connection_queued_end_on_connection_create_start_on_connection_create_end_on_connection_reuseconn_on_dns_resolvehost_start_on_dns_resolvehost_end_on_dns_cache_hit_on_dns_cache_miss_on_request_headers_sent_trace_config_ctx_factory)r   r.   r   r   r   __init__3   s$    














zTraceConfig.__init__)trace_request_ctxr   c             C   s   | j |dS )z&Return a new trace_config_ctx instance)rA   )r?   )r   rA   r   r   r   trace_config_ctxi   s    zTraceConfig.trace_config_ctx)r   c             C   s   | j   | j  | j  | j  | j  | j  | j  | j  | j	  | j
  | j  | j  | j  | j  | j  | j  d S )N)r/   freezer0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   )r   r   r   r   rC   o   s     














zTraceConfig.freezez0Signal[_SignalCallback[TraceRequestStartParams]]c             C   s   | j S )N)r/   )r   r   r   r   on_request_start   s    zTraceConfig.on_request_startz4Signal[_SignalCallback[TraceRequestChunkSentParams]]c             C   s   | j S )N)r0   )r   r   r   r   on_request_chunk_sent   s    z!TraceConfig.on_request_chunk_sentz9Signal[_SignalCallback[TraceResponseChunkReceivedParams]]c             C   s   | j S )N)r1   )r   r   r   r   on_response_chunk_received   s    z&TraceConfig.on_response_chunk_receivedz.Signal[_SignalCallback[TraceRequestEndParams]]c             C   s   | j S )N)r2   )r   r   r   r   on_request_end   s    zTraceConfig.on_request_endz4Signal[_SignalCallback[TraceRequestExceptionParams]]c             C   s   | j S )N)r3   )r   r   r   r   on_request_exception   s    z TraceConfig.on_request_exceptionz3Signal[_SignalCallback[TraceRequestRedirectParams]]c             C   s   | j S )N)r4   )r   r   r   r   on_request_redirect   s    zTraceConfig.on_request_redirectz9Signal[_SignalCallback[TraceConnectionQueuedStartParams]]c             C   s   | j S )N)r5   )r   r   r   r   on_connection_queued_start   s    z&TraceConfig.on_connection_queued_startz7Signal[_SignalCallback[TraceConnectionQueuedEndParams]]c             C   s   | j S )N)r6   )r   r   r   r   on_connection_queued_end   s    z$TraceConfig.on_connection_queued_endz9Signal[_SignalCallback[TraceConnectionCreateStartParams]]c             C   s   | j S )N)r7   )r   r   r   r   on_connection_create_start   s    z&TraceConfig.on_connection_create_startz7Signal[_SignalCallback[TraceConnectionCreateEndParams]]c             C   s   | j S )N)r8   )r   r   r   r   on_connection_create_end   s    z$TraceConfig.on_connection_create_endz7Signal[_SignalCallback[TraceConnectionReuseconnParams]]c             C   s   | j S )N)r9   )r   r   r   r   on_connection_reuseconn   s    z#TraceConfig.on_connection_reuseconnz7Signal[_SignalCallback[TraceDnsResolveHostStartParams]]c             C   s   | j S )N)r:   )r   r   r   r   on_dns_resolvehost_start   s    z$TraceConfig.on_dns_resolvehost_startz5Signal[_SignalCallback[TraceDnsResolveHostEndParams]]c             C   s   | j S )N)r;   )r   r   r   r   on_dns_resolvehost_end   s    z"TraceConfig.on_dns_resolvehost_endz/Signal[_SignalCallback[TraceDnsCacheHitParams]]c             C   s   | j S )N)r<   )r   r   r   r   on_dns_cache_hit   s    zTraceConfig.on_dns_cache_hitz0Signal[_SignalCallback[TraceDnsCacheMissParams]]c             C   s   | j S )N)r=   )r   r   r   r   on_dns_cache_miss   s    zTraceConfig.on_dns_cache_missz6Signal[_SignalCallback[TraceRequestHeadersSentParams]]c             C   s   | j S )N)r>   )r   r   r   r   on_request_headers_sent   s    z#TraceConfig.on_request_headers_sent)N)r   r   r   __doc__r   r   r@   r   rB   rC   propertyrD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   r   r   r   r   r   0   sL   
5r   )Zauto_attribsfrozenslotsc               @   s*   e Zd ZU dZeed< eed< ded< dS )r   z0Parameters sent by the `on_request_start` signalmethodurlzCIMultiDict[str]headersN)r   r   r   rT   str__annotations__r
   r   r   r   r   r      s   
r   c               @   s*   e Zd ZU dZeed< eed< eed< dS )r+   z5Parameters sent by the `on_request_chunk_sent` signalrX   rY   chunkN)r   r   r   rT   r[   r\   r
   bytesr   r   r   r   r+      s   
r+   c               @   s*   e Zd ZU dZeed< eed< eed< dS )r,   z:Parameters sent by the `on_response_chunk_received` signalrX   rY   r]   N)r   r   r   rT   r[   r\   r
   r^   r   r   r   r   r,      s   
r,   c               @   s2   e Zd ZU dZeed< eed< ded< eed< dS )r   z.Parameters sent by the `on_request_end` signalrX   rY   zCIMultiDict[str]rZ   responseN)r   r   r   rT   r[   r\   r
   r   r   r   r   r   r      s
   
r   c               @   s2   e Zd ZU dZeed< eed< ded< eed< dS )r    z4Parameters sent by the `on_request_exception` signalrX   rY   zCIMultiDict[str]rZ   	exceptionN)r   r   r   rT   r[   r\   r
   BaseExceptionr   r   r   r   r       s
   
r    c               @   s2   e Zd ZU dZeed< eed< ded< eed< dS )r*   z3Parameters sent by the `on_request_redirect` signalrX   rY   zCIMultiDict[str]rZ   r_   N)r   r   r   rT   r[   r\   r
   r   r   r   r   r   r*   	  s
   
r*   c               @   s   e Zd ZdZdS )r!   z:Parameters sent by the `on_connection_queued_start` signalN)r   r   r   rT   r   r   r   r   r!     s   r!   c               @   s   e Zd ZdZdS )r"   z8Parameters sent by the `on_connection_queued_end` signalN)r   r   r   rT   r   r   r   r   r"     s   r"   c               @   s   e Zd ZdZdS )r#   z:Parameters sent by the `on_connection_create_start` signalN)r   r   r   rT   r   r   r   r   r#     s   r#   c               @   s   e Zd ZdZdS )r$   z8Parameters sent by the `on_connection_create_end` signalN)r   r   r   rT   r   r   r   r   r$   "  s   r$   c               @   s   e Zd ZdZdS )r%   z7Parameters sent by the `on_connection_reuseconn` signalN)r   r   r   rT   r   r   r   r   r%   '  s   r%   c               @   s   e Zd ZU dZeed< dS )r&   z8Parameters sent by the `on_dns_resolvehost_start` signalhostN)r   r   r   rT   r[   r\   r   r   r   r   r&   ,  s   
r&   c               @   s   e Zd ZU dZeed< dS )r'   z6Parameters sent by the `on_dns_resolvehost_end` signalrb   N)r   r   r   rT   r[   r\   r   r   r   r   r'   3  s   
r'   c               @   s   e Zd ZU dZeed< dS )r(   z0Parameters sent by the `on_dns_cache_hit` signalrb   N)r   r   r   rT   r[   r\   r   r   r   r   r(   :  s   
r(   c               @   s   e Zd ZU dZeed< dS )r)   z1Parameters sent by the `on_dns_cache_miss` signalrb   N)r   r   r   rT   r[   r\   r   r   r   r   r)   A  s   
r)   c               @   s*   e Zd ZU dZeed< eed< ded< dS )r-   z7Parameters sent by the `on_request_headers_sent` signalrX   rY   zCIMultiDict[str]rZ   N)r   r   r   rT   r[   r\   r
   r   r   r   r   r-   H  s   
r-   c               @   s<  e Zd ZdZdeeddddZeedddd	d
Z	eee
ddddZeee
ddddZeededdddZeededdddZeededdddZddddZddddZddddZdddd Zddd!d"Zedd#d$d%Zedd#d&d'Zedd#d(d)Zedd#d*d+Zeedddd,d-ZdS ).TracezInternal dependency holder class.

    Used to keep together the main dependencies used
    at the moment of send a signal.
    r   N)sessiontrace_configrB   r   c             C   s   || _ || _|| _d S )N)_trace_config_trace_config_ctx_session)r   rd   re   rB   r   r   r   r@   X  s    zTrace.__init__zCIMultiDict[str])rX   rY   rZ   r   c                s$   | j j| j| jt|||I d H S )N)rf   rD   sendrh   rg   r   )r   rX   rY   rZ   r   r   r   send_request_startb  s    zTrace.send_request_start)rX   rY   r]   r   c                s$   | j j| j| jt|||I d H S )N)rf   rE   ri   rh   rg   r+   )r   rX   rY   r]   r   r   r   send_request_chunk_sentk  s    zTrace.send_request_chunk_sentc                s$   | j j| j| jt|||I d H S )N)rf   rF   ri   rh   rg   r,   )r   rX   rY   r]   r   r   r   send_response_chunk_receivedt  s    z"Trace.send_response_chunk_received)rX   rY   rZ   r_   r   c          	      s&   | j j| j| jt||||I d H S )N)rf   rG   ri   rh   rg   r   )r   rX   rY   rZ   r_   r   r   r   send_request_end}  s    zTrace.send_request_end)rX   rY   rZ   r`   r   c          	      s&   | j j| j| jt||||I d H S )N)rf   rH   ri   rh   rg   r    )r   rX   rY   rZ   r`   r   r   r   send_request_exception  s    zTrace.send_request_exceptionc          	      s&   | j j| j| jt||||I d H S )N)rf   r4   ri   rh   rg   r*   )r   rX   rY   rZ   r_   r   r   r   send_request_redirect  s    zTrace.send_request_redirect)r   c                s   | j j| j| jt I d H S )N)rf   rJ   ri   rh   rg   r!   )r   r   r   r   send_connection_queued_start  s    z"Trace.send_connection_queued_startc                s   | j j| j| jt I d H S )N)rf   rK   ri   rh   rg   r"   )r   r   r   r   send_connection_queued_end  s    z Trace.send_connection_queued_endc                s   | j j| j| jt I d H S )N)rf   rL   ri   rh   rg   r#   )r   r   r   r   send_connection_create_start  s    z"Trace.send_connection_create_startc                s   | j j| j| jt I d H S )N)rf   rM   ri   rh   rg   r$   )r   r   r   r   send_connection_create_end  s    z Trace.send_connection_create_endc                s   | j j| j| jt I d H S )N)rf   rN   ri   rh   rg   r%   )r   r   r   r   send_connection_reuseconn  s    zTrace.send_connection_reuseconn)rb   r   c                s    | j j| j| jt|I d H S )N)rf   rO   ri   rh   rg   r&   )r   rb   r   r   r   send_dns_resolvehost_start  s    z Trace.send_dns_resolvehost_startc                s    | j j| j| jt|I d H S )N)rf   rP   ri   rh   rg   r'   )r   rb   r   r   r   send_dns_resolvehost_end  s    zTrace.send_dns_resolvehost_endc                s    | j j| j| jt|I d H S )N)rf   rQ   ri   rh   rg   r(   )r   rb   r   r   r   send_dns_cache_hit  s    zTrace.send_dns_cache_hitc                s    | j j| j| jt|I d H S )N)rf   rR   ri   rh   rg   r)   )r   rb   r   r   r   send_dns_cache_miss  s    zTrace.send_dns_cache_missc                s$   | j j| j| jt|||I d H S )N)rf   r>   ri   rh   rg   r-   )r   rX   rY   rZ   r   r   r   send_request_headers  s    zTrace.send_request_headers)r   r   r   rT   r   r   r@   r[   r
   rj   r^   rk   rl   r   rm   ra   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   r   r   r   r   rc   Q  sJ   			rc   )+typesr   typingr   r   r   r   r   attrZ	aiosignalr   Z	multidictr	   Zyarlr
   Zclient_reqrepr   clientr   Ztypedefsr   r   r   __all__r   sr   r+   r,   r   r    r*   r!   r"   r#   r$   r%   r&   r'   r(   r)   r-   rc   r   r   r   r   <module>   s>    +			


	