o
    iR                     @   sd   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	 ee
ZG dd deZd	S )
    )Mapping)Optional)Union)
get_logger)cachedmethodnormalize_header_namec                   @   s   e Zd ZdZddeeeef  ddfddZdd Ze	 d	edee fd
dZ
edefddZdeee ef ded  fddZd	edefddZdd ZdS )
HttpConfigz
    Configuration object that expose an API to set and retrieve both global and integration specific settings
    related to the http context.
    Nheader_tagsreturnc                 C   s&   |rdd |  D ni | _d | _d S )Nc                 S   s   i | ]	\}}t ||qS  r   ).0kvr   r   R/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/settings/http.py
<dictcomp>   s    z'HttpConfig.__init__.<locals>.<dictcomp>)items_header_tagstrace_query_string)selfr
   r   r   r   __init__   s   
zHttpConfig.__init__c                 C   s   i | _ | j  d S N)r   _header_tag_namecache_clearr   r   r   r   _reset   s   zHttpConfig._resetheader_namec                 C   s2   | j sd S t|}td|| j   | j |S )Nz,Checking header '%s' tracing in whitelist %s)r   r   logdebugkeysget)r   r   normalized_header_namer   r   r   r      s
   zHttpConfig._header_tag_namec                 C   s   t | jdkS )Nr   )lenr   r   r   r   r   is_header_tracing_configured$   s   z'HttpConfig.is_header_tracing_configured	whitelistc                 C   sP   |sdS t |tr|gn|}|D ]}t|}|sq| j|d q| j  | S )a  
        Registers a set of headers to be traced at global level or integration level.
        :param whitelist: the case-insensitive list of traced headers
        :type whitelist: list of str or str
        :return: self
        :rtype: HttpConfig
        N )
isinstancestrr   r   
setdefaultr   r   )r   r$   whitelist_entryr!   r   r   r   trace_headers(   s   
zHttpConfig.trace_headersc                 C   s   |  |duS )z
        Returns whether or not the current header should be traced.
        :param header_name: the header name
        :type header_name: str
        :rtype: bool
        N)r   )r   r   r   r   r   header_is_tracedA   s   zHttpConfig.header_is_tracedc                 C   s$   d| j j d| j  d| j dS )N<z traced_headers=z trace_query_string=>)	__class____name__r   r   r   r   r   r   r   __repr__J   s   zHttpConfig.__repr__r   )r/   
__module____qualname____doc__r   r   r'   r   r   r   r   propertyboolr#   r   listr*   r+   r0   r   r   r   r   r	      s     "	r	   N)typingr   r   r   ddtrace.internal.loggerr   ddtrace.internal.utils.cacher   ddtrace.internal.utils.httpr   r/   r   objectr	   r   r   r   r   <module>   s    