o
    ;)h                      @  sd  U d dl m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 ejr0d d	lmZ d
Zeg dZdZzzd dlZW n eyN   d dlZY nw W n	 eyY   Y nw ed7 Zzd dlZW n	 eym   Y nw ed7 ZG dd deZejZded< ejeef Zh dZ						d6d7dd Z d8d%d&Z!d9d+d,Z"G d-d. d.ej#Z$d:d4d5Z%dS );    )annotationsN)	b64encode)Enum   )UnrewindableBodyError   )to_bytes)Finalz@@@SKIP_HEADER@@@)accept-encodinghost
user-agentzgzip,deflatez,brz,zstdc                   @  s   e Zd ZdZdS )_TYPE_FAILEDTELLr   N)__name__
__module____qualname__token r   r   SC:\Users\User\Downloads\Proyecto_IoT\venv\Lib\site-packages\urllib3/util/request.pyr   '   s    r   zFinal[_TYPE_FAILEDTELL]_FAILEDTELL>   ZCONNECTDELETETRACEHEADOPTIONSGET
keep_alivebool | Noneaccept_encodingbool | list[str] | str | None
user_agent
str | None
basic_authproxy_basic_authdisable_cachereturndict[str, str]c                 C  s   i }|rt |tr
nt |trd|}nt}||d< |r!||d< | r'd|d< |r7dt|d  |d< |rGdt|d  |d	< |rMd
|d< |S )ad  
    Shortcuts for generating request headers.

    :param keep_alive:
        If ``True``, adds 'connection: keep-alive' header.

    :param accept_encoding:
        Can be a boolean, list, or string.
        ``True`` translates to 'gzip,deflate'.  If the dependencies for
        Brotli (either the ``brotli`` or ``brotlicffi`` package) and/or Zstandard
        (the ``zstandard`` package) algorithms are installed, then their encodings are
        included in the string ('br' and 'zstd', respectively).
        List will get joined by comma.
        String will be used as provided.

    :param user_agent:
        String representing the user-agent you want, such as
        "python-urllib3/0.6"

    :param basic_auth:
        Colon-separated username:password string for 'authorization: basic ...'
        auth header.

    :param proxy_basic_auth:
        Colon-separated username:password string for 'proxy-authorization: basic ...'
        auth header.

    :param disable_cache:
        If ``True``, adds 'cache-control: no-cache' header.

    Example:

    .. code-block:: python

        import urllib3

        print(urllib3.util.make_headers(keep_alive=True, user_agent="Batman/1.0"))
        # {'connection': 'keep-alive', 'user-agent': 'Batman/1.0'}
        print(urllib3.util.make_headers(accept_encoding=True))
        # {'accept-encoding': 'gzip,deflate'}
    ,r
   r   z
keep-alive
connectionzBasic zlatin-1authorizationzproxy-authorizationzno-cachezcache-control)
isinstancestrlistjoinACCEPT_ENCODINGr   encodedecode)r   r   r   r    r!   r"   headersr   r   r   make_headers7   s*   1

r0   body
typing.Anypos_TYPE_BODY_POSITION | Nonec                 C  sR   |durt | | |S t| dddur'z|  }W |S  ty&   t}Y |S w |S )z
    If a position is provided, move file to that point.
    Otherwise, we'll attempt to record a position for future use.
    Ntell)rewind_bodygetattrr5   OSErrorr   )r1   r3   r   r   r   set_file_position   s   
	
r9   typing.IO[typing.AnyStr]body_pos_TYPE_BODY_POSITIONNonec              
   C  st   t | dd}|dur(t|tr(z|| W dS  ty' } ztd|d}~ww |tu r0tdtdt| d)z
    Attempt to rewind body to a certain position.
    Primarily used for request redirects and retries.

    :param body:
        File-like object that supports seek.

    :param int pos:
        Position to seek to in file.
    seekNzAAn error occurred when rewinding request body for redirect/retry.zRUnable to record file position for rewinding request body during a redirect/retry.z1body_pos must be of type integer, instead it was .)r7   r(   intr8   r   r   
ValueErrortype)r1   r;   	body_seeker   r   r   r6      s&   r6   c                   @  s   e Zd ZU ded< ded< dS )ChunksAndContentLengthztyping.Iterable[bytes] | Nonechunksz
int | Nonecontent_lengthN)r   r   r   __annotations__r   r   r   r   rE      s   
 rE   typing.Any | Nonemethodr)   	blocksizer@   c                   s   du rd}|  tvrd}nWd}nTtttfr%tf}t|d }nAtdr8d
 fdd}| }d}n.zt}W n! t	y_   zt
}d}W n t	y\   t	ddw Y nw f}|j}t||d	S )aR  Takes the HTTP request method, body, and blocksize and
    transforms them into an iterable of chunks to pass to
    socket.sendall() and an optional 'Content-Length' header.

    A 'Content-Length' of 'None' indicates the length of the body
    can't be determined so should use 'Transfer-Encoding: chunked'
    for framing instead.
    Nr   readr#   typing.Iterable[bytes]c                  3  s8    t tj} 	  }|sd S | r|d}|V  q)NTzutf-8)r(   io
TextIOBaserL   r-   )r-   	datablockrK   r1   r   r   chunk_readable   s   

z&body_to_chunks.<locals>.chunk_readablezO'body' must be a bytes-like object, file-like object, or iterable. Instead was )rF   rG   )r#   rM   )upper_METHODS_NOT_EXPECTING_BODYr(   r)   bytesr   lenhasattr
memoryview	TypeErroriternbytesrE   )r1   rJ   rK   rF   rG   rR   mvr   rQ   r   body_to_chunks   s@   

r]   )NNNNNN)r   r   r   r   r   r   r    r   r!   r   r"   r   r#   r$   )r1   r2   r3   r4   r#   r4   )r1   r:   r;   r<   r#   r=   )r1   rI   rJ   r)   rK   r@   r#   rE   )&
__future__r   rN   typingbase64r   enumr   
exceptionsr   utilr   TYPE_CHECKINGr	   SKIP_HEADER	frozensetSKIPPABLE_HEADERSr,   Z
brotlicffiZ_unused_module_brotliImportErrorbrotliZ	zstandardZ_unused_module_zstdr   r   r   rH   Unionr@   r<   rT   r0   r9   r6   
NamedTuplerE   r]   r   r   r   r   <module>   sX    
Q
