o |nhM*@sddlmZddlZddlZddlZejeefZ eje e ee fe ee effZ ddd d Z dddZ dddZdddZdddZGdddZdS)) annotationsNapplication/octet-streamfilename str | NonedefaultstrreturncCs|r t|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 F/usr/local/bin/dhwp/env/lib/python3.10/site-packages/urllib3/fields.pyguess_content_types r namevalue_TYPE_FIELD_VALUEc sddl}|jdtddttrdtfddd Ds=|d d }z|d W|Stt fy<Ynwt j d|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 `_. :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|]}|vVqdSNr ).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  r0cC"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_html5u r5cCr1)r2rNzz'format_header_param' has been renamed to 'format_multipart_header_param'. The old name will be removed in urllib3 v2.1.0.rrr3r4r r r format_header_paramr6r7c@sdeZdZdZ   d#d$d dZe d%d&ddZd'ddZd(ddZd)ddZ   d#d*d!d"Z 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. Nrrdatarrrheaderstyping.Mapping[str, str] | Noneheader_formatter5typing.Callable[[str, _TYPE_FIELD_VALUE], str] | NonecCsZ||_||_||_i|_|rt||_|dur(ddl}|jdtdd||_dSt |_dS)NrzUThe 'header_formatter' parameter is deprecated and will be removed in urllib3 v2.1.0.rr) _name _filenamer9r:dictrrrr<r0)selfrr9rr:r<rr r r __init__s   zRequestField.__init__ fieldnamer_TYPE_FIELD_VALUE_TUPLErcCs`t|trt|dkr|\}}}n|\}}t|}nd}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)rr<) content_type)r tuplelenr make_multipart)clsrCrr<rr9rF request_paramr r r from_tupless     zRequestField.from_tuplescCs |||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: )r<)rArrr r r _render_parts zRequestField._render_part header_parts[dict[str, _TYPE_FIELD_VALUE | None] | typing.Sequence[tuple[str, _TYPE_FIELD_VALUE | None]]cCsNg}t|tr |}n|}|D]\}}|dur!||||qd|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@itemsappendrMjoin)rArNpartsiterablerrr r r _render_partss    zRequestField._render_partscCsg}gd}|D]}|j|dr||d|j|q|jD]\}}||vr8|r8||d|q$|dd|S)z= Renders the headers for this request field. )Content-Disposition Content-TypeContent-LocationFz: z )r:getrRrQrS)rAlines sort_keyssort_key header_name header_valuer r r render_headers#s  zRequestField.render_headerscontent_dispositionrFcontent_locationNonec 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-datarPrrrWrXrYN)rSrVr>r?r:)rArarFrbr r r rI6s  zRequestField.make_multipart)NNN) rrr9rrrr:r;r<r=r)rCrrrDr<r=rr8rrrrrr)rNrOrr)rr)rarrFrrbrrrc) __name__ __module__ __qualname____doc__rB classmethodrLrMrVr`rIr r r r r8s   ,  r8)r)rrrrrrre) __future__r email.utilsr'r typingUnionrr!rrGrDr r+r0r5r7r8r r r r s$     0 &