U e[*@sddlmZddlZddlZddlZejeefZ eje ej ee fej ee effZ dddddddZ dd dd d d Z dd dd d dZdd dd ddZdd dd ddZGdddZdS)) annotationsNapplication/octet-stream str | Nonestr)filenamedefaultreturncCs|rt|dp|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)rrr `_. :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``. :returns: An RFC-2231-formatted unicode string. .. deprecated:: 2.0.0 Will be removed in urllib3 v2.1.0. This is not valid for ``multipart/form-data`` header parameters. rNz'format_header_param_rfc2231' is deprecated and will be removed in urllib3 v2.1.0. This is not valid for multipart/form-data header parameters. stacklevelutf-8c3s|]}|kVqdS)Nr ).0chrr r @sz.format_header_param_rfc2231..z"\ =""asciiz*=) warningswarnDeprecationWarning isinstancebytesdecodeanyencodeUnicodeEncodeErrorUnicodeDecodeErroremailutilsencode_rfc2231)rrrresultr rr format_header_param_rfc2231s$  r+cCs6t|tr|d}|dddd}|d|dS)a Format and quote a single multipart header parameter. This follows the `WHATWG HTML Standard`_ as of 2021/06/10, matching the behavior of current browser and curl versions. Values are assumed to be UTF-8. The ``\n``, ``\r``, and ``"`` characters are percent encoded. .. _WHATWG HTML Standard: https://html.spec.whatwg.org/multipage/ form-control-infrastructure.html#multipart-form-data :param name: The name of the parameter, an ASCII-only ``str``. :param value: The value of the parameter, a ``str`` or UTF-8 encoded ``bytes``. :returns: A string ``name="value"`` with the escaped value. .. versionchanged:: 2.0.0 Matches the WHATWG HTML Standard as of 2021/06/10. Control characters are no longer percent encoded. .. versionchanged:: 2.0.0 Renamed from ``format_header_param_html5`` and ``format_header_param``. The old names will be removed in urllib3 v2.1.0. rz%0Az%0Dz%22) "rr)r r!r" translate)rrr r r format_multipart_header_paramOs  r0cCs"ddl}|jdtddt||S) .. deprecated:: 2.0.0 Renamed to :func:`format_multipart_header_param`. Will be removed in urllib3 v2.1.0. rNz'format_header_param_html5' has been renamed to 'format_multipart_header_param'. The old name will be removed in urllib3 v2.1.0.rrrrrr0rrrr r r format_header_param_html5usr4cCs"ddl}|jdtddt||S)r1rNzz'format_header_param' has been renamed to 'format_multipart_header_param'. The old name will be removed in urllib3 v2.1.0.rrr2r3r r r format_header_paramsr5c@seZdZdZdddddddd d Zeddd ddd d dZddddddZdddddZddddZ ddddddddZ dS) 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. .. versionchanged:: 2.0.0 The ``header_formatter`` parameter is deprecated and will be removed in urllib3 v2.1.0. Nrrrztyping.Mapping[str, str] | Nonez5typing.Callable[[str, _TYPE_FIELD_VALUE], str] | None)rdatarheadersheader_formattercCsX||_||_||_i|_|r&t||_|dk rNddl}|jdtdd||_nt |_dS)NrzUThe 'header_formatter' parameter is deprecated and will be removed in urllib3 v2.1.0.rr) _name _filenamer7r8dictrrrr9r0)selfrr7rr8r9rr r r __init__s zRequestField.__init___TYPE_FIELD_VALUE_TUPLE) fieldnamerr9rcCs`t|tr4t|dkr"|\}}}q@|\}}t|}n d}d}|}|||||d}|j|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)rr9) content_type)r tuplelenr make_multipart)clsr@rr9rr7rB request_paramr r r from_tupless      zRequestField.from_tuplesrcCs |||S)a Override this method to change how each multipart header parameter is formatted. By default, this calls :func:`format_multipart_header_param`. :param name: The name of the parameter, an ASCII-only ``str``. :param value: The value of the parameter, a ``str`` or UTF-8 encoded ``bytes``. :meta public: )r9)r=rrr r r _render_partszRequestField._render_partz[dict[str, _TYPE_FIELD_VALUE | None] | typing.Sequence[tuple[str, _TYPE_FIELD_VALUE | None]]) header_partsrcCsNg}t|tr|}n|}|D]"\}}|dk r ||||q d|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 r<itemsappendrIjoin)r=rJpartsiterablerrr r r _render_partss   zRequestField._render_parts)rcCsg}dddg}|D],}|j|dr||d|j|q|jD](\}}||krJ|rJ||d|qJ|dd|S)z= Renders the headers for this request field. Content-Disposition Content-TypeContent-LocationFz: z )r8getrMrLrN)r=lines sort_keyssort_key header_name header_valuer r r render_headers#s  zRequestField.render_headersNone)content_dispositionrBcontent_locationrc CsN|pddd|d|jfd|jffg}||jd<||jd<||jd<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_disposition: The 'Content-Disposition' of the request body. Defaults to 'form-data' :param content_type: The 'Content-Type' of the request body. :param content_location: The 'Content-Location' of the request body. z form-datarKrrrRrSrTN)rNrQr:r;r8)r=r]rBr^r r r rE6s   zRequestField.make_multipart)NNN)N)NNN) __name__ __module__ __qualname____doc__r> classmethodrHrIrQr[rEr r r r r6s,r6)r) __future__r email.utilsr'r typingUnionrr!rTupler?r r+r0r4r5r6r r r r s"  0&