
    Kxh!                         d dl mZ d dlZd dlZd dlZddlmZ ddZd Z	dd	d
Z
e
                    d  ed d          D                        d Zd ZeZ G d de          ZdS )    )absolute_importN   )sixapplication/octet-streamc                 B    | rt          j        |           d         p|S |S )z
    Guess the "Content-Type" of a file.

    :param filename:
        The filename to guess the "Content-Type" of using :mod:`mimetypes`.
    :param default:
        If no "Content-Type" can be guessed, default to `default`.
    r   )	mimetypes
guess_type)filenamedefaults     M/var/www/html/what/lib/python3.11/site-packages/pip/_vendor/urllib3/fields.pyguess_content_typer   
   s,      <#H--a0;G;N    c                    t          t          j                  r                    d          t	          fddD                       s7| dd}	 |                    d           |S # t          t          f$ r Y nw xY wt          j        r                    d          t          j
                            d          | dt          j        r                    d          S )a!  
    Helper function to format and quote a single header parameter using the
    strategy defined in RFC 2231.

    Particularly useful for header parameters which might contain
    non-ASCII values, like file names. This follows
    `RFC 2388 Section 4.4 <https://tools.ietf.org/html/rfc2388#section-4.4>`_.

    :param name:
        The name of the parameter, a string expected to be ASCII only.
    :param value:
        The value of the parameter, provided as ``bytes`` or `str``.
    :ret:
        An RFC-2231-formatted unicode string.
    utf-8c              3       K   | ]}|v V  	d S N ).0chvalues     r   	<genexpr>z.format_header_param_rfc2231.<locals>.<genexpr>+   s'      //rrU{//////r   z"\
=""asciiz*=)
isinstancer   binary_typedecodeanyencodeUnicodeEncodeErrorUnicodeDecodeErrorPY2emailutilsencode_rfc2231)namer   results    ` r   format_header_param_rfc2231r(      s     %)) &W%%////Y///// #ttUUU+	MM'""" M #$67 	 	 	D	
 w &W%% K&&ug66Eee$E
w &W%%Ls   A, ,B ?B z%22z\\)r   \c                 f    i | ].}|d vt          j        |          d                    |          /S ))   z%{:02X})r   unichrformat)r   ccs     r   
<dictcomp>r/   J   sE       W 	
2
))"--r       c                     fd}t          j        d                    d                                 D                                 }|                    ||           }|S )Nc                 :    |                      d                   S )Nr   )group)matchneedles_and_replacementss    r   replacerz#_replace_multiple.<locals>.replacerS   s    'A77r   |c                 6    g | ]}t          j        |          S r   )reescape)r   needles     r   
<listcomp>z%_replace_multiple.<locals>.<listcomp>W   s"    SSS29V$$SSSr   )r9   compilejoinkeyssub)r   r5   r6   patternr'   s    `   r   _replace_multiplerB   R   st    8 8 8 8 8 j		SS3K3P3P3R3RSSSTT G [[5))FMr   c                     t          |t          j                  r|                    d          }t	          |t
                    }| d|dS )a  
    Helper function to format and quote a single header parameter using the
    HTML5 strategy.

    Particularly useful for header parameters which might contain
    non-ASCII values, like file names. This follows the `HTML5 Working Draft
    Section 4.10.22.7`_ and matches the behavior of curl and modern browsers.

    .. _HTML5 Working Draft Section 4.10.22.7:
        https://w3c.github.io/html/sec-forms.html#multipart-form-data

    :param name:
        The name of the parameter, a string expected to be ASCII only.
    :param value:
        The value of the parameter, provided as ``bytes`` or `str``.
    :ret:
        A unicode string, stripped of troublesome characters.
    r   r   r   )r   r   r   r   rB   _HTML5_REPLACEMENTS)r&   r   s     r   format_header_param_html5rE   _   sL    & %)) &W%%e%899Euuu%%r   c                   V    e Zd ZdZddefdZeefd            Zd Zd Z	d Z
	 d	dZdS )
RequestFielda  
    A data container for request body parameters.

    :param name:
        The name of this request field. Must be unicode.
    :param data:
        The data/value body.
    :param filename:
        An optional filename of the request field. Must be unicode.
    :param headers:
        An optional dict-like object of headers to initially use for the field.
    :param header_formatter:
        An optional callable that is used to encode and format the headers. By
        default, this is :func:`format_header_param_html5`.
    Nc                 x    || _         || _        || _        i | _        |rt	          |          | _        || _        d S r   )_name	_filenamedataheadersdictheader_formatter)selfr&   rK   r
   rL   rN   s         r   __init__zRequestField.__init__   sC     
!	 	)==DL 0r   c                     t          |t                    r/t          |          dk    r|\  }}}n|\  }}t          |          }nd}d}|} | ||||          }|                    |           |S )a  
        A :class:`~urllib3.fields.RequestField` factory from old-style tuple parameters.

        Supports constructing :class:`~urllib3.fields.RequestField` from
        parameter of key/value strings AND key/filetuple. A filetuple is a
        (filename, data, MIME type) tuple where the MIME type is optional.
        For example::

            'foo': 'bar',
            'fakefile': ('foofile.txt', 'contents of foofile'),
            'realfile': ('barfile.txt', open('realfile').read()),
            'typedfile': ('bazfile.bin', open('bazfile').read(), 'image/jpeg'),
            'nonamefile': 'contents of nonamefile field',

        Field names and filenames must be unicode.
           N)r
   rN   )content_type)r   tuplelenr   make_multipart)cls	fieldnamer   rN   r
   rK   rS   request_params           r   from_tupleszRequestField.from_tuples   s    $ eU## 		5zzQ/4,$!&$1(;;HLDthAQ
 
 
 	$$,$???r   c                 .    |                      ||          S )aI  
        Overridable helper function to format a single header parameter. By
        default, this calls ``self.header_formatter``.

        :param name:
            The name of the parameter, a string expected to be ASCII only.
        :param value:
            The value of the parameter, provided as a unicode string.
        )rN   )rO   r&   r   s      r   _render_partzRequestField._render_part   s     $$T5111r   c                     g }|}t          |t                    r|                                }|D ]0\  }}|)|                    |                     ||                     1d                    |          S )aO  
        Helper function to format and quote a single header.

        Useful for single headers that are composed of multiple items. E.g.,
        'Content-Disposition' fields.

        :param header_parts:
            A sequence of (k, v) tuples or a :class:`dict` of (k, v) to format
            as `k1="v1"; k2="v2"; ...`.
        N; )r   rM   itemsappendr\   r>   )rO   header_partspartsiterabler&   r   s         r   _render_partszRequestField._render_parts   s     lD)) 	,#))++H# 	= 	=KD% T..tU;;<<<zz%   r   c                 j   g }g d}|D ]B}| j                             |d          r%|                    |d| j         |                    C| j                                         D ]%\  }}||vr|r|                    |d|           &|                    d           d                    |          S )z=
        Renders the headers for this request field.
        )Content-DispositionContent-TypeContent-LocationFz: z
)rL   getr`   r_   r>   )rO   lines	sort_keyssort_keyheader_nameheader_values         r   render_headerszRequestField.render_headers   s     OOO	! 	M 	MH|%00 M(((DL4J4JKLLL)-););)=)= 	J 	J%K)++ JLLkkk<<!HIIIW||E"""r   c                     |pd| j         d<   | j         dxx         d                    d|                     d| j        fd| j        ff          g          z  cc<   || j         d<   || j         d<   d	S )
a|  
        Makes this request field into a multipart request field.

        This method overrides "Content-Disposition", "Content-Type" and
        "Content-Location" headers to the request parameter.

        :param content_type:
            The 'Content-Type' of the request body.
        :param content_location:
            The 'Content-Location' of the request body.

        z	form-datarf   r^    r&   r
   rg   rh   N)rL   r>   rd   rI   rJ   )rO   content_dispositionrS   content_locations       r   rV   zRequestField.make_multipart   s     /B.Q\*+*+++uzz""tz*[$.,IJ 0
 0
 	
+++ (4^$+;'(((r   )NNN)__name__
__module____qualname____doc__rE   rP   classmethodrZ   r\   rd   ro   rV   r   r   r   rG   rG   ~   s         ( 21 1 1 1  <U ! ! ! [!F2 2 2! ! !,# # #( MQ< < < < < <r   rG   )r   )
__future__r   email.utilsr#   r   r9   packagesr   r   r(   rD   updaterangerB   rE   format_header_paramobjectrG   r   r   r   <module>r      s)   & & & & & &         				         ' ' 'V       %h''    
 
 
& & &8 0 T< T< T< T< T<6 T< T< T< T< T<r   