o
    í6Wj²  ã                   @  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Zd dlZd dlm	Z	m
Z
 d dlmZ ddlmZ ddlmZmZmZ ddlmZmZmZmZmZmZ dd	lmZ dd
lmZmZmZmZ ddl m!Z!m"Z"m#Z#m$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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z<m=Z= ddl>m?Z?m@Z@ ejArµd dlBZBg d¢ZCejDddd�ZEejDddd�ZFd7dd„ZGd8d d!„ZHd9d#d$„ZIG d%d&„ d&ƒZJeJƒ ZKe Ld'¡ZMd(e› �ZNd) Od*d+„ e P¡ D ƒ¡ZQG d,d-„ d-ejRƒZSG d.d/„ d/e9ƒZTG d0d1„ d1e.ƒZUejVd2ejWf ZXG d3d4„ d4ƒZYG d5d„ deYƒZZG d6d„ deYƒZ[dS ):é    )ÚannotationsN)ÚasynccontextmanagerÚcontextmanager)ÚTracebackTypeé   )Ú__version__)ÚAuthÚ	BasicAuthÚFunctionAuth)ÚDEFAULT_LIMITSÚDEFAULT_MAX_REDIRECTSÚDEFAULT_TIMEOUT_CONFIGÚLimitsÚProxyÚTimeout)ÚSUPPORTED_DECODERS)Ú
InvalidURLÚRemoteProtocolErrorÚTooManyRedirectsÚrequest_context)ÚCookiesÚHeadersÚRequestÚResponse)Úcodes)ÚAsyncBaseTransportÚBaseTransport)ÚAsyncHTTPTransportÚHTTPTransport)ÚAsyncByteStreamÚ	AuthTypesÚ	CertTypesÚCookieTypesÚHeaderTypesÚ
ProxyTypesÚQueryParamTypesÚRequestContentÚRequestDataÚRequestExtensionsÚRequestFilesÚSyncByteStreamÚTimeoutTypes)ÚURLÚQueryParams)Ú
URLPatternÚget_environment_proxies)ÚUSE_CLIENT_DEFAULTÚAsyncClientÚClientÚTr2   )ÚboundÚUr1   Úurlr,   ÚlocationÚreturnÚboolc                 C  s<   | j |j krdS | jdkot| ƒdko|jdkot|ƒdkS )zA
    Return 'True' if 'location' is a HTTPS upgrade of 'url'
    FÚhttpéP   Úhttpsé»  )ÚhostÚschemeÚ_port_or_default)r6   r7   © rA   ú\/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/httpx/_client.pyÚ_is_https_redirect>   s   

ÿþ
ürC   ú
int | Nonec                 C  s"   | j d ur| j S dddœ | j¡S )Nr;   r=   )r:   r<   )ÚportÚgetr?   ©r6   rA   rA   rB   r@   M   s   
r@   Úotherc                 C  s(   | j |j ko| j|jkot| ƒt|ƒkS )z@
    Return 'True' if the given URLs share the same origin.
    )r?   r>   r@   )r6   rH   rA   rA   rB   Ú_same_originS   s
   
ÿýrI   c                   @  s   e Zd ZdZdS )ÚUseClientDefaulta<  
    For some parameters such as `auth=...` and `timeout=...` we need to be able
    to indicate the default "unset" state, in a way that is distinctly different
    to using `None`.

    The default "unset" state indicates that whatever default is set on the
    client should be used. This is different to setting `None`, which
    explicitly disables the parameter, possibly overriding a client default.

    For example we use `timeout=USE_CLIENT_DEFAULT` in the `request()` signature.
    Omitting the `timeout` parameter will send a request using whatever default
    timeout has been configured on the client. Including `timeout=None` will
    ensure no timeout is used.

    Note that user code shouldn't need to use the `USE_CLIENT_DEFAULT` constant,
    but it is used internally when a parameter is not included.
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rA   rA   rA   rB   rJ   ^   s    rJ   Úhttpxzpython-httpx/z, c                 C  s   g | ]}|d kr|‘qS )ÚidentityrA   )Ú.0ÚkeyrA   rA   rB   Ú
<listcomp>y   s    rS   c                   @  s   e Zd ZdZdZdZdS )ÚClientStater   é   é   N)rK   rL   rM   ÚUNOPENEDÚOPENEDÚCLOSEDrA   rA   rA   rB   rT   }   s    rT   c                   @  ó.   e Zd ZdZdd
d„Zddd„Zddd„ZdS )ÚBoundSyncStreamz“
    A byte stream that is bound to a given response instance, and that
    ensures the `response.elapsed` is set once the response is closed.
    Ústreamr*   Úresponser   ÚstartÚfloatr8   ÚNonec                 C  ó   || _ || _|| _d S ©N©Ú_streamÚ	_responseÚ_start©Úselfr\   r]   r^   rA   rA   rB   Ú__init__‘   ó   
zBoundSyncStream.__init__útyping.Iterator[bytes]c                 c  s   � | j D ]}|V  qd S rb   ©rd   ©rh   ÚchunkrA   rA   rB   Ú__iter__˜   s   €
ÿzBoundSyncStream.__iter__c                 C  s,   t  ¡ | j }tj|d�| j_| j ¡  d S ©N)Úseconds)	ÚtimeÚperf_counterrf   ÚdatetimeÚ	timedeltare   Úelapsedrd   Úclose©rh   rv   rA   rA   rB   rw   œ   s   zBoundSyncStream.closeN)r\   r*   r]   r   r^   r_   r8   r`   )r8   rk   ©r8   r`   )rK   rL   rM   rN   ri   ro   rw   rA   rA   rA   rB   r[   ‹   ó
    

r[   c                   @  rZ   )ÚBoundAsyncStreamzš
    An async byte stream that is bound to a given response instance, and that
    ensures the `response.elapsed` is set once the response is closed.
    r\   r   r]   r   r^   r_   r8   r`   c                 C  ra   rb   rc   rg   rA   rA   rB   ri   ¨   rj   zBoundAsyncStream.__init__útyping.AsyncIterator[bytes]c                 C s"   �| j 2 z	3 d H W }|V  q6 d S rb   rl   rm   rA   rA   rB   Ú	__aiter__¯   s   €ÿzBoundAsyncStream.__aiter__c                 Ã  s4   �t  ¡ | j }tj|d�| j_| j ¡ I d H  d S rp   )	rr   rs   rf   rt   ru   re   rv   rd   Úacloserx   rA   rA   rB   r~   ³   s   €zBoundAsyncStream.acloseN)r\   r   r]   r   r^   r_   r8   r`   )r8   r|   ry   )rK   rL   rM   rN   ri   r}   r~   rA   rA   rA   rB   r{   ¢   rz   r{   .c                   @  sÖ  e Zd Zddddededddddœd|dd„Zed}d d!„ƒZed}d"d#„ƒZd~d&d'„Z	dd,d-„Z
ed€d/d0„ƒZejd�d1d0„ƒZed‚d3d4„ƒZejdƒd5d4„ƒZed„d7d8„ƒZejd…d:d8„ƒZed†d;d<„ƒZejd‡d=d<„ƒZedˆd?d@„ƒZejd‰dBd@„ƒZedŠdDdE„ƒZejd‹dGdE„ƒZedŒdIdJ„ƒZejd�dLdJ„ƒZdddddddeddMœ	dŽd\d]„Zd�d^d_„Zd�d‘d`da„Zd�d’dbdc„Z	d�d“ddde„Zd”dfdg„Zefd•dkdl„Zd–dodp„Zd—dqdr„Zd˜dsdt„Zd™dudv„Zdšdxdy„Zd›dzd{„Z dS )œÚ
BaseClientNFÚ Túutf-8©ÚauthÚparamsÚheadersÚcookiesÚtimeoutÚfollow_redirectsÚmax_redirectsÚevent_hooksÚbase_urlÚ	trust_envÚdefault_encodingrƒ   úAuthTypes | Noner„   úQueryParamTypes | Noner…   úHeaderTypes | Noner†   úCookieTypes | Noner‡   r+   rˆ   r9   r‰   ÚintrŠ   ú+None | typing.Mapping[str, list[EventHook]]r‹   ú	URL | strrŒ   r�   ú#str | typing.Callable[[bytes], str]r8   r`   c                C  sœ   |d u ri n|}|   t|	ƒ¡| _|  |¡| _t|ƒ| _t|ƒ| _t	|ƒ| _
t|ƒ| _|| _|| _t| dg ¡ƒt| dg ¡ƒdœ| _|
| _|| _tj| _d S ©NÚrequestr]   )r—   r]   )Ú_enforce_trailing_slashr,   Ú	_base_urlÚ_build_authÚ_authr-   Ú_paramsr   r…   r   Ú_cookiesr   Ú_timeoutrˆ   r‰   ÚlistrF   Ú_event_hooksÚ
_trust_envÚ_default_encodingrT   rW   Ú_state)rh   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rA   rA   rB   ri   ½   s   



þzBaseClient.__init__c                 C  s   | j tjkS )z2
        Check if the client being closed
        )r£   rT   rY   ©rh   rA   rA   rB   Ú	is_closedß   s   zBaseClient.is_closedc                 C  ó   | j S rb   )r¡   r¤   rA   rA   rB   rŒ   æ   ó   zBaseClient.trust_envr6   r,   c                 C  s"   |j  d¡r|S |j|j d d�S )Nó   /©Úraw_path)rª   ÚendswithÚ	copy_with©rh   r6   rA   rA   rB   r˜   ê   s   z"BaseClient._enforce_trailing_slashÚproxyúProxyTypes | NoneÚallow_env_proxiesúdict[str, Proxy | None]c                 C  sH   |d u r|rdd„ t ƒ  ¡ D ƒS i S t|ttfƒrt|d�n|}d|iS )Nc                 S  s(   i | ]\}}||d u rd nt |d�“qS )NrG   )r   )rQ   rR   r6   rA   rA   rB   Ú
<dictcomp>ô   s    ÿÿz-BaseClient._get_proxy_map.<locals>.<dictcomp>rG   zall://)r/   ÚitemsÚ
isinstanceÚstrr,   r   )rh   r®   r°   rA   rA   rB   Ú_get_proxy_mapï   s   þzBaseClient._get_proxy_mapr   c                 C  r¦   rb   )rž   r¤   rA   rA   rB   r‡   ý   r§   zBaseClient.timeoutc                 C  ó   t |ƒ| _d S rb   )r   rž   )rh   r‡   rA   rA   rB   r‡     ó   údict[str, list[EventHook]]c                 C  r¦   rb   )r    r¤   rA   rA   rB   rŠ     r§   zBaseClient.event_hooksc                 C  s(   t | dg ¡ƒt | dg ¡ƒdœ| _d S r–   )rŸ   rF   r    )rh   rŠ   rA   rA   rB   rŠ   	  s   þúAuth | Nonec                 C  r¦   )z¦
        Authentication class used when none is passed at the request-level.

        See also [Authentication][0].

        [0]: /quickstart/#authentication
        )r›   r¤   rA   rA   rB   rƒ     s   	zBaseClient.authr    c                 C  s   |   |¡| _d S rb   )rš   r›   ©rh   rƒ   rA   rA   rB   rƒ     s   c                 C  r¦   )zK
        Base URL to use when sending requests with relative URLs.
        )r™   r¤   rA   rA   rB   r‹     ó   zBaseClient.base_urlc                 C  s   |   t|ƒ¡| _d S rb   )r˜   r,   r™   r­   rA   rA   rB   r‹   &  s   r   c                 C  r¦   )z@
        HTTP headers to include when sending requests.
        )Ú_headersr¤   rA   rA   rB   r…   *  r¼   zBaseClient.headersr#   c                 C  s2   t dt d¡dt d¡dœƒ}| |¡ || _d S )Ns   */*Úasciis
   keep-alive)s   Accepts   Accept-Encodings
   Connections
   User-Agent)r   ÚACCEPT_ENCODINGÚencodeÚ
USER_AGENTÚupdater½   )rh   r…   Úclient_headersrA   rA   rB   r…   1  s   üÿ

r   c                 C  r¦   )zA
        Cookie values to include when sending requests.
        )r�   r¤   rA   rA   rB   r†   >  r¼   zBaseClient.cookiesr"   c                 C  r·   rb   )r   r�   )rh   r†   rA   rA   rB   r†   E  r¸   r-   c                 C  r¦   )zO
        Query parameters to include in the URL when sending requests.
        )rœ   r¤   rA   rA   rB   r„   I  r¼   zBaseClient.paramsr%   c                 C  r·   rb   )r-   rœ   )rh   r„   rA   rA   rB   r„   P  r¸   )	ÚcontentÚdataÚfilesÚjsonr„   r…   r†   r‡   Ú
extensionsÚmethodrµ   rÄ   úRequestContent | NonerÅ   úRequestData | NonerÆ   úRequestFiles | NonerÇ   útyping.Any | NoneúTimeoutTypes | UseClientDefaultrÈ   úRequestExtensions | Noner   c       	         C  sŽ   |   |¡}|  |¡}|  |	¡}	|  |¡}|du ri n|}d|vr9t|
tƒr(| jnt|
ƒ}
tdi |¤d|
 	¡ i¤Ž}t
|||||||||	|d�
S )aR  
        Build and return a request instance.

        * The `params`, `headers` and `cookies` arguments
        are merged with any values set on the client.
        * The `url` argument is merged with any `base_url` set on the client.

        See also: [Request instances][0]

        [0]: /advanced/clients/#request-instances
        Nr‡   )rÄ   rÅ   rÆ   rÇ   r„   r…   r†   rÈ   rA   )Ú
_merge_urlÚ_merge_headersÚ_merge_cookiesÚ_merge_queryparamsr´   rJ   r‡   r   ÚdictÚas_dictr   )rh   rÉ   r6   rÄ   rÅ   rÆ   rÇ   r„   r…   r†   r‡   rÈ   rA   rA   rB   Úbuild_requestT  s.   



ÿýözBaseClient.build_requestc                 C  s4   t |ƒ}|jr| jj|j d¡ }| jj|d�S |S )z‹
        Merge a URL argument together with any 'base_url' on the client,
        to create the URL used for the outgoing request.
        r¨   r©   )r,   Úis_relative_urlr‹   rª   Úlstripr¬   )rh   r6   Ú	merge_urlÚmerge_raw_pathrA   rA   rB   rÐ   ‡  s
   zBaseClient._merge_urlc                 C  s&   |s| j rt| j ƒ}| |¡ |S |S )z�
        Merge a cookies argument together with any cookies on the client,
        to create the cookies used for the outgoing request.
        )r†   r   rÂ   )rh   r†   Úmerged_cookiesrA   rA   rB   rÒ   �  s
   


zBaseClient._merge_cookiesc                 C  s   t | jƒ}| |¡ |S )z�
        Merge a headers argument together with any headers on the client,
        to create the headers used for the outgoing request.
        )r   r…   rÂ   )rh   r…   Úmerged_headersrA   rA   rB   rÑ   ¨  s   

zBaseClient._merge_headersc                 C  s"   |s| j rt| j ƒ}| |¡S |S )zœ
        Merge a queryparams argument together with any queryparams on the client,
        to create the queryparams used for the outgoing request.
        )r„   r-   Úmerge)rh   r„   Úmerged_queryparamsrA   rA   rB   rÓ   ±  s   


zBaseClient._merge_queryparamsc                 C  sX   |d u rd S t |tƒrt|d |d d�S t |tƒr|S t|ƒr%t|d�S td|›�ƒ‚)Nr   r   ©ÚusernameÚpassword)ÚfunczInvalid "auth" argument: )r´   Útupler	   r   Úcallabler
   Ú	TypeErrorr»   rA   rA   rB   rš   ½  s   


zBaseClient._build_authr—   ú#AuthTypes | UseClientDefault | Noner   c                 C  sR   t |tƒr| jn|  |¡}|d ur|S |jj|jj}}|s |r&t||d�S tƒ S )Nrß   )	r´   rJ   r›   rš   r6   rà   rá   r	   r   )rh   r—   rƒ   rà   rá   rA   rA   rB   Ú_build_request_authÉ  s   ÿzBaseClient._build_request_authr]   r   c                 C  sR   |   ||¡}|  ||¡}|  |||¡}|  ||¡}t| jƒ}t||||||jd�S )zƒ
        Given a request and a redirect response, return a new request that
        should be used to effect the redirect.
        )rÉ   r6   r…   r†   r\   rÈ   )Ú_redirect_methodÚ_redirect_urlÚ_redirect_headersÚ_redirect_streamr   r†   r   rÈ   )rh   r—   r]   rÉ   r6   r…   r\   r†   rA   rA   rB   Ú_build_redirect_requestÛ  s   
úz"BaseClient._build_redirect_requestc                 C  sR   |j }|jtjkr|dkrd}|jtjkr|dkrd}|jtjkr'|dkr'd}|S )z‹
        When being redirected we may want to change the method of the request
        based on certain specs or browser behavior.
        ÚHEADÚGETÚPOST)rÉ   Ústatus_coder   Ú	SEE_OTHERÚFOUNDÚMOVED_PERMANENTLY)rh   r—   r]   rÉ   rA   rA   rB   rè   î  s   zBaseClient._redirect_methodc              
   C  s–   |j d }zt|ƒ}W n ty" } ztd|› d�|d�d‚d}~ww |jr1|js1|j|jjd�}|jr:|j 	|¡}|jj
rI|j
sI|j|jj
d�}|S )z<
        Return the URL for the redirect to follow.
        ÚLocationz Invalid URL in location header: Ú.©r—   N)r>   )Úfragment)r…   r,   r   r   r?   r>   r¬   r6   r×   Újoinr÷   )rh   r—   r]   r7   r6   ÚexcrA   rA   rB   ré     s$   
ÿþ€ÿzBaseClient._redirect_urlc                 C  sx   t |jƒ}t||jƒst|j|ƒs| dd¡ |j d¡|d< ||jkr4|dkr4| dd¡ | dd¡ | dd¡ |S )	zR
        Return the headers that should be used for the redirect request.
        ÚAuthorizationNr¾   ÚHostrî   zContent-LengthzTransfer-EncodingÚCookie)	r   r…   rI   r6   rC   ÚpopÚnetlocÚdecoderÉ   )rh   r—   r6   rÉ   r…   rA   rA   rB   rê   "  s   
zBaseClient._redirect_headersú'SyncByteStream | AsyncByteStream | Nonec                 C  s   ||j kr|dkrdS |jS )zO
        Return the body that should be used for the redirect request.
        rî   N)rÉ   r\   )rh   r—   rÉ   rA   rA   rB   rë   =  s   zBaseClient._redirect_streamc                 C  sL   d|j vr$t| jtƒr| jnt| jƒ}tdi |j ¤d| ¡ i¤Ž|_ d S d S )Nr‡   rA   )rÈ   r´   r‡   rJ   r   rÔ   rÕ   )rh   r—   r‡   rA   rA   rB   Ú_set_timeoutH  s   

ÿý"úzBaseClient._set_timeout)rƒ   rŽ   r„   r�   r…   r�   r†   r‘   r‡   r+   rˆ   r9   r‰   r’   rŠ   r“   r‹   r”   rŒ   r9   r�   r•   r8   r`   )r8   r9   )r6   r,   r8   r,   )r®   r¯   r°   r9   r8   r±   )r8   r   )r‡   r+   r8   r`   )r8   r¹   )rŠ   r¹   r8   r`   )r8   rº   )rƒ   r    r8   r`   )r8   r,   )r6   r”   r8   r`   )r8   r   )r…   r#   r8   r`   )r8   r   )r†   r"   r8   r`   )r8   r-   )r„   r%   r8   r`   )rÉ   rµ   r6   r”   rÄ   rÊ   rÅ   rË   rÆ   rÌ   rÇ   rÍ   r„   r�   r…   r�   r†   r‘   r‡   rÎ   rÈ   rÏ   r8   r   )r6   r”   r8   r,   rb   )r†   r‘   r8   r‘   )r…   r�   r8   r�   )r„   r�   r8   r�   )rƒ   rŽ   r8   rº   )r—   r   rƒ   ræ   r8   r   )r—   r   r]   r   r8   r   )r—   r   r]   r   r8   rµ   )r—   r   r]   r   r8   r,   )r—   r   r6   r,   rÉ   rµ   r8   r   )r—   r   rÉ   rµ   r8   r   )r—   r   r8   r`   )!rK   rL   rM   r   r   ri   Úpropertyr¥   rŒ   r˜   r¶   r‡   ÚsetterrŠ   rƒ   r‹   r…   r†   r„   r0   rÖ   rÐ   rÒ   rÑ   rÓ   rš   rç   rì   rè   ré   rê   rë   r  rA   rA   rA   rB   r   ¼   sŽ    ó"


ó
3
ÿ
ý




r   c                      s  e Zd ZdZdddddddddddedeedddddœd|‡ fd-d.„Zdddddedfd}d0d1„Zdddddefd~d3d4„Z	dd7d8„Z
dddddddeeedd9œd€dJdK„Zedddddddeeedd9œd�dMdN„ƒZdeedOœd‚dSdT„ZdƒdXdY„Zd„dZd[„Zd…d\d]„Zdddeeedd^œd†d_d`„Zdddeeedd^œd‡dbdc„Zdddeeedd^œd‡ddde„Zdddddddeeedd9œdˆdfdg„Zdddddddeeedd9œdˆdhdi„Zdddddddeeedd9œdˆdjdk„Zdddeeedd^œd‡dldm„Zd‰dndo„ZdŠdrds„Z			d‹dŒdzd{„Z‡  ZS )�r2   av  
    An HTTP client, with connection pooling, HTTP/2, redirects, cookie persistence, etc.

    It can be shared between threads.

    Usage:

    ```python
    >>> client = httpx.Client()
    >>> response = client.get('https://example.org')
    ```

    **Parameters:**

    * **auth** - *(optional)* An authentication class to use when sending
    requests.
    * **params** - *(optional)* Query parameters to include in request URLs, as
    a string, dictionary, or sequence of two-tuples.
    * **headers** - *(optional)* Dictionary of HTTP headers to include when
    sending requests.
    * **cookies** - *(optional)* Dictionary of Cookie items to include when
    sending requests.
    * **verify** - *(optional)* Either `True` to use an SSL context with the
    default CA bundle, `False` to disable verification, or an instance of
    `ssl.SSLContext` to use a custom context.
    * **http2** - *(optional)* A boolean indicating if HTTP/2 support should be
    enabled. Defaults to `False`.
    * **proxy** - *(optional)* A proxy URL where all the traffic should be routed.
    * **timeout** - *(optional)* The timeout configuration to use when sending
    requests.
    * **limits** - *(optional)* The limits configuration to use.
    * **max_redirects** - *(optional)* The maximum number of redirect responses
    that should be followed.
    * **base_url** - *(optional)* A URL to use as the base when building
    request URLs.
    * **transport** - *(optional)* A transport class to use for sending requests
    over the network.
    * **trust_env** - *(optional)* Enables or disables usage of environment
    variables for configuration.
    * **default_encoding** - *(optional)* The default encoding to use for decoding
    response text, if no charset information is included in a response Content-Type
    header. Set to a callable for automatic character set detection. Default: "utf-8".
    NTFr€   r�   )rƒ   r„   r…   r†   ÚverifyÚcertrŒ   Úhttp1Úhttp2r®   Úmountsr‡   rˆ   Úlimitsr‰   rŠ   r‹   Ú	transportr�   rƒ   rŽ   r„   r�   r…   r�   r†   r‘   r  ússl.SSLContext | str | boolr  úCertTypes | NonerŒ   r9   r  r  r®   r¯   r  ú0None | typing.Mapping[str, BaseTransport | None]r‡   r+   rˆ   r	  r   r‰   r’   rŠ   r“   r‹   r”   r
  úBaseTransport | Noner�   r•   r8   r`   c                  sÜ   t ƒ j|||||||||ˆ|d� ˆr&zdd l}W n ty%   tdƒd ‚w ˆo+|d u }ˆ |
|¡}ˆjˆˆ ˆˆˆˆ|d�ˆ_‡ ‡‡‡‡‡‡fdd„| ¡ D ƒˆ_|d urbˆj 	dd„ | ¡ D ƒ¡ t
tˆj ¡ ƒƒˆ_d S )Nr‚   r   úuUsing http2=True, but the 'h2' package is not installed. Make sure to install httpx using `pip install httpx[http2]`.©r  r  rŒ   r  r  r	  r
  c                   ó:   i | ]\}}t |ƒ|d u rd nˆj|ˆˆ ˆˆˆˆd�“qS ©N)r  r  rŒ   r  r  r	  ©r.   Ú_init_proxy_transport©rQ   rR   r®   ©r  r  r  r	  rh   rŒ   r  rA   rB   r²   ¹  ó    õÿùýz#Client.__init__.<locals>.<dictcomp>c                 S  ó   i | ]	\}}t |ƒ|“qS rA   ©r.   ©rQ   rR   r
  rA   rA   rB   r²   É  ó    ©Úsuperri   Úh2ÚImportErrorr¶   Ú_init_transportÚ
_transportr³   Ú_mountsrÂ   rÔ   Úsorted)rh   rƒ   r„   r…   r†   r  r  rŒ   r  r  r®   r  r‡   rˆ   r	  r‰   rŠ   r‹   r
  r�   r  r°   Ú	proxy_map©Ú	__class__r  rB   ri     sT   õÿýÿù	ôÿzClient.__init__r   c                 C  ó    |d ur|S t ||||||d�S r  ©r   ©rh   r  r  rŒ   r  r  r	  r
  rA   rA   rB   r   Î  ó   
úzClient._init_transportr   c              	   C  ó   t |||||||d�S ©N)r  r  rŒ   r  r  r	  r®   r(  ©rh   r®   r  r  rŒ   r  r  r	  rA   rA   rB   r  ä  ó   
ùzClient._init_proxy_transportr6   r,   c                 C  ó>   | j  ¡ D ]\}}| |¡r|du r| j  S |  S q| jS ©z›
        Returns the transport instance that should be used for a given URL.
        This will either be the standard connection pool, or a proxy.
        N©r"  r³   Úmatchesr!  ©rh   r6   Úpatternr
  rA   rA   rB   Ú_transport_for_urlø  ó
   
ÿzClient._transport_for_url©rÄ   rÅ   rÆ   rÇ   r„   r…   r†   rƒ   rˆ   r‡   rÈ   rÉ   rµ   rÄ   rÊ   rÅ   rË   rÆ   rÌ   rÇ   rÍ   ræ   úbool | UseClientDefaultrÎ   rÈ   rÏ   r   c                C  sL   |	durd}t j|tdd� | j|||||||||	||d�}| j||
|d�S )a©  
        Build and send a request.

        Equivalent to:

        ```python
        request = client.build_request(...)
        response = client.send(request, ...)
        ```

        See `Client.build_request()`, `Client.send()` and
        [Merging of configuration][0] for how the various parameters
        are merged with client-level configuration.

        [0]: /advanced/clients/#merging-of-configuration
        Nú®Setting per-request cookies=<...> is being deprecated, because the expected behaviour on cookie persistence is ambiguous. Set cookies directly on the client instance instead.rU   ©Ú
stacklevel©rÉ   r6   rÄ   rÅ   rÆ   rÇ   r„   r…   r†   r‡   rÈ   ©rƒ   rˆ   ©ÚwarningsÚwarnÚDeprecationWarningrÖ   Úsend©rh   rÉ   r6   rÄ   rÅ   rÆ   rÇ   r„   r…   r†   rƒ   rˆ   r‡   rÈ   Úmessager—   rA   rA   rB   r—     s$   !ÿõzClient.requestútyping.Iterator[Response]c                c  sT   � | j |||||||||	||d�}| j||
|dd�}z
|V  W | ¡  dS | ¡  w ©a  
        Alternative to `httpx.request()` that streams the response body
        instead of loading it into memory at once.

        **Parameters**: See `httpx.request`.

        See also: [Streaming Responses][0]

        [0]: /quickstart#streaming-responses
        r<  T)r—   rƒ   rˆ   r\   N)rÖ   rB  rw   ©rh   rÉ   r6   rÄ   rÅ   rÆ   rÇ   r„   r…   r†   rƒ   rˆ   r‡   rÈ   r—   r]   rA   rA   rB   r\   ;  s.   €õüzClient.stream©r\   rƒ   rˆ   r—   r   r\   c             
   C  s�   | j tjkr
tdƒ‚tj| _ t|tƒr| jn|}|  |¡ |  	||¡}| j
|||g d�}z	|s3| ¡  |W S  tyG } z| ¡  |‚d}~ww )a‹  
        Send a request.

        The request is sent as-is, unmodified.

        Typically you'll want to build one with `Client.build_request()`
        so that any client-level configuration is merged into the request,
        but passing an explicit `httpx.Request()` is supported as well.

        See also: [Request instances][0]

        [0]: /advanced/clients/#request-instances
        ú5Cannot send a request, as the client has been closed.©rƒ   rˆ   ÚhistoryN)r£   rT   rY   ÚRuntimeErrorrX   r´   rJ   rˆ   r  rç   Ú_send_handling_authÚreadÚBaseExceptionrw   ©rh   r—   r\   rƒ   rˆ   r]   rù   rA   rA   rB   rB  o  s0   ÿý
ü€þzClient.sendr   rK  úlist[Response]c           	   
   C  s®   |  |¡}zLt|ƒ}	 | j|||d�}z+z| |¡}W n ty,   | Y W W | ¡  S w t|ƒ|_| ¡  |}| 	|¡ W n t
yP } z| ¡  |‚d }~ww q| ¡  w ©NT)rˆ   rK  )Úsync_auth_flowÚnextÚ_send_handling_redirectsrB  ÚStopIterationrw   rŸ   rK  rN  ÚappendrO  ©	rh   r—   rƒ   rˆ   rK  Ú	auth_flowr]   Únext_requestrù   rA   rA   rB   rM  ¢  s6   
ý

ô
€þï
zClient._send_handling_authc              
   C  sÈ   	 t |ƒ| jkrtd|d�‚| jd D ]}||ƒ q|  |¡}z1| jd D ]}||ƒ q%t|ƒ|_|js7|W S |  ||¡}||g }|rI| 	¡  n||_
|W S W n tyb } z| ¡  |‚d }~ww q©NTz#Exceeded maximum allowed redirects.rö   r—   r]   )Úlenr‰   r   r    Ú_send_single_requestrŸ   rK  Úhas_redirect_locationrì   rN  rZ  rO  rw   ©rh   r—   rˆ   rK  Úhookr]   rù   rA   rA   rB   rU  Ä  s6   ÿ





ý€þåzClient._send_handling_redirectsc                 C  sº   |   |j¡}t ¡ }t|jtƒstdƒ‚t|d�� | 	|¡}W d  ƒ n1 s)w   Y  t|jtƒs6J ‚||_
t|j||d�|_| j |¡ | j|_t d|j|j|j|j|j¡ |S )úL
        Sends a single request, without handling any redirections.
        z?Attempted to send an async request with a sync Client instance.rö   N©r]   r^   úHTTP Request: %s %s "%s %d %s")r5  r6   rr   rs   r´   r\   r*   rL  r   Úhandle_requestr—   r[   r†   Úextract_cookiesr¢   r�   ÚloggerÚinforÉ   Úhttp_versionrð   Úreason_phrase©rh   r—   r
  r^   r]   rA   rA   rB   r]  é  s2   ÿÿÿú	zClient._send_single_request©r„   r…   r†   rƒ   rˆ   r‡   rÈ   c          	      C  ó   | j d||||||||d�	S )úU
        Send a `GET` request.

        **Parameters**: See `httpx.request`.
        rî   rk  rö   ©	rh   r6   r„   r…   r†   rƒ   rˆ   r‡   rÈ   rA   rA   rB   rF     ó   ÷z
Client.getúAuthTypes | UseClientDefaultc          	      C  rl  )úZ
        Send an `OPTIONS` request.

        **Parameters**: See `httpx.request`.
        ÚOPTIONSrk  rö   rn  rA   rA   rB   Úoptions)  ro  zClient.optionsc          	      C  rl  )úV
        Send a `HEAD` request.

        **Parameters**: See `httpx.request`.
        rí   rk  rö   rn  rA   rA   rB   ÚheadF  ro  zClient.headc                C  ó$   | j d|||||||||	|
||d�S )úV
        Send a `POST` request.

        **Parameters**: See `httpx.request`.
        rï   r7  rö   ©rh   r6   rÄ   rÅ   rÆ   rÇ   r„   r…   r†   rƒ   rˆ   r‡   rÈ   rA   rA   rB   Úpostc  ó   ózClient.postc                C  rv  )úU
        Send a `PUT` request.

        **Parameters**: See `httpx.request`.
        ÚPUTr7  rö   rx  rA   rA   rB   Úputˆ  rz  z
Client.putc                C  rv  )úW
        Send a `PATCH` request.

        **Parameters**: See `httpx.request`.
        ÚPATCHr7  rö   rx  rA   rA   rB   Úpatch­  rz  zClient.patchc          	      C  rl  )úX
        Send a `DELETE` request.

        **Parameters**: See `httpx.request`.
        ÚDELETErk  rö   rn  rA   rA   rB   ÚdeleteÒ  ro  zClient.deletec                 C  sF   | j tjkrtj| _ | j ¡  | j ¡ D ]}|dur| ¡  qdS dS ©z.
        Close transport and proxies.
        N)r£   rT   rY   r!  rw   r"  Úvalues)rh   r
  rA   rA   rB   rw   ï  s   
€úzClient.closerh   r3   c                 C  s`   | j tjkrtjdtjdi| j  }t|ƒ‚tj| _ | j ¡  | j 	¡ D ]
}|d ur-| ¡  q#| S ©Nz-Cannot open a client instance more than once.z9Cannot reopen a client instance, once it has been closed.)
r£   rT   rW   rX   rY   rL  r!  Ú	__enter__r"  r…  )rh   Úmsgr
  rA   rA   rB   r‡  û  s   ýû
€zClient.__enter__Úexc_typeútype[BaseException] | NoneÚ	exc_valueúBaseException | NoneÚ	tracebackúTracebackType | Nonec                 C  sB   t j| _| j |||¡ | j ¡ D ]}|d ur| |||¡ qd S rb   )rT   rY   r£   r!  Ú__exit__r"  r…  )rh   r‰  r‹  r�  r
  rA   rA   rB   r�    s   €þzClient.__exit__)(rƒ   rŽ   r„   r�   r…   r�   r†   r‘   r  r  r  r  rŒ   r9   r  r9   r  r9   r®   r¯   r  r  r‡   r+   rˆ   r9   r	  r   r‰   r’   rŠ   r“   r‹   r”   r
  r  r�   r•   r8   r`   )r  r  r  r  rŒ   r9   r  r9   r  r9   r	  r   r
  r  r8   r   )r®   r   r  r  r  r  rŒ   r9   r  r9   r  r9   r	  r   r8   r   )r6   r,   r8   r   ©rÉ   rµ   r6   r”   rÄ   rÊ   rÅ   rË   rÆ   rÌ   rÇ   rÍ   r„   r�   r…   r�   r†   r‘   rƒ   ræ   rˆ   r8  r‡   rÎ   rÈ   rÏ   r8   r   )rÉ   rµ   r6   r”   rÄ   rÊ   rÅ   rË   rÆ   rÌ   rÇ   rÍ   r„   r�   r…   r�   r†   r‘   rƒ   ræ   rˆ   r8  r‡   rÎ   rÈ   rÏ   r8   rE  ©
r—   r   r\   r9   rƒ   ræ   rˆ   r8  r8   r   ©
r—   r   rƒ   r   rˆ   r9   rK  rQ  r8   r   ©r—   r   rˆ   r9   rK  rQ  r8   r   ©r—   r   r8   r   ©r6   r”   r„   r�   r…   r�   r†   r‘   rƒ   ræ   rˆ   r8  r‡   rÎ   rÈ   rÏ   r8   r   ©r6   r”   r„   r�   r…   r�   r†   r‘   rƒ   rp  rˆ   r8  r‡   rÎ   rÈ   rÏ   r8   r   ©r6   r”   rÄ   rÊ   rÅ   rË   rÆ   rÌ   rÇ   rÍ   r„   r�   r…   r�   r†   r‘   rƒ   rp  rˆ   r8  r‡   rÎ   rÈ   rÏ   r8   r   ry   )rh   r3   r8   r3   ©NNN©r‰  rŠ  r‹  rŒ  r�  rŽ  r8   r`   )rK   rL   rM   rN   r   r   r   ri   r   r  r5  r0   r—   r   r\   rB  rM  rU  r]  rF   rs  ru  ry  r}  r€  rƒ  rw   r‡  r�  Ú__classcell__rA   rA   r%  rB   r2   R  s    /ëQøø
ñ8ñ7ú
3
"
%'ö!ö!ö!ò)ò)ò)ö

üc                      s  e Zd ZdZddddddddddedeeddddddœd|‡ fd-d.„Zdddddedfd}d0d1„Zdddddefd~d3d4„Z	dd7d8„Z
dddddddeeedd9œd€dJdK„Zedddddddeeedd9œd�dMdN„ƒZdeedOœd‚dSdT„ZdƒdXdY„Zd„dZd[„Zd…d\d]„Zdddeeedd^œd†d_d`„Zdddeeedd^œd‡dbdc„Zdddeeedd^œd‡ddde„Zdddddddeeedd9œdˆdfdg„Zdddddddeeedd9œdˆdhdi„Zdddddddeeedd9œdˆdjdk„Zdddeeedd^œd‡dldm„Zd‰dndo„ZdŠdrds„Z			d‹dŒdzd{„Z‡  ZS )�r1   a¡  
    An asynchronous HTTP client, with connection pooling, HTTP/2, redirects,
    cookie persistence, etc.

    It can be shared between tasks.

    Usage:

    ```python
    >>> async with httpx.AsyncClient() as client:
    >>>     response = await client.get('https://example.org')
    ```

    **Parameters:**

    * **auth** - *(optional)* An authentication class to use when sending
    requests.
    * **params** - *(optional)* Query parameters to include in request URLs, as
    a string, dictionary, or sequence of two-tuples.
    * **headers** - *(optional)* Dictionary of HTTP headers to include when
    sending requests.
    * **cookies** - *(optional)* Dictionary of Cookie items to include when
    sending requests.
    * **verify** - *(optional)* Either `True` to use an SSL context with the
    default CA bundle, `False` to disable verification, or an instance of
    `ssl.SSLContext` to use a custom context.
    * **http2** - *(optional)* A boolean indicating if HTTP/2 support should be
    enabled. Defaults to `False`.
    * **proxy** - *(optional)* A proxy URL where all the traffic should be routed.
    * **timeout** - *(optional)* The timeout configuration to use when sending
    requests.
    * **limits** - *(optional)* The limits configuration to use.
    * **max_redirects** - *(optional)* The maximum number of redirect responses
    that should be followed.
    * **base_url** - *(optional)* A URL to use as the base when building
    request URLs.
    * **transport** - *(optional)* A transport class to use for sending requests
    over the network.
    * **trust_env** - *(optional)* Enables or disables usage of environment
    variables for configuration.
    * **default_encoding** - *(optional)* The default encoding to use for decoding
    response text, if no charset information is included in a response Content-Type
    header. Set to a callable for automatic character set detection. Default: "utf-8".
    NTFr€   r�   )rƒ   r„   r…   r†   r  r  r  r  r®   r  r‡   rˆ   r	  r‰   rŠ   r‹   r
  rŒ   r�   rƒ   rŽ   r„   r�   r…   r�   r†   r‘   r  r  r  r  r  r9   r  r®   r¯   r  ú5None | typing.Mapping[str, AsyncBaseTransport | None]r‡   r+   rˆ   r	  r   r‰   r’   rŠ   r“   r‹   r”   r
  úAsyncBaseTransport | NonerŒ   r�   r•   r8   r`   c                  sÜ   t ƒ j|||||||||ˆ|d� ˆr&zdd l}W n ty%   tdƒd ‚w ˆo+|d u }ˆ |	|¡}ˆjˆˆ ˆˆˆˆ|d�ˆ_‡ ‡‡‡‡‡‡fdd„| ¡ D ƒˆ_|
d urbˆj 	dd„ |
 ¡ D ƒ¡ t
tˆj ¡ ƒƒˆ_d S )Nr‚   r   r  r  c                   r  r  r  r  r  rA   rB   r²   „  r  z(AsyncClient.__init__.<locals>.<dictcomp>c                 S  r  rA   r  r  rA   rA   rB   r²   ”  r  r  )rh   rƒ   r„   r…   r†   r  r  r  r  r®   r  r‡   rˆ   r	  r‰   rŠ   r‹   r
  rŒ   r�   r  r°   r$  r%  r  rB   ri   I  sT   õÿýÿù
ôÿzAsyncClient.__init__r   c                 C  r'  r  ©r   r)  rA   rA   rB   r   ˜  r*  zAsyncClient._init_transportr   c              	   C  r+  r,  r�  r-  rA   rA   rB   r  ®  r.  z!AsyncClient._init_proxy_transportr6   r,   c                 C  r/  r0  r1  r3  rA   rA   rB   r5  Â  r6  zAsyncClient._transport_for_urlr7  rÉ   rµ   rÄ   rÊ   rÅ   rË   rÆ   rÌ   rÇ   rÍ   ræ   r8  rÎ   rÈ   rÏ   r   c                Ã  sT   �|	durd}t j|tdd� | j|||||||||	||d�}| j||
|d�I dH S )a¹  
        Build and send a request.

        Equivalent to:

        ```python
        request = client.build_request(...)
        response = await client.send(request, ...)
        ```

        See `AsyncClient.build_request()`, `AsyncClient.send()`
        and [Merging of configuration][0] for how the various parameters
        are merged with client-level configuration.

        [0]: /advanced/clients/#merging-of-configuration
        Nr9  rU   r:  r<  r=  r>  rC  rA   rA   rB   r—   Í  s&   €"ÿõzAsyncClient.requestútyping.AsyncIterator[Response]c                C sf   �| j |||||||||	||d�}| j||
|dd�I dH }z|V  W | ¡ I dH  dS | ¡ I dH  w rF  )rÖ   rB  r~   rG  rA   rA   rB   r\     s.   €õü"zAsyncClient.streamrH  r—   r   r\   c             
   Ã  s¤   �| j tjkrtdƒ‚tj| _ t|tƒr| jn|}|  |¡ |  	||¡}| j
|||g d�I dH }z|s:| ¡ I dH  |W S  tyQ } z	| ¡ I dH  |‚d}~ww )a�  
        Send a request.

        The request is sent as-is, unmodified.

        Typically you'll want to build one with `AsyncClient.build_request()`
        so that any client-level configuration is merged into the request,
        but passing an explicit `httpx.Request()` is supported as well.

        See also: [Request instances][0]

        [0]: /advanced/clients/#request-instances
        rI  rJ  N)r£   rT   rY   rL  rX   r´   rJ   rˆ   r  rç   rM  ÚareadrO  r~   rP  rA   rA   rB   rB  :  s2   €ÿý
ü€þzAsyncClient.sendr   rK  rQ  c           	   
   Ã  sÚ   �|  |¡}z^| ¡ I d H }	 | j|||d�I d H }z4z
| |¡I d H }W n ty9   | Y W W | ¡ I d H  S w t|ƒ|_| ¡ I d H  |}| 	|¡ W n t
yc } z	| ¡ I d H  |‚d }~ww q| ¡ I d H  w rR  )Úasync_auth_flowÚ	__anext__rU  ÚasendÚStopAsyncIterationr~   rŸ   rK  rŸ  rW  rO  rX  rA   rA   rB   rM  m  s8   €
ý
ô
€þïzAsyncClient._send_handling_authc              
   Ã  sè   �	 t |ƒ| jkrtd|d�‚| jd D ]	}||ƒI d H  q|  |¡I d H }z7| jd D ]	}||ƒI d H  q,t|ƒ|_|jsA|W S |  ||¡}||g }|rV| 	¡ I d H  n||_
|W S W n tyr } z	| ¡ I d H  |‚d }~ww qr[  )r\  r‰   r   r    r]  rŸ   rK  r^  rì   rŸ  rZ  rO  r~   r_  rA   rA   rB   rU  �  s8   €ÿ

ý€þäz$AsyncClient._send_handling_redirectsc                 Ã  sÂ   �|   |j¡}t ¡ }t|jtƒstdƒ‚t|d�� | 	|¡I dH }W d  ƒ n1 s-w   Y  t|jtƒs:J ‚||_
t|j||d�|_| j |¡ | j|_t d|j|j|j|j|j¡ |S )ra  z?Attempted to send an sync request with an AsyncClient instance.rö   Nrb  rc  )r5  r6   rr   rs   r´   r\   r   rL  r   Úhandle_async_requestr—   r{   r†   re  r¢   r�   rf  rg  rÉ   rh  rð   ri  rj  rA   rA   rB   r]  µ  s4   €ÿÿÿú	z AsyncClient._send_single_requestrk  c          	      Ã  ó$   �| j d||||||||d�	I dH S )rm  rî   rk  Nrö   rn  rA   rA   rB   rF   ×  ó   €÷zAsyncClient.getrp  c          	      Ã  r¥  )rq  rr  rk  Nrö   rn  rA   rA   rB   rs  ô  r¦  zAsyncClient.optionsc          	      Ã  r¥  )rt  rí   rk  Nrö   rn  rA   rA   rB   ru    r¦  zAsyncClient.headc                Ã  ó,   �| j d|||||||||	|
||d�I dH S )rw  rï   r7  Nrö   rx  rA   rA   rB   ry  .  ó    €ózAsyncClient.postc                Ã  r§  )r{  r|  r7  Nrö   rx  rA   rA   rB   r}  S  r¨  zAsyncClient.putc                Ã  r§  )r~  r  r7  Nrö   rx  rA   rA   rB   r€  x  r¨  zAsyncClient.patchc          	      Ã  r¥  )r�  r‚  rk  Nrö   rn  rA   rA   rB   rƒ  �  r¦  zAsyncClient.deletec                 Ã  sT   �| j tjkr&tj| _ | j ¡ I dH  | j ¡ D ]}|dur%| ¡ I dH  qdS dS r„  )r£   rT   rY   r!  r~   r"  r…  )rh   r®   rA   rA   rB   r~   º  s   €€úzAsyncClient.acloserh   r5   c                 Ã  sn   �| j tjkrtjdtjdi| j  }t|ƒ‚tj| _ | j ¡ I d H  | j 	¡ D ]}|d ur4| ¡ I d H  q'| S r†  )
r£   rT   rW   rX   rY   rL  r!  Ú
__aenter__r"  r…  )rh   rˆ  r®   rA   rA   rB   r©  Æ  s    €ýû€zAsyncClient.__aenter__r‰  rŠ  r‹  rŒ  r�  rŽ  c                 Ã  sP   �t j| _| j |||¡I d H  | j ¡ D ]}|d ur%| |||¡I d H  qd S rb   )rT   rY   r£   r!  Ú	__aexit__r"  r…  )rh   r‰  r‹  r�  r®   rA   rA   rB   rª  Ø  s   €€þzAsyncClient.__aexit__)(rƒ   rŽ   r„   r�   r…   r�   r†   r‘   r  r  r  r  r  r9   r  r9   r®   r¯   r  r›  r‡   r+   rˆ   r9   r	  r   r‰   r’   rŠ   r“   r‹   r”   r
  rœ  rŒ   r9   r�   r•   r8   r`   )r  r  r  r  rŒ   r9   r  r9   r  r9   r	  r   r
  rœ  r8   r   )r®   r   r  r  r  r  rŒ   r9   r  r9   r  r9   r	  r   r8   r   )r6   r,   r8   r   r�  )rÉ   rµ   r6   r”   rÄ   rÊ   rÅ   rË   rÆ   rÌ   rÇ   rÍ   r„   r�   r…   r�   r†   r‘   rƒ   ræ   rˆ   r8  r‡   rÎ   rÈ   rÏ   r8   rž  r‘  r’  r“  r”  r•  r–  r—  ry   )rh   r5   r8   r5   r˜  r™  )rK   rL   rM   rN   r   r   r   ri   r   r  r5  r0   r—   r   r\   rB  rM  rU  r]  rF   rs  ru  ry  r}  r€  rƒ  r~   r©  rª  rš  rA   rA   r%  rB   r1     s    0ëQøø
ñ9ñ7ú
3
"
&&ö!ö!ö!ò)ò)ò)ö

ü)r6   r,   r7   r,   r8   r9   )r6   r,   r8   rD   )r6   r,   rH   r,   r8   r9   )\Ú
__future__r   rt   ÚenumÚloggingrr   Útypingr?  Ú
contextlibr   r   Útypesr   r   r›   r   r	   r
   Ú_configr   r   r   r   r   r   Ú	_decodersr   Ú_exceptionsr   r   r   r   Ú_modelsr   r   r   r   Ú_status_codesr   Ú_transports.baser   r   Ú_transports.defaultr   r   Ú_typesr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   Ú_urlsr,   r-   Ú_utilsr.   r/   ÚTYPE_CHECKINGÚsslÚ__all__ÚTypeVarr3   r5   rC   r@   rI   rJ   r0   Ú	getLoggerrf  rÁ   rø   Úkeysr¿   ÚEnumrT   r[   r{   ÚCallableÚAnyÚ	EventHookr   r2   r1   rA   rA   rA   rB   Ú<module>   sf     <




ÿ        N