+
    ,jM                        ^ RI Ht ^ RIHt ^ RIHtHtHtHtH	t	H
t
HtHt  ! R R4      t ! R R4      t ! R R	4      t ! R
 R4      t ! R R4      t ! R R4      t ! R R4      t ! R R4      tR# )    )annotations)Callable)PyAddHeadersMiddlewarePyAuthenticationMiddlewarePyGCSMiddlewarePyMirrorMiddlewarePyOciMiddlewarePyRetryMiddlewarePyS3Middleware
PyS3Configc                  .    ] tR t^tR R ltR R ltRtR# )MirrorMiddlewarec                    V ^8  d   QhRRRR/# )   mirrorszdict[str, list[str]]returnNone )formats   "=lib/python3.14/site-packages/rattler/networking/middleware.py__annotate__MirrorMiddleware.__annotate__   s     7 7 4 7 7    c                &    \        V4      V n        R# )a  
Create a new MirrorMiddleware instance.
The mirrors argument should be a dictionary where the keys are the
original mirror URLs and the values are lists of mirror URLs to
replace the original mirror with.

Examples
--------
```python
>>> from rattler.networking import Client
>>> middleware = MirrorMiddleware({"https://conda.anaconda.org/conda-forge": ["https://repo.prefix.dev/conda-forge"]})
>>> middleware
MirrorMiddleware()
>>> Client([middleware])
Client()
>>>
```
N)r   _middleware)selfr   s   &&r   __init__MirrorMiddleware.__init__   s    & .g6r   c                   V ^8  d   QhRR/# r   r   strr   )r   s   "r   r   r   '   s     * *# *r   c                2    \        V 4      P                   R2# )z
Returns a representation of the Middleware

Examples
--------
```python
>>> middleware = MirrorMiddleware({"https://conda.anaconda.org/conda-forge": ["https://repo.prefix.dev/conda-forge"]})
>>> middleware
MirrorMiddleware()
>>>
```
()type__name__r   s   &r   __repr__MirrorMiddleware.__repr__'   s     t*%%&b))r   r   N)r&   
__module____qualname____firstlineno__r   r(   __static_attributes__r   r   r   r   r      s    7** *r   r   c                  2    ] tR t^7tRtR R ltR R ltRtR# )AuthenticationMiddlewarez3
Middleware to handle authentication from keychain
c                   V ^8  d   QhRR/# r   r   r   r   )r   s   "r   r   %AuthenticationMiddleware.__annotate__<   s     8 8$ 8r   c                	$    \        4       V n        R # N)r   r   r'   s   &r   r   !AuthenticationMiddleware.__init__<   s    57r   c                   V ^8  d   QhRR/# r    r   )r   s   "r   r   r3   ?        * *# *r   c                2    \        V 4      P                   R2# )z
Returns a representation of the Middleware

Examples
--------
```python
>>> from rattler.networking import Client
>>> middleware = AuthenticationMiddleware()
>>> middleware
AuthenticationMiddleware()
>>> Client([middleware])
Client()
>>>
```
r#   r$   r'   s   &r   r(   !AuthenticationMiddleware.__repr__?         t*%%&b))r   r*   Nr&   r+   r,   r-   __doc__r   r(   r.   r   r   r   r0   r0   7   s    8* *r   r0   c                  6    ] tR t^RtRtRR R lltR R ltRtR# )	RetryMiddlewarea>  
Middleware that retries transient HTTP errors with exponential back-off.

Examples
--------
```python
>>> from rattler.networking import Client, RetryMiddleware
>>> RetryMiddleware()
RetryMiddleware(max_retries=3)
>>> RetryMiddleware(5)
RetryMiddleware(max_retries=5)
>>> Client([RetryMiddleware()])
Client()
>>>
```
c                    V ^8  d   QhRRRR/# )r   max_retriesintr   r   r   )r   s   "r   r   RetryMiddleware.__annotate__d   s     : :C : :r   c                	2    Wn         \        V4      V n        R # r5   )_max_retriesr
   r   )r   rA   s   &&r   r   RetryMiddleware.__init__d   s    ',[9r   c                   V ^8  d   QhRR/# r    r   )r   s   "r   r   rC   h   s     I I# Ir   c                	L    \        V 4      P                   R V P                   R2# )z(max_retries=))r%   r&   rE   r'   s   &r   r(   RetryMiddleware.__repr__h   s'    t*%%&mD4E4E3FaHHr   )rE   r   N)   r<   r   r   r   r?   r?   R   s    ":I Ir   r?   c                  2    ] tR t^ltRtR R ltR R ltRtR# )OciMiddlewarez$
Middleware to handle `oci://` URLs
c                   V ^8  d   QhRR/# r2   r   )r   s   "r   r   OciMiddleware.__annotate__q        - -$ -r   c                	$    \        4       V n        R # r5   )r	   r   r'   s   &r   r   OciMiddleware.__init__q       *,r   c                   V ^8  d   QhRR/# r    r   )r   s   "r   r   rO   t   r8   r   c                2    \        V 4      P                   R2# )z
Returns a representation of the Middleware

Examples
--------
```python
>>> from rattler.networking import Client
>>> middleware = OciMiddleware()
>>> middleware
OciMiddleware()
>>> Client([middleware])
Client()
>>>
```
r#   r$   r'   s   &r   r(   OciMiddleware.__repr__t   r;   r   r*   Nr<   r   r   r   rM   rM   l   s    -* *r   rM   c                  2    ] tR t^tRtR R ltR R ltRtR# )GCSMiddlewarez
Middleware to work with gcs:// URLs

Examples
--------
```python
>>> from rattler.networking import Client
>>> middleware = GCSMiddleware()
>>> middleware
GCSMiddleware()
>>> Client([middleware])
Client()
>>>
```
c                   V ^8  d   QhRR/# r2   r   )r   s   "r   r   GCSMiddleware.__annotate__   rP   r   c                	$    \        4       V n        R # r5   )r   r   r'   s   &r   r   GCSMiddleware.__init__   rS   r   c                   V ^8  d   QhRR/# r    r   )r   s   "r   r   rZ           * *# *r   c                	2    \        V 4      P                   R 2# r#   r$   r'   s   &r   r(   GCSMiddleware.__repr__       t*%%&b))r   r*   Nr<   r   r   r   rX   rX      s     -* *r   rX   c                  6    ] tR t^tRtRR R lltR R ltRtR# )	S3Configaq  
Middleware to work with s3:// URLs

Examples
--------
```python
>>> from rattler.networking import S3Middleware
>>> config = S3Config("http://localhost:9000", "eu-central-1", True)
>>> config
S3Config(http://localhost:9000, eu-central-1, True)
>>> middleware = S3Middleware({"my-bucket": config})
>>> middleware
S3Middleware()
>>> S3Config()
S3Config(aws sdk)
>>>
```
Nc               (    V ^8  d   QhRRRRRRRR/# )r   endpoint_urlz
str | Noneregionforce_path_stylezbool | Noner   r   r   )r   s   "r   r   S3Config.__annotate__   s,     2 2&27A2\g2	2r   c                	    \        WV4      V n        VR J VR J 8w  g   VR J VR J 8w  d   \        R4      hWn        W n        W0n        R # )NzInvalid arguments for S3Config)r   _config
ValueError_endpoint_url_region_force_path_style)r   rf   rg   rh   s   &&&&r   r   S3Config.__init__   sT     ",8HID fn5,$:NTdhlTl9m=>>)!1r   c                   V ^8  d   QhRR/# r    r   )r   s   "r   r   ri      s     1 1# 1r   c                	    V P                   e)   V P                    RV P                   RV P                   2MRp\        V 4      P                   RV R2# )Nz, zaws sdk(rI   )rm   rn   ro   r%   r&   )r   inners   & r   r(   S3Config.__repr__   s`     !!- !!""T\\N"T5K5K4LM 	
 t*%%&awa00r   )rk   rm   ro   rn   )NNNr<   r   r   r   rd   rd      s    &21 1r   rd   c                  6    ] tR t^tRtRR R lltR R ltRtR# )	S3Middlewarez
Middleware to work with s3:// URLs

Examples
--------
```python
>>> from rattler.networking import Client
>>> middleware = S3Middleware()
>>> middleware
S3Middleware()
>>> Client([middleware])
Client()
>>>
```
Nc                    V ^8  d   QhRRRR/# )r   configzdict[str, S3Config] | Noner   r   r   )r   s   "r   r   S3Middleware.__annotate__   s     U U9 UT Ur   c                	    Vf   \        4       p\        VP                  4        UUu/ uF  w  r#W#P                  bK  	  upp4      V n        R # u uppi r5   )dictr   itemsrk   r   )r   ry   kvs   &&  r   r   S3Middleware.__init__   s;    >VF)FLLN*SNDA1ii<N*ST*Ss   A
c                   V ^8  d   QhRR/# r    r   )r   s   "r   r   rz      r^   r   c                	2    \        V 4      P                   R 2# r`   r$   r'   s   &r   r(   S3Middleware.__repr__   rb   r   r*   r5   r<   r   r   r   rw   rw      s     U
* *r   rw   c                  2    ] tR t^tRtR R ltR R ltRtR# )AddHeadersMiddlewareak  
Middleware that adds headers to requests based on a callback function.

The callback receives the host and path of the request URL and should return
a dictionary of headers to add, or None to add no headers.

Examples
--------
```python
>>> from rattler.networking import Client, AddHeadersMiddleware
>>> def my_callback(host: str, path: str) -> dict[str, str] | None:
...     if host == "private.example.com":
...         return {"Authorization": "Bearer my-token"}
...     return None
>>> middleware = AddHeadersMiddleware(my_callback)
>>> middleware
AddHeadersMiddleware()
>>> Client([middleware])
Client()
>>>
```
c                    V ^8  d   QhRRRR/# )r   callbackz+Callable[[str, str], dict[str, str] | None]r   r   r   )r   s   "r   r   !AddHeadersMiddleware.__annotate__   s     
< 
<!L 
<QU 
<r   c                &    \        V4      V n        R# )av  
Create a new AddHeadersMiddleware instance.

Args:
    callback: A callable that takes (host, path) and returns a dictionary
        of headers to add to the request, or None to add no headers.
        The host is the hostname of the request URL (e.g., "conda.anaconda.org").
        The path is the path component of the URL (e.g., "/conda-forge/linux-64/repodata.json").
N)r   r   )r   r   s   &&r   r   AddHeadersMiddleware.__init__   s     2(;r   c                   V ^8  d   QhRR/# r    r   )r   s   "r   r   r     r^   r   c                	2    \        V 4      P                   R 2# r`   r$   r'   s   &r   r(   AddHeadersMiddleware.__repr__  rb   r   r*   Nr<   r   r   r   r   r      s    .
<* *r   r   N)
__future__r   typingr   rattler.rattlerr   r   r   r   r	   r
   r   r   r   r0   r?   rM   rX   rd   rw   r   r   r   r   <module>r      sn    " 	 	 	#* #*L* *6I I4* *6* *0$1 $1N* *4%* %*r   