U
    CŠ]æ)  ã                   @   sž  d dl Z d dlZ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 dHejeedœdd	„ZdIejeedœd
d„Zejejeeeef  edœdd„Zeedœdd„Zd d¡Zed Zed Z eeje dœdd„Z!e
dƒe
dƒfZ"eejej#eeef  dœdd„Z$eje dœdd „Z%eej&ej'eef  dœd!d"„Z(d#d$hZ)ej*ej#ejejf  ej+ej#ejejf  d%œd&d'„Z,d(a-eej.d)œd*d+„Z/ej0ed,œd-d.„Z1ej'eef dœd/d0„Z2eeje d1œd2d3„Z3dJejeef eedœd5d6„Z4dKejeef eedœd7d8„Z5eejejd9œd:d;„Z6eedœd<d=„Z7G d>d?„ d?ƒZ8d@d@dAdBœZ9e:e:dCœdDdE„Z;G dFdG„ dGƒZ<dS )Lé    N)Ú	timedelta)ÚPath)Úperf_counter)ÚTracebackType)Ú
getproxies)ÚvalueÚencodingÚreturnc                 C   s$   t | tƒr|  ¡ S |  |pd¡ ¡ S )zE
    Coerce str/bytes into a strictly byte-wise HTTP header key.
    Úascii)Ú
isinstanceÚbytesÚlowerÚencode©r   r   © r   úk/var/www/html/staging.mfahmagazine.net/magazine_api/magazine_env/lib/python3.8/site-packages/httpx/utils.pyÚnormalize_header_key   s    
r   c                 C   s   t | tƒr| S |  |pd¡S )zG
    Coerce str/bytes into a strictly byte-wise HTTP header value.
    r
   )r   r   r   r   r   r   r   Únormalize_header_value   s    
r   )r   r	   c                 C   s,   | dkrdS | dkrdS | dkr$dS t | ƒS )z˜
    Coerce a primitive data type into a string value for query params.

    Note that we prefer JSON-style 'true'/'false' for boolean values here.
    TÚtrueFÚfalseNÚ )Ústr©r   r   r   r   Ústr_query_param!   s    r   )r   r	   c                 C   s*   zt  | ¡ W n tk
r$   Y dS X dS )z7
    Return `True` if `encoding` is a known codec.
    FT)ÚcodecsÚlookupÚLookupError)r   r   r   r   Úis_known_encoding0   s
    r   ú r
   é   é   )Údatar	   c                 C   sÐ   | d d… }|t jt jfkr dS |d d… t jkr6dS |d d… t jt jfkrRdS | t¡}|dkrhdS |dkrœ|d d d… tkr†d	S |d
d d… tkrœdS |dkrÌ|d d… t	kr¸dS |d
d … t	krÌdS d S )Né   zutf-32r    z	utf-8-sigr   zutf-16r   úutf-8z	utf-16-beé   z	utf-16-lez	utf-32-bez	utf-32-le)
r   ÚBOM_UTF32_LEÚBOM_UTF32_BEÚBOM_UTF8ÚBOM_UTF16_LEÚBOM_UTF16_BEÚcountÚ_nullÚ_null2Ú_null3)r!   ÚsampleZ	nullcountr   r   r   Úguess_json_utfA   s*    
r/   z~/.netrcz~/_netrc)Úhostr	   c                 C   s`   t t dd¡ƒft }d }|D ]}| ¡ }| ¡ r|} q<q|d krHd S t t|ƒ¡}| | ¡S )NZNETRCr   )	r   ÚosÚgetenvÚNETRC_STATIC_FILESÚ
expanduserÚis_fileÚnetrcr   Zauthenticators)r0   ZNETRC_FILESZ
netrc_pathÚ	file_pathZexpanded_pathZ
netrc_infor   r   r   Úget_netrc_logina   s    r8   ©r	   c                  C   sT   dt jkr(tt jd ƒ} |  ¡ r(t| ƒS dt jkrPtt jd ƒ}| ¡ rPt|ƒS d S )NZSSL_CERT_FILEZSSL_CERT_DIR)r1   Úenvironr   r5   r   Úis_dir)Zssl_fileZssl_pathr   r   r   Úget_ca_bundle_from_envr   s    

r<   c           	   
   C   sÎ   g }d}|   |¡} | s|S t d| ¡D ]¢}z| dd¡\}}W n tk
r\   |d }}Y nX d|  d¡i}| d¡D ]F}z| d¡\}} W n tk
r¦   Y  q¾Y nX |   |¡||  |¡< qv| |¡ q&|S )	a7  
    Returns a list of parsed link headers, for more info see:
    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link
    The generic syntax of those is:
    Link: < uri-reference >; param1=value1; param2="value2"
    So for instance:
    Link; '<http:/.../front.jpeg>; type="image/jpeg",<http://.../back.jpeg>;'
    would return
        [
            {"url": "http:/.../front.jpeg", "type": "image/jpeg"},
            {"url": "http://.../back.jpeg"},
        ]
    :param value: HTTP Link entity-header field
    :return: list of parsed link headers
    z '"z, *<ú;r$   r   Úurlz<> '"ú=)ÚstripÚreÚsplitÚ
ValueErrorÚappend)	r   ZlinksZreplace_charsÚvalr>   ÚparamsÚlinkÚparamÚkeyr   r   r   Úparse_header_links~   s&    
rJ   Zauthorizationzproxy-authorization)Úitemsr	   c                 c   s8   | D ].\}}t | ¡ ƒtkr(td|d�}||fV  qd S )Nz[secure])Úmatch_type_of)Úto_strr   ÚSENSITIVE_HEADERSÚto_bytes_or_str)rK   ÚkÚvr   r   r   Úobfuscate_sensitive_headers¦   s    rR   F)Únamer	   c                 C   sh   t s^da tj dd¡ ¡ dkr^t d¡}| tj¡ t 	t
j¡}| tjddd�¡ | |¡ t | ¡S )	z˜Gets a `logging.Logger` instance and optionally
    sets up debug logging if the user requests it via
    the `HTTPX_DEBUG=1` environment variable.
    TZHTTPX_DEBUGr   )Ú1r   Úhttpxz0%(asctime)s.%(msecs)03d - %(name)s - %(message)sz%H:%M:%S)ÚfmtÚdatefmt)Ú_LOGGER_INITIALIZEDr1   r:   Úgetr   ÚloggingÚ	getLoggerÚsetLevelÚDEBUGÚStreamHandlerÚsysÚstderrÚsetFormatterÚ	FormatterÚ
addHandler)rS   ÚloggerÚhandlerr   r   r   Ú
get_logger²   s    
þÿ
rf   )Úkwargsr	   c                  K   s   d  dd„ |  ¡ D ƒ¡S )zdFormat arguments into a key=value line.

    >>> formatkv(x=1, name="Bob")
    "x=1 name='Bob'"
    ú c                 s   s    | ]\}}|› d |›�V  qdS )r?   Nr   )Ú.0rI   r   r   r   r   Ú	<genexpr>Ð   s     zkv_format.<locals>.<genexpr>)ÚjoinrK   )rg   r   r   r   Ú	kv_formatÊ   s    rl   c                  C   s0   dd„ t ƒ  ¡ D ƒ} tdƒ}|dk	r,|| d< | S )z+Gets proxy information from the environmentc                 S   s&   i | ]\}}d |ks|dkr||“qS )z://)ÚhttpÚhttpsr   )ri   rI   rE   r   r   r   Ú
<dictcomp>Ú   s
    þ z+get_environment_proxies.<locals>.<dictcomp>Z	ALL_PROXYNÚall)r   rK   Úget_environ_lower_and_upper)ZproxiesZ	all_proxyr   r   r   Úget_environment_proxiesÓ   s    þrr   )rI   r	   c                 C   sB   |   ¡ |  ¡ fD ],} tj | d¡}|dk	rt|tƒr|  S qdS )z‘Gets a value from os.environ with both the lowercase and uppercase
    environment variable. Prioritizes the lowercase environment variable.
    N)r   Úupperr1   r:   rY   r   r   )rI   r   r   r   r   rq   è   s
    
rq   r#   c                 C   s   t | tƒr|  |¡S | S ©N©r   r   r   r   r   r   r   Úto_bytesó   s    rv   c                 C   s   t | tƒr| S |  |¡S rt   )r   r   Údecoder   r   r   r   rM   ÷   s    rM   )r   rL   r	   c                 C   s   t |tƒr| S |  ¡ S rt   ru   )r   rL   r   r   r   rO   û   s    rO   c                 C   s0   | d | d   krdkr,n n| dd… S | S )Nr   éÿÿÿÿú"r$   r   r   r   r   r   Úunquoteÿ   s    rz   c                   @   sV   e Zd Zddœdd„Zd dœdd„Zdeje eeddœdd	„Z	e
edœd
d„ƒZdS )ÚElapsedTimerNr9   c                 C   s   t ƒ | _d | _d S rt   )r   ÚstartÚend©Úselfr   r   r   Ú__init__  s    zElapsedTimer.__init__c                 C   s   t ƒ | _| S rt   )r   r|   r~   r   r   r   Ú	__enter__  s    zElapsedTimer.__enter__)Úexc_typeÚ	exc_valueÚ	tracebackr	   c                 C   s   t ƒ | _d S rt   )r   r}   )r   r‚   rƒ   r„   r   r   r   Ú__exit__  s    zElapsedTimer.__exit__c                 C   s.   | j d krttƒ | j d�S t| j | j d�S )N)Úseconds)r}   r   r   r|   r~   r   r   r   Úelapsed  s    
zElapsedTimer.elapsed)NNN)Ú__name__Ú
__module__Ú__qualname__r€   r�   ÚtypingZTypeÚBaseExceptionr   r…   Úpropertyr   r‡   r   r   r   r   r{     s      üûr{   z<{length} bytes>z<{length} chars>)Úbodyr   Útext©Úmessager	   c                 C   s^   |   ¡ }tD ]0}|| kr| | }t| jt|ƒd�}|||< qd| krZtt| d ƒƒ|d< |S )zi
    Return an ASGI message, with any body-type content omitted and replaced
    with a placeholder.
    )ÚlengthÚheaders)ÚcopyÚASGI_PLACEHOLDER_FORMATÚformatÚlenÚlistrR   )r‘   Znew_messageÚattrÚcontentÚplaceholderr   r   r   Úasgi_message_with_placeholders"  s    
rœ   c                   @   s:   e Zd Zejejddœdd„Zeejejddœdd„Z	dS )ÚMessageLoggerASGIMiddlewareN)Úapprd   r	   c                 C   s   || _ || _d S rt   )rž   rd   )r   rž   rd   r   r   r   r€   6  s    z$MessageLoggerASGIMiddleware.__init__)ÚscopeÚreceiveÚsendr	   c              
   ƒ   sÄ   t dœ‡ ‡fdd„}t d dœ‡‡fdd„}t |ƒ}d|krNtt|d ƒƒ|d< ˆj dtf |Ž› �¡ zˆ |||¡I d H  W n4 tk
r² } zˆj d	¡ |d ‚W 5 d }~X Y nX ˆj d
¡ d S )Nr9   c                  “   s0   ˆ ƒ I d H } t | ƒ}ˆj dtf |Ž› �¡ | S )Nzsent ©rœ   rd   Údebugrl   ©r‘   Zlogged_message)r    r   r   r   Úinner_receive=  s    z;MessageLoggerASGIMiddleware.__call__.<locals>.inner_receiver�   c                 “   s2   t | ƒ}ˆ j dtf |Ž› �¡ ˆ| ƒI d H  d S )Nz	received r¢   r¤   )r   r¡   r   r   Ú
inner_sendC  s    z8MessageLoggerASGIMiddleware.__call__.<locals>.inner_sendr“   zstarted Zraised_exceptionZ	completed)Údictr˜   rR   rd   r£   rl   rž   rŒ   )r   rŸ   r    r¡   r¥   r¦   Zlogged_scopeÚexcr   )r    r   r¡   r   Ú__call__:  s    
ÿz$MessageLoggerASGIMiddleware.__call__)
rˆ   r‰   rŠ   r‹   ÚCallablerZ   ÚLoggerr€   r§   r©   r   r   r   r   r�   5  s     þr�   )N)N)r#   )r#   )=r   rZ   r6   r1   rA   r_   r‹   Údatetimer   Úpathlibr   Útimer   Útypesr   Zurllib.requestr   ZAnyStrr   r   r   r   ÚOptionalÚUnionÚintÚfloatÚboolr   r   r   r+   r,   r-   r/   r3   ZTupler8   r<   ZListÚDictrJ   rN   ÚIterableÚIteratorrR   rX   r«   rf   ZAnyrl   rr   rq   rv   rM   rO   rz   r{   r•   r§   rœ   r�   r   r   r   r   Ú<module>   sV   		$
" %þ		ý